agnostic-file-store

An agnostic, easy-to-use module for different file systems (Memory | local | Samba (SMB) | NFS | Amazon S3)


Keywords
agnostic, AMS, CIFS, NAS, S3, Samba, SAN, SMB, storage
Licenses
GPL-3.0/GPL-3.0+
Install
pip install agnostic-file-store==0.5.4

Documentation

AFS - Agnostic File Storage

Goals and motivations

The purpose of this module is to offer an agnostic, easy-to-use module for different file systems (At present time, just local and SMB/CIFS). The initial use of this module was provide an easy path to translate local file systems operations to a network samba server.

Example of use

So, you can translate code like this:

if os.path.isdir('/tmp/token.txt'):
    if not os.path.isdir('/tmp/results'):
        os.mkdir('/tmp/results')
    with open('/tmp/results/data.txt', 'wb') as f:
        f.write('This is an example\n')

To something like this (which must work identical):

with afs.connect('temp') as fs:
    if not fs.isdir('results'):
        fs.mkdir('results')
    fs.cd('results')
    fs.save('data.txt', 'This is an example\n')

Usually you need to iterate a list of directories checking for the existence of the dir, create if needed, and then changing to the dir, for every directory::

dirs = ['media', 'public', '2016', 'sep', '14']
with afs.connect('static') as fs:
    for dir in dirs:
        if not fs.is_dir(dir):
            fs.mkdir(dir)
        fs.cd(dir)
    # You can save the file now

Using the set_path method make all this steps with one single call::

with afs.connect('static') as fs:
    fs.set_path('media', 'public', '2016', 'sep', '14')
    # You can save the file now

The entry temp is defined in a configuration file, using a format similar to windows .INI files, like this:

[temp]
kind: local
base: /tmp

We can now switch to another directory by just replacing the temp base entry to the desired base path, for example. More interesting, you can change to a network SMB Server, modifying the configuration file to:

[temp]
kind: smb
username: samba_user
password: samba_password
host: nas
domain: mycompany.com
service: test$

Things to do

  • Add more storage file systems: NFS, Amazon S3, SFTP

  • Improve security, nobody likes password stored as plain text in configuration files.

  • More tests