跳转到主要内容

基于nodes的文件系统抽象

项目描述

node.ext.fs

Latest PyPI version Number of PyPI downloads Test 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]

  • nameparent 传递给默认文件和目录工厂。[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_factoriesDirectoryStorage.file_factories。现在通过 DirectoryStorage.factories 定义与通配符模式相关的工厂。[rnix]

  • 移除 IFileAddedEventnode.ext.fs.events 模块。如果您需要生命周期事件,请使用 node.behaviors.Lifecycle。[rnix]

  • 基本的 FileDirectory 对象不再使用与引用相关的管道行为。您需要定义自己的基对象,实现 INodeReference 实现的行为。[rnix]

  • 减少 IFile 接口。它不再从 ILeaf 继承,并且与默认文件实现相关的属性已移动到 IFileNode 接口。这样,可以实施非常定制的文件实现,而不会破坏接口合约。[rnix]

  • FileStorage 重命名为 FileNode。它不再从 DictStorage 继承。除非它更改,否则不再保留内存中的文件数据,然后它将保留直到写入磁盘。[rnix]

  • FileNodeDirectoryStorage 分别不再从 _FSModeMixinFSMode 行为继承。必须在应提供此行为的节点上显式应用 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.IFilenode.ext.directory.interfaces.IDirectory 的实现,以反映已实现的功能。[rnix, 2017-01-30]

  • node.ext.directory.directory.MODE_TEXTnode.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 (18.4 kB 查看哈希值)

上传时间

构建分发

node.ext.fs-1.1-py3-none-any.whl (16.4 kB 查看哈希值)

上传时间 Python 3

支持者