Skip to main content

🍇 XDG standard config files 🍇

Project description

Simple, correct handling of config, data and cache files

Like everyone else, I wrote a lot of programs which saved config files as dotfiles in the user’s home directory like ~/.my-program-name and now everyone’s home directory has dozens of these.

Then I read this article.

Great was my embarrasment to discover that there was a neat little specification for data, config and cache directories in Linux that prevents this problem, and that I was not using it:

So I implemented a small and simple Python API as a single file, cfgs.py.

It works on all versions of Python from 2.7 to 3.7, has complete test coverage, and all the functionality is reachable from a single class, cfgs.App

How it works in one sentence

Create a cfgs.App for your application, project, or script which handles finding, reading and writing your data and config files, and managing your cache directories.

How to install

You can either use pip:

pip install cfgs

Or if you don’t like dependencies (and who does?), you can drop the source file cgfs.py right into your project.

Usage examples

import cfgs
app = cfgs.App('my-project')
print(app.xdg.XDG_CACHE_HOME)
#   /home/tom/.cache/my-project

app.xdg.XDG_CONFIG_DIRS
#   /etc/xdg

with app.config.open() as f:
    f.update(name='oliver', species='dog')
    f['description'] = {'size': 'S', 'fur': 'brown'}
    print(f.filename)
#    /home/tom/.cache/my-project/my-project.json

# Later:
with app.config.open() as f:
    print(f['name'])
#    oliver

    print(f.as_dict())
#     {'name': 'oliver', 'species': 'dog',
#      'description': {'size': 'S', 'fur': 'brown'}

Cache

import cfgs
cache_size = 0x10000000
app = cfgs.App('my-project')
directory = app.cache.directory(cache_size=cache_size)
# TODO: rewrite cache or add features.

Using cfgs In legacy code

If you already have code to handle your config, data and cache files, then you can just use cgfs to get the XDG variables

from cfgs import XDG

xdg = XDG()
config_dir = xdg.XDG_CONFIG_HOME

# Your code here - eg:
my_config_file = os.path.join(config_dir, 'my-file.json')
with open(my_config_file) as f:
    legacy_write_my_file(f)

cfgs automatically handles data and config files, and independently, cache directories.

API Documentation

API documentation is here.


pic1

pic2

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

cfgs-0.13.0.tar.gz (7.5 kB view details)

Uploaded Source

Built Distribution

cfgs-0.13.0-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file cfgs-0.13.0.tar.gz.

File metadata

  • Download URL: cfgs-0.13.0.tar.gz
  • Upload date:
  • Size: 7.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.0 CPython/3.10.11 Darwin/21.6.0

File hashes

Hashes for cfgs-0.13.0.tar.gz
Algorithm Hash digest
SHA256 cef47e67f0512783ee83e24cc2f39e5b23b5d4ca0c32bbd721bd64f48636667e
MD5 771312d359ada9f67cbe6940112ea003
BLAKE2b-256 0f95b7d0e411b1b64cfe18016616b5e9baf733071182c6d8ff6a7d4ed1138751

See more details on using hashes here.

File details

Details for the file cfgs-0.13.0-py3-none-any.whl.

File metadata

  • Download URL: cfgs-0.13.0-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.0 CPython/3.10.11 Darwin/21.6.0

File hashes

Hashes for cfgs-0.13.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a3e80a31e32c2fae987cb3c38481bbbf4b276bc517e8862f87e9ff174620fa09
MD5 36591db72562b609d26336e944061b0d
BLAKE2b-256 0fbb870a4df371ec417f05cb13304b14687eba0730de11921f8bf4b30a9f0a46

See more details on using hashes here.

Supported by

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