Skip to content

Commit 5953c86

Browse files
committed
localmemory: init
1 parent 66072ac commit 5953c86

File tree

3 files changed

+53
-0
lines changed

3 files changed

+53
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from __future__ import annotations
2+
3+
import logging
4+
5+
from fsspec.implementations.memory import MemoryFileSystem
6+
7+
logger = logging.getLogger("fsspec.localmemoryfs")
8+
9+
10+
class LocalMemoryFileSystem(MemoryFileSystem):
11+
"""A filesystem based on a dict of BytesIO objects
12+
13+
This is a local filesystem so different instances of this class
14+
point to different memory filesystems.
15+
"""
16+
17+
store = None
18+
pseudo_dirs = None
19+
protocol = "localmemory"
20+
root_marker = "/"
21+
_intrans = False
22+
cachable = False # same as: skip_instance_cache = True
23+
24+
def __init__(self, *args, **kwargs):
25+
self.logger = logger # global
26+
self.store: dict[str, Any] = {} # local
27+
self.pseudo_dirs = [""] # local
28+
super().__init__(*args, **kwargs)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import pytest
2+
3+
import fsspec
4+
from fsspec.implementations.localmemory import LocalMemoryFileSystem
5+
6+
7+
def test_protocol():
8+
# this should not throw: ValueError: Protocol not known: localmemory
9+
fsspec.filesystem("localmemory")
10+
11+
12+
def test_init():
13+
fs1 = LocalMemoryFileSystem()
14+
fs2 = LocalMemoryFileSystem()
15+
16+
# check that fs1 and fs2 are different instances of LocalMemoryFileSystem
17+
assert id(fs1) != id(fs2)
18+
assert id(fs1.store) != id(fs2.store)
19+
assert id(fs1.pseudo_dirs) != id(fs2.pseudo_dirs)
20+
21+
fs1.touch("/fs1.txt")
22+
fs2.touch("/fs2.txt")
23+
assert fs1.ls("/", detail=False) == ["/fs1.txt"]
24+
assert fs2.ls("/", detail=False) == ["/fs2.txt"]

fsspec/registry.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ def register_implementation(name, cls, clobber=False, errtxt=None):
171171
"err": "LibArchive requires to be installed",
172172
},
173173
"local": {"class": "fsspec.implementations.local.LocalFileSystem"},
174+
"localmemory": {"class": "fsspec.implementations.localmemory.LocalMemoryFileSystem"},
174175
"memory": {"class": "fsspec.implementations.memory.MemoryFileSystem"},
175176
"oci": {
176177
"class": "ocifs.OCIFileSystem",

0 commit comments

Comments
 (0)