Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5ffc8ed

Browse files
committed
refactor(ListQuery): Pure list
1 parenta71cd97 commit5ffc8ed

File tree

2 files changed

+13
-27
lines changed

2 files changed

+13
-27
lines changed

‎libvcs/utils/query_list.py‎

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
importdataclasses
21
importre
32
importtraceback
4-
fromtypingimportAny,Callable,Generic,Optional,Protocol,Sequence,TypeVar,Union
3+
fromtypingimportAny,Callable,Optional,Protocol,Sequence,TypeVar,Union
54

65
T=TypeVar("T",Any,Any)
76

@@ -121,13 +120,9 @@ def lookup_iregex(data, rhs):
121120
}
122121

123122

124-
@dataclasses.dataclass(eq=False)
125-
classQueryList(Generic[T]):
123+
classQueryList(list[T]):
126124
"""Filter list of object/dicts. For small, local datasets. *Experimental, unstable*.
127125
128-
:py:func:`dataclasses.dataclass` is only used for ``__repr__`` and pytest comparison
129-
details.
130-
131126
>>> query = QueryList(
132127
... [
133128
... {
@@ -144,44 +139,35 @@ class QueryList(Generic[T]):
144139
... },
145140
... ]
146141
... )
147-
>>> query.filter(place="Chicago suburbs").data[0]['city']
142+
>>> query.filter(place="Chicago suburbs")[0]['city']
148143
'Elmhurst'
149-
>>> query.filter(place__icontains="chicago").data[0]['city']
144+
>>> query.filter(place__icontains="chicago")[0]['city']
150145
'Elmhurst'
151-
>>> query.filter(foods__breakfast="waffles").data[0]['city']
146+
>>> query.filter(foods__breakfast="waffles")[0]['city']
152147
'Elmhurst'
153-
>>> query.filter(foods__fruit__in="cantelope").data[0]['city']
148+
>>> query.filter(foods__fruit__in="cantelope")[0]['city']
154149
'Elmhurst'
155-
>>> query.filter(foods__fruit__in="orange").data[0]['city']
150+
>>> query.filter(foods__fruit__in="orange")[0]['city']
156151
'Tampa'
157152
"""
158153

159-
__slots__= ("data","pk_key")
160154
data:Sequence[T]
161155

162-
# def __init__(self, data, pk_key: Optional[str] = None):
163-
# self.data: Sequence[T] = data
164-
# #: Primary key for objects, optional.
165-
# #: Use for .get(), .items()
166-
# self.pk_key: Optional[Any] = pk_key
167-
168156
defitems(self):
169157
data:Sequence[T]
170158

171159
ifself.pk_keyisNone:
172160
raiseException("items() require a pk_key exists")
173-
return [(getattr(item,self.pk_key),item)foriteminself.data]
161+
return [(getattr(item,self.pk_key),item)foriteminself]
174162

175163
def__eq__(self,other):
176164
data=other
177-
ifhasattr(data,"data"):
178-
data=getattr(data,"data")
179165

180-
ifnotisinstance(self.data,list)ornotisinstance(data,list):
166+
ifnotisinstance(self,list)ornotisinstance(data,list):
181167
returnFalse
182168

183-
iflen(self.data)==len(data):
184-
for (a,b)inzip(self.data,data):
169+
iflen(self)==len(data):
170+
for (a,b)inzip(self,data):
185171
ifisinstance(a,dict):
186172
a_keys=a.keys()
187173
ifa.keys==b.keys():
@@ -230,4 +216,4 @@ def val_match(obj):
230216
else:
231217
_filter=filter_lookup
232218

233-
returnself.__class__(data=[kforkinself.dataif_filter(k)])
219+
returnself.__class__(kforkinselfif_filter(k))

‎tests/utils/test_query_list.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@
230230
],
231231
)
232232
deftest_filter(items:list,filter_expr:Optional[dict],expected_result:list):
233-
qs=QueryList(data=items)
233+
qs=QueryList(items)
234234
iffilter_exprisnotNone:
235235
ifisinstance(filter_expr,dict):
236236
assertqs.filter(**filter_expr)==expected_result

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp