11from __future__ import annotations
22import datetime
3- from typing import Set , Tuple , Dict , Union , Optional
3+ from typing import Set , Tuple , Dict , Union , Optional , List
44from ravendb .documents .conventions import DocumentConventions
55from ravendb .data .timeseries import TimeSeriesRange
66from ravendb .tools .utils import CaseInsensitiveDict , CaseInsensitiveSet
@@ -43,24 +43,21 @@ def _include_compare_exchange_value(self, path: str) -> None:
4343
4444 def _include_counter_with_alias (self , path : str , * names : str ) -> None :
4545 self ._with_alias ()
46- self ._include_counters (path , * names )
46+ self ._include_counters (path , list ( names ) if isinstance ( names , tuple ) else [ names ] )
4747
4848 def _include_documents (self , path : str ):
4949 if not self ._documents_to_include :
5050 self ._documents_to_include = set ()
5151 self ._documents_to_include .add (path )
5252
53- def _include_counters (self , path : str , * names : str ):
53+ def _include_counters (self , path : str , names : List [ str ] ):
5454 if not names :
5555 raise ValueError ("Expected at least one name" )
5656
5757 self ._assert_not_all_and_add_new_entry_if_needed (path )
5858 for name in names :
5959 if name .isspace ():
6060 raise ValueError ("Counters(names): 'names' should not contain null or whitespace elements" )
61- if isinstance (name , list ):
62- self ._include_counters (path , * name )
63- continue
6461 self ._counters_to_include_by_source_path .get (path )[1 ].add (name )
6562
6663 def _include_all_counters_with_alias (self , path : str ):
@@ -72,14 +69,14 @@ def _include_all_counters(self, source_path: str):
7269 self ._counters_to_include_by_source_path = CaseInsensitiveDict ()
7370 val = self ._counters_to_include_by_source_path .get (source_path )
7471 if val is not None and val [1 ] is not None :
75- raise ValueError ("You cannot use all_counters() after using counters(*names)" )
72+ raise RuntimeError ("You cannot use all_counters() after using counters(*names)" )
7673 self ._counters_to_include_by_source_path [source_path ] = (True , None )
7774
7875 def _assert_not_all_and_add_new_entry_if_needed (self , path : str ):
7976 if self ._counters_to_include_by_source_path is not None :
8077 val = self ._counters_to_include_by_source_path .get (path , None )
8178 if val is not None and val [0 ]:
82- raise ValueError ("You cannot use counters(*names) after using all_counters()" )
79+ raise RuntimeError ("You cannot use counters(*names) after using all_counters()" )
8380
8481 if self ._counters_to_include_by_source_path is None :
8582 self ._counters_to_include_by_source_path = CaseInsensitiveDict ()
@@ -116,8 +113,13 @@ def include_documents(self, path: str) -> IncludeBuilderBase:
116113 self ._include_documents (path )
117114 return self
118115
119- def include_counter (self , * names : str ) -> IncludeBuilderBase :
120- self ._include_counters ("" , * names )
116+ def include_counter (self , name : str ) -> IncludeBuilderBase :
117+ self ._include_counters ("" , [name ])
118+ return self
119+
120+ def include_counters (self , * names : str ) -> IncludeBuilderBase :
121+ for name in names :
122+ self .include_counter (name )
121123 return self
122124
123125 def include_all_counters (self ) -> IncludeBuilderBase :
@@ -140,8 +142,12 @@ def include_compare_exchange_value(self, path: str) -> IncludeBuilderBase:
140142
141143
142144class QueryIncludeBuilder (IncludeBuilderBase ):
145+ def include_counter (self , name : str , path : Optional [str ] = "" ):
146+ self ._include_counter_with_alias (path , name )
147+ return self
148+
143149 def include_counters (self , * names : str , path : Optional [str ] = "" ):
144- self ._include_counter_with_alias (path , * names )
150+ self ._include_counter_with_alias (path , * names if isinstance ( names , tuple ) else names )
145151 return self
146152
147153 def include_all_counters (self , path : Optional [str ] = "" ):
0 commit comments