Giter Club home page Giter Club logo

ezcf's Introduction

ezcf

Build Status Supported Python versions PyPI version Coverage Status

ezcf stands for easy configuration, it allows you to import JSON/YAML/INI/XML like .py files. It is useful whenever you need to read from these formats, especially for reading configuration files.

OK, stop talking, show us some code!

On the left is what you'll normally do, on the right is the ezcf way.
All you need is import ezcf first, then import filename without extension. Nothing else!

For instance, here we want to load file config.json. With a single line of code from config import *, everything is done and you're happy.

Install

pip install ezcf

If you run into error: yaml.h: No such file or directory, don't worry, you can still use ezcf without any problem.

Supported File Types

ezcf supports JSON, YAML, INI and XML with extension json, yaml, yml, ini, xml.

Sample Usage

Let's start with an easy case:

├── sample1.py
└── sample1.json  

sample1.py and sample1.json are in the same directory. We want to read sample1.json in sample1.py, here's how:

"""
# sample1.json
{
    "hello": "world"
}
"""

# sample1.py
import ezcf
from sample1 import hello

print(hello)  # 'world'

It's that easy.


That's cool, but we usually put config files in a separate folder. Can ezcf deal with that?
├── conf
│   ├── __init__.py
│   └── sample2.yaml
└── sample2.py

Why not?

"""sample2.yaml
---
Time: 2001-11-23 15:02:31 -5
User: ed
warning:
  This is a warning.
---
Stack:
  - file: TopClass.py
    line: 23
    code: |
      x = MoreObject("345\n")
  - file: MoreClass.py
    line: 58
    code: |-
      foo = bar
"""

# sample2.py
import ezcf
from conf.sample2 import Time, User, warning, Stack

Time  # datetime.datetime(2001, 11, 23, 20, 2, 31)
User  # ed
warning  # This is a warning.
Stack  # [{'line': 23, 'code': 'x = MoreObject("345\\n")\n', 'file': 'TopClass.py'}, {'line': 58, 'code': 'foo = bar', 'file': 'MoreClass.py'}]

ezcf supports all kinds of valid import statements. These statements are equivalent:

from conf.sample2 import Time, User, warning, Stack
from conf.sample2 import *
import conf.sample2  # then use conf.sample2.Time/User/warning/Stack
import conf.sample2 as cs  # then use cs.Time/User/warning/Stack

In a word, you can assume they're just regular python files.(Currently ezcf only supports files with utf-8 encoding)

What about relative import? Yes, ezcf supports relative import, as long as you use it correctly.

Note

  1. Be careful importing YAML which contains multiple documents: if there exists keys with the same name, only one of them will be loaded. So it's better not to use multiple documents;
  2. All values in .ini files are kept as it is and loaded as a string;
  3. Since XML only allows single root, the whole xml will be loaded as one dict with root's name as variable name;
  4. Use valid variable names, this means key strings in JSON/YAML/INI/XML should be valid Python variable name. Invalid variable name won't do any harm to your program nor will it crash, but you can't use them as expected.

Run Tests

python setup.py test

Roadmap

  • Use dot to seperate folder/subfolder/file
  • Unicode support
  • JSON support
  • YAML support
  • INI support
  • XML support
  • Auto encoding detect?
  • CI
  • coverage
  • pypi

License

MIT

ezcf's People

Contributors

dependabot[bot] avatar laike9m avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.