Skip to content

conestack/node.ext.fs

Repository files navigation

node.ext.fs

Latest PyPI version

Number of PyPI downloads

Test node.ext.fs

Overview

node.ext.fs is a node implementation for file system directories. It is the successor of node.ext.directory.

For more information about node see https://pypi.python.org/pypi/node.

Usage

Create new file:

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()

Read existing file:

file_path = 'file.txt'
f = File(name=file_path)

assert(f.data == 'data\n')
assert(f.lines == ['data'])
assert(f.fs_mode == 0o644)

Files with binary data:

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

Create directory:

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()

Read existing directory:

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

Defining the default factories for files and directories is done by setting default_file_factory respective 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

Define wildcard factories. Factories can be defined for directories and files. Pattern matching is done using fnmatch. See node.behaviors.WildcardFactory:

class TextFile(File):
    pass

class LogsDirectory(Directory):
    pass

d = Directory(
    name='.',
    factories={
        '*.txt': TextFile,
        'logs': LogsDirectory
    })

Now when reading children, factories matching the file or directory name patterns are used to instantiate the children, using the default factories if no pattern matches.

>>> 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 Versions

  • Python 2.7, 3.7+
  • May work with other versions (untested)

Contributors

  • Robert Niederreiter (Author)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •