Skip to content

Commit 57a1680

Browse files
committed
simplify instance cache helper
1 parent 1c64563 commit 57a1680

File tree

1 file changed

+11
-68
lines changed

1 file changed

+11
-68
lines changed

fsspec/conftest.py

Lines changed: 11 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -33,95 +33,38 @@ class InstanceCacheInspector:
3333
Helper class to inspect instance caches of filesystem classes in tests.
3434
"""
3535

36-
@staticmethod
37-
def classes_from_refs(
38-
cls_reference: "tuple[str | type[fsspec.AbstractFileSystem], ...]",
39-
/,
40-
*,
41-
empty_is_all: bool = True,
42-
) -> deque[type[fsspec.AbstractFileSystem]]:
36+
def clear(self) -> None:
4337
"""
44-
Convert class references (strings or types) to a deque of filesystem classes.
45-
46-
Parameters
47-
----------
48-
cls_reference:
49-
Tuple of class references as strings or types.
50-
Supports fqns, protocol names, or the class types themselves.
51-
empty_is_all:
52-
If True and no classes are specified, include all imported filesystem classes.
53-
54-
Returns
55-
-------
56-
fs_classes:
57-
Deque of filesystem classes corresponding to the provided references.
38+
Clear instance caches of all currently imported filesystem classes.
5839
"""
59-
classes: deque[type[fsspec.AbstractFileSystem]] = deque()
60-
61-
for ref in cls_reference:
62-
if isinstance(ref, str):
63-
try:
64-
cls = fsspec.get_filesystem_class(ref)
65-
except ValueError:
66-
module_name, _, class_name = ref.rpartition(".")
67-
module = __import__(module_name, fromlist=[class_name])
68-
cls = getattr(module, class_name)
69-
classes.append(cls)
70-
else:
71-
classes.append(ref)
72-
if empty_is_all and not classes:
73-
classes.append(fsspec.spec.AbstractFileSystem)
74-
return classes
75-
76-
def clear(
77-
self,
78-
*cls_reference: "str | type[fsspec.AbstractFileSystem]",
79-
recursive: bool = True,
80-
) -> None:
81-
"""
82-
Clear instance caches of specified filesystem classes.
83-
"""
84-
classes = self.classes_from_refs(cls_reference)
85-
# Clear specified classes and optionally their subclasses
40+
classes = deque([fsspec.spec.AbstractFileSystem])
8641
while classes:
8742
cls = classes.popleft()
8843
cls.clear_instance_cache()
89-
if recursive:
90-
subclasses = cls.__subclasses__()
91-
classes.extend(subclasses)
92-
93-
def gather_counts(
94-
self,
95-
*cls_reference: "str | type[fsspec.AbstractFileSystem]",
96-
omit_zero: bool = True,
97-
recursive: bool = True,
98-
) -> dict[str, int]:
44+
classes.extend(cls.__subclasses__())
45+
46+
def gather_counts(self, *, omit_zero: bool = True) -> dict[str, int]:
9947
"""
100-
Gather counts of filesystem instances in the instance caches of all loaded classes.
48+
Gather counts of filesystem instances in the instance caches
49+
of all currently imported filesystem classes.
10150
10251
Parameters
10352
----------
104-
cls_reference:
105-
class references as strings or types.
10653
omit_zero:
10754
Whether to omit instance types with no cached instances.
108-
recursive:
109-
Whether to include subclasses of the specified classes.
11055
"""
11156
out: dict[str, int] = {}
112-
classes = self.classes_from_refs(cls_reference)
57+
classes = deque([fsspec.spec.AbstractFileSystem])
11358
while classes:
11459
cls = classes.popleft()
115-
count = len(cls._cache)
60+
count = len(cls._cache) # there is no public interface for the cache
11661
# note: skip intermediate AbstractFileSystem subclasses
11762
# if they proxy the protocol attribute via a property.
11863
if isinstance(cls.protocol, (Sequence, str)):
11964
key = cls.protocol if isinstance(cls.protocol, str) else cls.protocol[0]
12065
if count or not omit_zero:
12166
out[key] = count
122-
if recursive:
123-
subclasses = cls.__subclasses__()
124-
classes.extend(subclasses)
67+
classes.extend(cls.__subclasses__())
12568
return out
12669

12770

0 commit comments

Comments
 (0)