基于nodes的文件系统抽象
项目描述
node.ext.fs
概述
node.ext.fs 是一个用于文件系统目录的node实现。它是 node.ext.directory 的后继者。
有关node的更多信息,请参阅 https://pypi.python.org/pypi/node。
用法
创建新文件
from node.ext.fs import File
file_path = 'file.txt'
f = File(name=file_path)
# set contents via data attribute
f.data = 'data\n'
# set contents via lines attribute
f.lines = ['data']
# set permissions
f.fs_mode = 0o644
# persist
f()
读取现有文件
file_path = 'file.txt'
f = File(name=file_path)
assert(f.data == 'data\n')
assert(f.lines == ['data'])
assert(f.fs_mode == 0o644)
包含二进制数据的文件
from node.ext.fs import MODE_BINARY
file_path = 'file.txt'
f = File(name=file_path)
f.mode = MODE_BINARY
f.data = b'\x00\x00'
assert(f.data == b'\x00\x00')
# lines property won't work if file in binary mode
f.lines # raises RuntimeError
创建目录
from node.ext.fs import Directory
dir_path = '.'
d = Directory(name=dir_path)
# add subdirectories and files
d['sub'] = Directory()
d['file.txt'] = File()
# set permissions for directory
d['sub'].fs_mode = 0o755
# persist
d()
读取现有目录
dir_path = '.'
d = Directory(name=dir_path)
>>> d.printtree()
<class 'node.ext.fs.directory.Directory'>: .
<class 'node.ext.fs.directory.File'>: file.txt
<class 'node.ext.fs.directory.Directory'>: sub
通过设置 default_file_factory 和相应的 default_directory_factory 来定义文件和目录的默认工厂。
class CustomFile(File):
pass
class CustomDirectory(Directory):
default_file_factory = CustomFile
CustomDirectory.default_directory_factory = CustomDirectory
dir_path = '.'
d = CustomDirectory(name=dir_path)
>>> d.printtree()
<class '...CustomDirectory'>: .
<class '...CustomFile'>: file.txt
<class '...CustomDirectory'>: sub
定义通配符工厂。可以为目录和文件定义工厂。模式匹配使用 fnmatch 进行。请参阅 node.behaviors.WildcardFactory。
class TextFile(File):
pass
class LogsDirectory(Directory):
pass
d = Directory(
name='.',
factories={
'*.txt': TextFile,
'logs': LogsDirectory
})
现在在读取子项时,如果文件或目录名称与模式匹配,则使用工厂实例化子项,如果没有匹配到模式,则使用默认工厂。
>>> os.mkdir('logs')
>>> os.mkdir('other')
>>> with open('file.txt', 'w') as f:
... f.write('text')
>>> with open('file.rst', 'w') as f:
... f.write('rst')
>>> d = Directory(
... name='.',
... factories={
... '*.txt': TextFile,
... 'logs': LogsDirectory
... })
>>> d.printtree()
<class 'node.ext.fs.directory.Directory'>: .
<class '...File'>: file.rst
<class '...TextFile'>: file.txt
<class '...LogsDirectory'>: logs
<class '...Directory'>: other
Python版本
Python 2.7, 3.7+
可能与其他版本兼容(未测试)
贡献者
Robert Niederreiter(作者)
变更
1.1 (2022-12-21)
引入 node.ext.fs.interfaces.IDirectory.rename 并在 node.ext.fs.directory.DirectoryStorage 中实现。[rnix]
不允许设置和删除在 ignores 中定义的目录子项。[rnix]
1.0 (2022-10-06)
为 node.ext.fs.directory._directory_context 对象创建子类 threading.local,以确保安全地提供默认值。[rnix]
引入 IFileIO 接口和 FileIO 的管道行为。[rnix]
引入 IFileNode 接口。[rnix]
将 name 和 parent 传递给默认文件和目录工厂。[rnix]
DirectoryStorage 接受 fs_path 关键字参数。[rnix]
将 _FSModeMixin 的管道行为重命名为 FSMode。现在,通过管道 __call__ 函数设置实际的文件模式。[rnix]
引入 FSLocation 的管道行为。[rnix]
重大更改
包名称已从 node.ext.directory 更改为 node.ext.fs。由于更改太多,无法实现合理的弃用路径。[rnix]
DirectoryStorage.__init__ 不再接受已弃用的 backup 关键字参数。[rnix]
DirectoryStorage.child_directory_factory 已重命名为 default_directory_factory [rnix]
DirectoryStorage 现在继承自 node.behaviors.WildcardFactory。与文件扩展名一起工作的自己的工厂模式逻辑已被移除。必须采用模式。[rnix]
移除全局 file_factories 和 DirectoryStorage.file_factories。现在通过 DirectoryStorage.factories 定义与通配符模式相关的工厂。[rnix]
移除 IFileAddedEvent 和 node.ext.fs.events 模块。如果您需要生命周期事件,请使用 node.behaviors.Lifecycle。[rnix]
基本的 File 和 Directory 对象不再使用与引用相关的管道行为。您需要定义自己的基对象,实现 INodeReference 实现的行为。[rnix]
减少 IFile 接口。它不再从 ILeaf 继承,并且与默认文件实现相关的属性已移动到 IFileNode 接口。这样,可以实施非常定制的文件实现,而不会破坏接口合约。[rnix]
将 FileStorage 重命名为 FileNode。它不再从 DictStorage 继承。除非它更改,否则不再保留内存中的文件数据,然后它将保留直到写入磁盘。[rnix]
FileNode 和 DirectoryStorage 分别不再从 _FSModeMixin 或 FSMode 行为继承。必须在应提供此行为的节点上显式应用 FSMode 行为。[rnix]
将 _fs_path 辅助函数重命名为 get_fs_path。[rnix]
将 _fs_mode 辅助函数重命名为 get_fs_mode。[rnix]
0.8 (2022-03-21)
用 MappingNode 替换已弃用的 Nodify 使用。[rnix]
用 MappingAdopt 替换已弃用的 Adopt 使用。[rnix]
0.7
Python 3 支持。[rnix, 2017-06-06]
如果文件或目录存在且未显式设置 fs_mode,则从文件系统中读取 fs_mode。[rnix, 2017-06-06]
从 IDirectory 接口移除 backup 选项。它从未真正正常工作,并且从概念上讲,IDirectory 不是处理文件备份的正确位置。[rnix, 2017-06-04]
0.6
引入 node.ext.directory.interfaces.IFile.direct_sync 设置。[rnix, 2017-01-30]
完成对 node.ext.directory.interfaces.IFile 和 node.ext.directory.interfaces.IDirectory 的实现,以反映已实现的功能。[rnix, 2017-01-30]
将 node.ext.directory.directory.MODE_TEXT 和 node.ext.directory.directory.MODE_BINARY 移至 node.ext.directory.interfaces。[rnix, 2017-01-30]
0.5.4
在 node.ext.directory.FileStorage.__call__ 中通过名称检查要持久化的目录是否已作为文件存在。[rnix, 2015-10-05]
在 node.ext.directory.FileStorage.__call__ 中,如果 fs_path 不存在,则回退到 path。[rnix, 2015-10-05]
在 node.ext.directory.FileStorage._get_data 中,如果 fs_path 不存在,则回退到 path。[rnix, 2015-10-05]
在 node.ext.directory.FileStorage._get_mode 中,使用 self.mode 属性设置器来设置初始模式,而不是内部 self._mode。[rnix, 2015-10-05]
0.5.3
在 __call__ 之后从内部引用中删除已删除的键,以便在再次添加具有相同键的文件或目录时返回正确的结果。[rnix, 2015-07-20]
0.5.2
使用 try/except 而不是迭代来检查目录子项是否已在内存中。[rnix, 2015-05-12]
0.5.1
始终使用 os.chmod 来设置目录权限,而不仅是在已存在的情况下。[rnix, 2015-03-03]
0.5
在目录和文件中引入 fs_mode。[rnix, 2015-03-03]
0.4
如果无数据,在 File.lines 中返回空列表。[rnix, 2015-02-18]
考虑文件系统的编码。默认为 UTF-8。[rnix, 2015-02-18]
修改时进行树锁定。[rnix, 2014-09-02]
防止在 __setitem__ 中出现空键。[rnix, 2014-09-02]
使用 plumbing 装饰器。[rnix, 2014-08-25]
0.3
在目录上引入 default_file_factory 以控制默认文件子项的创建。[rnix, 2013-12-09]
将 FileStorage 中的文件逻辑移动到行为中。[rnix, 2013-08-06]
将 file_factories 作为目录存储的类属性。[rnix, 2013-08-06]
将 ignores 作为目录存储的类属性。[rnix, 2013-08-06]
清理接口。[rnix, 2013-08-06]
0.2
几乎完全重写。现在符合基于节点的 API 的范式。[rnix, 2012-01-30]
0.1
初始版本
许可证
版权所有(c)2010-2021,BlueDynamics Alliance,奥地利 版权所有(c)2021-2022,Node 贡献者 保留所有权利。
在满足以下条件的情况下,允许重新分发和使用源代码和二进制形式,无论是否修改:
源代码重新分发必须保留上述版权声明、本条件列表和以下免责声明。
二进制形式的重新分发必须在文档和/或其他随分发提供的材料中重新生产上述版权声明、本条件列表和以下免责声明。
本软件由版权所有者和贡献者提供“按原样”且不提供任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论何种原因导致此类损害,无论是在合同、严格责任还是侵权(包括疏忽或其他)中,即使被告知本软件使用可能导致此类损害的可能性。
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
node.ext.fs-1.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 997a358ddf0c791d85236f5f34cfd52aa8f9af869959564fdfa6bdccda54c14f |
|
MD5 | 19e513081ccfc83488b148cb77ab99fd |
|
BLAKE2b-256 | ce9a7ce93e153fb1fa9a3e925f0fe16502e43739b74b799d04065d205d6aaa52 |
node.ext.fs-1.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e59f12d8506296ee0461a6027c1591bac741071d3daf9e98a6e8ee3d22433f89 |
|
MD5 | 20aa6a431c68a8c1d6b72f520106ac0e |
|
BLAKE2b-256 | b2176259df2e250720a78ba6b837e0546ce6774fcdc4b63ca7e2e8964cc8ad90 |