Package: node.ext.directory
node.ext.directoryOverviewnode.ext.directoryis a node implementation for file system directories.For more information aboutnodeseehttps://pypi.python.org/pypi/node.UsageCreate new file:fromnode.ext.directoryimportFilefile_path='file.txt'f=File(name=file_path)# set contents via data attributef.data='data\n'# set contents via lines attributef.lines=['data']# set permissionsf.fs_mode=0o644# persistf()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:fromnode.ext.directoryimportMODE_BINARYfile_path='file.txt'f=File(name=file_path)f.mode=MODE_BINARYf.data=b'\x00\x00'assert(f.data==b'\x00\x00')# lines property won't work if file in binary modef.lines# raises RuntimeErrorCreate directory:fromnode.ext.directoryimportDirectorydir_path='.'d=Directory(name=dir_path)# add subdirectories and filesd['sub']=Directory()d['file.txt']=File()# set permissions for directoryd['sub'].fs_mode=0o755# persistd()Read existing directory:dir_path='.'d=Directory(name=dir_path)>>>d.printtree()<class 'node.ext.directory.directory.Directory'>: .
  <class 'node.ext.directory.directory.File'>: file.txt
  <class 'node.ext.directory.directory.Directory'>: subDefine file factories:fromnode.extimportdirectoryclassPyFile(File):pass# set global factoriesdirectory.file_factories['.py']=PyFile# set local factoriesd=Directory(name='.',factories={'.py':PyFile})when reading .py files, PyFile is used to instanciate children:>>>withopen('foo.py','w')asf:...f.write('#')>>>d=Directory(name='.',factories={'.py':PyFile})>>>d.printtree()<class 'node.ext.directory.directory.Directory'>: .
  <class '...PyFile'>: foo.pyPython VersionsPython 2.7, 3.7+May work with other versions (untested)ContributorsRobert Niederreiter (Author)Changes0.8 (2022-03-21)Replace deprecated use ofNodifybyMappingNode.
[rnix]Replace deprecated use ofAdoptbyMappingAdopt.
[rnix]0.7Python 3 support.
[rnix, 2017-06-06]fs_modeis read from filesystem if file or directory exists and
fs_mode not set explicitely.
[rnix, 2017-06-06]Removebackupoption fromIDirectoryinterface. It never really
worked properly and conceptuallyIDirectoryis the wrong place for
handling backups of files.
[rnix, 2017-06-04]0.6Introducenode.ext.directory.interfaces.IFile.direct_syncsetting.
[rnix, 2017-01-30]Completenode.ext.directory.interfaces.IFileandnode.ext.directory.interfaces.IDirectoryto reflect implemented features.
[rnix, 2017-01-30]Movenode.ext.directory.directory.MODE_TEXTandnode.ext.directory.directory.MODE_BINARYtonode.ext.directory.interfaces.
[rnix, 2017-01-30]0.5.4Check whether directory to be peristed already exists by name as file innode.ext.directory.FileStorage.__call__.
[rnix, 2015-10-05]Implement fallback topathinnode.ext.directory.FileStorage.__call__iffs_pathnot exists.
[rnix, 2015-10-05]Implement fallback topathinnode.ext.directory.FileStorage._get_dataiffs_pathnot exists.
[rnix, 2015-10-05]Set initial mode withself.modeproperty setter instead of internalself._modeinnode.ext.directory.FileStorage._get_mode.
[rnix, 2015-10-05]0.5.3Remove deleted keys from internal reference after__call__in order
to return the correct result when adding a file or directory with the same
key again.
[rnix, 2015-07-20]0.5.2Use try/except instead of iteration to check whether directory child already
in memory.
[rnix, 2015-05-12]0.5.1Always useos.chmodfor setting directory permissions, not only if
already exists.
[rnix, 2015-03-03]0.5Introducefs_modeon directories and files.
[rnix, 2015-03-03]0.4Return empty list inFile.linesif no data.
[rnix, 2015-02-18]Consider filesystem encoding. Defaults to UTF-8.
[rnix, 2015-02-18]Tree locking on modification.
[rnix, 2014-09-02]Prevent empty keys in__setitem__.
[rnix, 2014-09-02]Useplumbingdecorator.
[rnix, 2014-08-25]0.3introducedefault_file_factoryon directories for controlling default
file child creation.
[rnix, 2013-12-09]move file logic inFileStoragebehavior.
[rnix, 2013-08-06]makefile_factoriesa class property on directory storage.
[rnix, 2013-08-06]makeignoresa class property on directory storage.
[rnix, 2013-08-06]Cleanup interfaces.
[rnix, 2013-08-06]0.2Almost complete rewrite. Fits now paradigms of node based API’s.
[rnix, 2012-01-30]0.1initialLicenseCopyright (c) 2010-2021, BlueDynamics Alliance, Austria
Copyright (c) 2021-2022, Node Contributors
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.