{"id":13936914,"url":"https://github.com/andras-tim/octoconf","last_synced_at":"2025-07-19T22:33:07.228Z","repository":{"id":56089697,"uuid":"54552316","full_name":"andras-tim/octoconf","owner":"andras-tim","description":"Multi-profile supported, flexible config library","archived":false,"fork":false,"pushed_at":"2020-11-26T01:44:50.000Z","size":338,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-09-07T20:14:31.069Z","etag":null,"topics":["config","python","yaml"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andras-tim.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-03-23T10:49:19.000Z","updated_at":"2024-01-17T18:09:16.000Z","dependencies_parsed_at":"2022-08-15T13:00:27.351Z","dependency_job_id":null,"html_url":"https://github.com/andras-tim/octoconf","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andras-tim%2Foctoconf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andras-tim%2Foctoconf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andras-tim%2Foctoconf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andras-tim%2Foctoconf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andras-tim","download_url":"https://codeload.github.com/andras-tim/octoconf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226693903,"owners_count":17667757,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["config","python","yaml"],"created_at":"2024-08-07T23:03:06.764Z","updated_at":"2024-11-27T05:30:40.431Z","avatar_url":"https://github.com/andras-tim.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"|Logo|\n\noctoconf\n========\n\n|PyPi| |Build| |DependencyStatus2| |CodeQuality| |Coverage| |License|\n\nMulti-profile supported, flexible config library for Python 2 \u0026 3.\n\n\nFeatures\n--------\n\n* Allow multiple config profiles in one YAML file\n* Allow include multiple YAML files\n* Overridable profile selection from code for special use-cases (e.g. config for testing)\n* Inheritable config profiles, what makes profile merges by dictionaries. (the native YAML bookmarking is also available)\n* Can use variables in the config file\n\n\nInstallation\n------------\n\n``pip install octoconf``\n\n\nConfig format\n-------------\n\nAn **octoconf** config file is pure YAML file with some reserved keywords:\n\n* ``USED_CONFIG\u003e: \u003cnode_name\u003e`` in the file root\n    you can specify the name of default config profile\n\n* ``\u003cINCLUDE: \u003cyml_path(s)\u003e`` in the file root\n    this octoconf file(s) will be included\n\n* ``\u003cBASE: \u003cnode_name\u003e`` in the 2nd level\n    this will used for making (merge based) inheritance between profiles\n\n*The profile nodes should be on 1st level!*\n\n\nUsage\n-----\n\n* You can load config from string with ``loads()``:\n    .. code-block:: python\n\n        import octoconf\n\n        config = octoconf.loads(yaml_string)\n        print(config)\n\n* Or directly from StringIO (e.g. from file) with ``load()``:\n    .. code-block:: python\n\n        import octoconf\n\n        with open('config.yml') as fd:\n            config = octoconf.load(fd)\n        print(config)\n\n\nPlease check the `features docs \u003cdocs/features.rst\u003e`__ for explain **octoconf**'s features.\n\n\nExamples YAML files\n~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: yaml\n\n    USED_CONFIG\u003e: UserConfig\n    \u003cINCLUDE: vendor.defaults.yml\n\n\n    # This config overrides the production preset (from vendor.defaults.yml file)\n    UserConfig:\n      \u003cBASE: ProductionConfig\n\n      App:\n        TITLE: \"Amazing Foobar\"\n\n      Flask:\n        SQLALCHEMY_DATABASE_URI: \"sqlite:///${SERVER}/app.sqlite\"\n\n\nFor more examples, please check the `examples \u003chttps://github.com/andras-tim/octoconf/tree/master/examples\u003e`__ directory.\n\n\nBugs\n----\n\nBugs or suggestions? Visit the `issue tracker \u003chttps://github.com/andras-tim/octoconf/issues\u003e`__.\n\n\n.. |Logo| image:: https://raw.githubusercontent.com/andras-tim/octoconf/master/img/logo_100.png\n    :target: https://raw.githubusercontent.com/andras-tim/octoconf/master/img/logo.png\n\n.. |Build| image:: https://travis-ci.org/andras-tim/octoconf.svg?branch=master\n    :target: https://travis-ci.org/andras-tim/octoconf/branches\n    :alt: Build Status\n.. |DependencyStatus1| image:: https://gemnasium.com/andras-tim/octoconf.svg\n    :target: https://gemnasium.com/andras-tim/octoconf\n    :alt: Dependency Status\n.. |DependencyStatus2| image:: https://requires.io/github/andras-tim/octoconf/requirements.svg?branch=master\n    :target: https://requires.io/github/andras-tim/octoconf/requirements/?branch=master\n    :alt: Server Dependency Status\n.. |PyPi| image:: https://img.shields.io/pypi/dm/octoconf.svg\n    :target: https://pypi.python.org/pypi/octoconf\n    :alt: Python Package\n.. |License| image:: https://img.shields.io/badge/license-GPL%203.0-blue.svg\n    :target: https://github.com/andras-tim/octoconf/blob/master/LICENSE\n    :alt: License\n\n.. |CodeQuality| image:: https://api.codacy.com/project/badge/grade/2f707d3bf0f84a43a1dca6b8789eaba2\n    :target: https://www.codacy.com/app/andras-tim/octoconf\n    :alt: Code Quality\n.. |CodeClimate| image:: https://codeclimate.com/github/andras-tim/octoconf/badges/gpa.svg\n    :target: https://codeclimate.com/github/andras-tim/octoconf/coverage\n    :alt: Code Climate\n.. |Coverage| image:: https://coveralls.io/repos/andras-tim/octoconf/badge.svg?branch=master\u0026service=github\n    :target: https://coveralls.io/r/andras-tim/octoconf?branch=master\u0026service=github\n    :alt: Server Test Coverage\n.. |IssueStats| image:: https://img.shields.io/github/issues/andras-tim/octoconf.svg\n    :target: http://issuestats.com/github/andras-tim/octoconf\n    :alt: Issue Stats\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandras-tim%2Foctoconf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandras-tim%2Foctoconf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandras-tim%2Foctoconf/lists"}