Search code examples
pythonconfigurationintrospectionpython-attrs

Use Python for Creating JSON


I want to use Python for creating JSON.

Since I found no library which can help me, I want to know if it's possible to inspect the order of the classes in a Python file?

Example

# example.py
class Foo:
    pass

class Bar:
    pass

If I import example, I want to know the order of the classes. In this case it is [Foo, Bar] and not [Bar, Foo].

Is this possible? If "yes", how?

Background

I am not happy with yaml/json. I have the vague idea to create config via Python classes (only classes, not instantiation to objects).

Answers which help me to get to my goal (Create JSON with a tool which is easy and fun to use) are welcome.


Solution

  • The inspect module can tell the line numbers of the class declarations:

    import inspect
    
    def get_classes(module):
        for name, value in inspect.getmembers(module):
            if inspect.isclass(value):
                _, line = inspect.getsourcelines(value)
                yield line, name
    

    So the following code:

    import example
    
    for line, name in sorted(get_classes(example)):
        print line, name
    

    Prints:

    2 Foo
    5 Bar