Skip to main content

Install and access data files (conf, json, sqlite3, ...) in an easy way.

Project description

datafolder is a small python library that makes it very easy to install the data files of your package and access them later.

If you want to install some data files (conf, sqlite, csv, …) to a place like the user’s home directory and find it difficult with setuptools then here is some help.

WARNING: this is pre-alpha software!!!

First, lets make life easier and use some ‘configuration by convention’.

I assume that (1) you have layout your project like:

MANIFEST.in
README.rst
setup.py
mypkg
    |_ __init__.py
    |_ mypkg.conf
    |_ mypkg.db
    |_ ...

And that (2) you want to put a folder, in the home directory of the user (in Windows will be in %APPDATA%), with your data files (conf, csv, …) inside. This folder will have the name of your package (preceded with a ‘.’ in UNIX systems), let us say ‘.mypkg’ and, of course, with the right permissions (it will work with sudo pip install mypkg). For virtual environements these files will be put at the root of the environement.

How to do it?

Use the following template for your setup.py (just enter at a terminal datafolder_mktpl if you already installed datafolder):

import sys
import pkg_resources
from setuptools import setup
from datafolder import Installer


# write the name of the package (in this case 'mypkg'!)
MYPKG = 'mypkg'                                             #<-- ADAPT THIS

# mypkg supports these python versions?
SUPPORT = ((2, 6), (2, 7), (3, 1), (3, 2), (3, 3), (3, 4))  #<-- ADAPT THIS

# list of data files in mypkg (just the names)
MYDATAFILES = ['mypkg.conf', 'mypkg.db']                    #<-- ADAPT THIS


# (many people get confused with the next step...)


# tell setup were these files are in your package
# (I assume that are together with the first __init__.py)
MYRESOURCES = []
for datafile in MYDAFILES:
    MYRESOURCES.append(pkg_resources.resource_filename(MYPKG, datafile))


# now, create the installer
installer = Installer(sys.argv)

# use the installer to check supported python versions
installer.support(SUPPORT)

# create the data folder and tell setup to put the data files there
DATAPATH = installer.data_path(MYPKG)
data_files = [(DATAPATH, MYRESOURCES)]

# setup can now do his thing...
setup(
    name=MYPKG,
    data_files=data_files,
    install_requires=["datafolder>=0.0.4"],                 # <-- IMPORTANT
    ...                                                     # <-- ADAPT THIS
)

# but we are NOT READY, in some cases the data files
# don't have the appropriate permissions,
# let us fix that...
installer.pos_setup(MYDATAFILES)

And that is all!

“But, I have a reverse problem, how I access these files in my code?” I heard you say.

Very easy, in your code:

from datafolder import DataFolder

data = DataFolder('mypkg')

# now you can get the full path of each data file, e.g.
conffile = data.files['mypkg.conf']

# do your thing... (read, write, ...)

For your convinience, the DataFolder class discovers the location of the data folder for you and provides attributes and methods that make it easy to handle the files presente in the data folder.

Feedback, please!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

datafolder-0.0.4.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

datafolder-0.0.4-py2.py3-none-any.whl (7.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file datafolder-0.0.4.tar.gz.

File metadata

  • Download URL: datafolder-0.0.4.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for datafolder-0.0.4.tar.gz
Algorithm Hash digest
SHA256 22366ed12892b690204d5026719c07755fc8a2edd2ac44a2dc059e6af47eb8ab
MD5 c13266a5b777a577192a86e614510424
BLAKE2b-256 f66b13f9c29bc5d8d9b662ee11fe2555e2d9094e8e91ab910c36a43f2ec90efb

See more details on using hashes here.

File details

Details for the file datafolder-0.0.4-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for datafolder-0.0.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 b57260bbd4d11cf71039f7c4221ed8a66aee49ff0b722b275884e535b46ea1a9
MD5 8fdc58de17cbd7cb3be92448e0504f32
BLAKE2b-256 1fcae9c1a3cfa5cb3f62d4c18018a9e5f64d20e6a494357bd7823a263bb62551

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page