{
"info": {
"author": "Hendri Karisma",
"author_email": "situkangsayur@gmail.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 1 - Planning",
"Environment :: Plugins",
"Framework :: Flask",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "=============\npython-outfit\n=============\n\n:Info: utilities for distributed environment\n:Repository: https://github.com/situkangsayur/python-outfit\n:Author: Hendri Karisma (http://github.com/situkangsayur)\n:Maintainer: Hendri Karisma (http://github.com/situkangsayur)\n\n.. image:: https://travis-ci.org/situkangsayur/python-outfit.svg?branch=master\n :target: https://travis-ci.org/situkangsayur/python-outfit\n\n.. image:: https://coveralls.io/repos/github/situkangsayur/python-outfit/badge.svg?branch=master\n :target: https://coveralls.io/github/situkangsayur/python-outfit?branch=master\n\nPython Outfit is set of dependencies across a range of python standard package for software development. \n\nFeatures for 0.0.1 version:\n\n1. Load config using yaml.\n2. Integrated to Consul.\n#. Load config file from a path in KV Consul.\n#. Integrated to Vault.\n#. Load Secret KV from Vault.\n#. add some db status to py-healtchecker.\n#. simple Logger.\n#. Load Logger configurations from consul, yaml, json, and dictionary logging var in python file.\n\nHow to install **Outfit**\n=========================\nYou can use pip for installing python-outfit.\n\n::\n\n pip install python-outfit\n\npypi link : `link to outfit `_\n\nQuick Start\n===========\n\nJust add outfit packe then import the Class that you need. First to load configuration import Outfit class. Then call *Oufit.setup('config_path')* call setup static method and pass the path of the configuration file to *Oufit.setup()*\n\n.. code:: python\n\n from outfit import Outfit\n\n if __name__ == '__main__':\n Outfit.setup('conf/configuration.yaml')\n\nThen you can import **ConsulCon** for Consul Connection or **VaulCon** for Vault Connection, or you can use **Logger** to do some logging text for debug, info, error, or critical mode.\n\n.. code:: python\n\n from outfit import Outfit\n from outfit import ConsulCon, VaultCon\n from outfit import Logger\n\n if __name__ == '__main__':\n Outfit.setup('conf/configuration.yaml')\n con_consul = ConsulCon()\n\n Logger.debug('get the information such as config file from consul kv then will be returned as python dictionary')\n config_dict = con_consul.get_kv()\n\n con_vault = VaultCon()\n\n Logger.info('get the secret information in vault secret kv then will be returned as python dictionary')\n secret_dict = con_vault.get_secret_kv()\n\n\nThe consul and vault connection will get the configs information from yaml file, including the Logger config source.\n\nThis is the example of the .yaml file for **outfit** configurations:\n\n.. code:: yaml\n\n vault:\n host: localhost\n port: 9500\n scheme: http\n token: token123jhk123\n path: sample/app\n consul:\n host: localhost\n port: 9500\n scheme: http\n token: token123jhk123\n path: sample/app\n logconfig:\n mode: development\n source_type: yaml_file\n source_location: ./tests/assets/logging.yaml\n\nWe can see that the logconfig will provide the log configuration information, it contains mode, source_type, and source_location:\n\n- **mode** of log it depends on the logger profile that you write in log config.\n- **source_type**, it can be **yaml_file**, **json_file**, **consul_kv**, and **dictionary** type from python file.\n- **source_location**, it will provide the location of the files or consul kv directory.\n\n\nSample for log config using *source_type* consul kv:\n\n.. code:: yaml\n\n vault:\n host: localhost\n port: 9500\n scheme: http\n token: token123jhk123\n path: sample/app\n consul:\n host: localhost\n port: 9500\n scheme: http\n token: token123jhk123\n path: sample/app\n logconfig:\n mode: development\n source_type: consulkv \n source_location: assets/logging.yaml\n\n\nAnd for logging yaml file or the structures :\n\n.. code:: yaml\n\n ---\n version: 1\n disable_existing_loggers: False\n formatters:\n simple:\n format: \"%(asctime)s, %(levelname)s:%(filename)s(%(lineno)d)> %(message)s\"\n\n handlers:\n debug_console:\n class: logging.StreamHandler\n level: DEBUG\n formatter: simple\n stream: ext://sys.stdout\n\n production_console:\n class: logging.StreamHandler\n level: INFO\n formatter: simple\n stream: ext://sys.stdout\n\n\n debug_file_handler:\n class: logging.handlers.RotatingFileHandler\n level: DEBUG\n formatter: simple\n filename: tests/logs/debug.log\n maxBytes: 10485760 # 10MB\n backupCount: 20\n encoding: utf8\n\n info_file_handler:\n class: logging.handlers.RotatingFileHandler\n level: INFO\n formatter: simple\n filename: tests/logs/info.log\n maxBytes: 10485760 # 10MB\n backupCount: 20\n encoding: utf8\n\n error_file_handler:\n class: logging.handlers.RotatingFileHandler\n level: ERROR\n formatter: simple\n filename: tests/logs/errors.log\n maxBytes: 10485760 # 10MB\n backupCount: 20\n encoding: utf8\n\n critical_file_handler:\n class: logging.handlers.RotatingFileHandler\n level: CRITICAL\n formatter: simple\n filename: tests/logs/critical.log\n maxBytes: 10485760 # 10MB\n backupCount: 20\n encoding: utf8\n\n loggers:\n development:\n level: DEBUG\n handlers: [debug_console, debug_file_handler, info_file_handler, error_file_handler, critical_file_handler]\n propagate: True\n\n production:\n level: INFO\n handlers: [production_console, info_file_handler, error_file_handler, critical_file_handler]\n propagate: True\n ...\n\nyou can get more detail about log config in yaml from `this link `_\n\n\n",
"description_content_type": "text/x-rst",
"docs_url": null,
"download_url": "https://github.com/situkangsayur/python-outfit",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/situkangsayur/python-outfit",
"keywords": "",
"license": "MIT",
"maintainer": "Hendri Karisma",
"maintainer_email": "situkangsayur@gmail.com",
"name": "python-outfit",
"package_url": "https://pypi.org/project/python-outfit/",
"platform": "any",
"project_url": "https://pypi.org/project/python-outfit/",
"project_urls": {
"Download": "https://github.com/situkangsayur/python-outfit",
"Homepage": "https://github.com/situkangsayur/python-outfit"
},
"release_url": "https://pypi.org/project/python-outfit/0.0.1.post7/",
"requires_dist": [
"python-consul (==1.1.0)",
"hvac (==0.9.5)",
"pyyaml (==5.1.1)",
"coverage ; extra == 'dev'",
"sphinx ; extra == 'dev'",
"pallets-sphinx-themes ; extra == 'dev'",
"sphinxcontrib-log-cabinet ; extra == 'dev'",
"sphinx-issues ; extra == 'dev'",
"sphinx ; extra == 'docs'",
"pallets-sphinx-themes ; extra == 'docs'",
"sphinxcontrib-log-cabinet ; extra == 'docs'",
"sphinx-issues ; extra == 'docs'",
"readme-renderer ; extra == 'docs'"
],
"requires_python": "",
"summary": "",
"version": "0.0.1.post7"
},
"last_serial": 5648261,
"releases": {
"0.0.1.post1": [
{
"comment_text": "",
"digests": {
"md5": "c75c4be64e8c8502c802d85aafeed140",
"sha256": "fd12c8a030241869eabe3a696359be68b61e4f8f4108d3cd575549167de7dc97"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c75c4be64e8c8502c802d85aafeed140",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 8979,
"upload_time": "2019-07-30T12:26:09",
"url": "https://files.pythonhosted.org/packages/be/f1/4aa9e9b5f06973857a1ffbb6aac137213ce5c74a2786c19e2c9175671f9d/python_outfit-0.0.1.post1-py3-none-any.whl"
}
],
"0.0.1.post2": [
{
"comment_text": "",
"digests": {
"md5": "e061a953159f99339c7488c37454311e",
"sha256": "72b8bb7afea3d7bb4fc36643fc90b8ddfe6c408526ee1130f6635e523ed1ff8e"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e061a953159f99339c7488c37454311e",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9477,
"upload_time": "2019-07-31T09:22:09",
"url": "https://files.pythonhosted.org/packages/8d/58/918cab86bdb702c7f09e9a9d591e7272c4537705a0f712f67b3f085948d2/python_outfit-0.0.1.post2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "493f53658d9278f90328887edc2fcb0f",
"sha256": "7f72c72481d94677462796aa6688c2044a159cc1e90c6e3e186186e7c07aa7f3"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post2.tar.gz",
"has_sig": false,
"md5_digest": "493f53658d9278f90328887edc2fcb0f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5657,
"upload_time": "2019-07-31T09:22:12",
"url": "https://files.pythonhosted.org/packages/cc/a9/138491b73dac8e123bcff1fdfcc4680baf399b08c5a1b94e836ad4121491/python-outfit-0.0.1.post2.tar.gz"
}
],
"0.0.1.post3": [
{
"comment_text": "",
"digests": {
"md5": "72dd9179b7aeda7cd1f9bd0698bea8ae",
"sha256": "d8c94b77fcfcadf177f3ab14e49ebd4afcf02c7e0e222a7d4796b06c5b279c2d"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "72dd9179b7aeda7cd1f9bd0698bea8ae",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9507,
"upload_time": "2019-07-31T11:25:56",
"url": "https://files.pythonhosted.org/packages/30/31/789d1b8807d362d33b7a18b053fe0726d3837ed2f20a40c6c8f20ea9c43e/python_outfit-0.0.1.post3-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d00de835f4e574716fbb50a5819c702d",
"sha256": "73540c90175ff9ae1b485c1cf7ce89ea1622d9da41793d083cc7ea1b44a2b095"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post3.tar.gz",
"has_sig": false,
"md5_digest": "d00de835f4e574716fbb50a5819c702d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5687,
"upload_time": "2019-07-31T11:25:58",
"url": "https://files.pythonhosted.org/packages/81/a9/96170fb37c571850ccd4e1f01799bd66525f9bdbbc86068636b205d1ca7e/python-outfit-0.0.1.post3.tar.gz"
}
],
"0.0.1.post4": [
{
"comment_text": "",
"digests": {
"md5": "33c528d9b1e58b1f121d1f1db9f86475",
"sha256": "4522e9855f9e8c2e373fc9d9283869f495cd078dffe60f9772cae0432601de11"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "33c528d9b1e58b1f121d1f1db9f86475",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 9480,
"upload_time": "2019-07-31T11:29:58",
"url": "https://files.pythonhosted.org/packages/89/e4/dca86004558484ea0307e69055b01ae931bee0eedff8b5e9fbc305c43305/python_outfit-0.0.1.post4-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "46ef13d9e679c10710d6adc831be414c",
"sha256": "47b8b27928d3f0951857f8c2b75a7862113d21be15acd749f18b075cdcbd9b64"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post4.tar.gz",
"has_sig": false,
"md5_digest": "46ef13d9e679c10710d6adc831be414c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 5674,
"upload_time": "2019-07-31T11:30:00",
"url": "https://files.pythonhosted.org/packages/86/30/505435c72f702a0d65e206242c36dc0480173ed949e4ea9fc8bdbda58330/python-outfit-0.0.1.post4.tar.gz"
}
],
"0.0.1.post5": [
{
"comment_text": "",
"digests": {
"md5": "6dc3f58f6c13618ab5de3a602ed4e468",
"sha256": "130e322b2e41e04739ef69594661bb64cf31f0c581f6109a4867f08f60f94e2b"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6dc3f58f6c13618ab5de3a602ed4e468",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 12504,
"upload_time": "2019-08-01T05:37:12",
"url": "https://files.pythonhosted.org/packages/fa/f1/97102036cc29d2eb7f2a63aee37d100f9e6d8848cf696d6b4aa2b7578a41/python_outfit-0.0.1.post5-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "455821b670626c6d48e544f95b20dbe6",
"sha256": "34a1aca77a2672052b1e44949b7232011d25c49af6d3b7e28ab61d5c3994728f"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post5.tar.gz",
"has_sig": false,
"md5_digest": "455821b670626c6d48e544f95b20dbe6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8461,
"upload_time": "2019-08-01T05:37:14",
"url": "https://files.pythonhosted.org/packages/4f/76/aea8ab325c0c42e0e68bb7a85613c1785fb8d166fe1ea191e82fa8377488/python-outfit-0.0.1.post5.tar.gz"
}
],
"0.0.1.post6": [
{
"comment_text": "",
"digests": {
"md5": "d560ee08361540e9b3ca78cf8893e9fc",
"sha256": "d625285083017c3917db1dde2bdd32f0c27d6264314c78af8f64cd9b602f4bac"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "d560ee08361540e9b3ca78cf8893e9fc",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 12811,
"upload_time": "2019-08-05T04:35:55",
"url": "https://files.pythonhosted.org/packages/de/b5/5b3cf6d01cca32328da05a5ac490b78afb7c3bf34b8d9937327463e61c2b/python_outfit-0.0.1.post6-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "dc3e61a98fad2758f689af4933c5b698",
"sha256": "cc95adba52685074301e0287a3e896fb60757e70f953a147eb9516110fe26a02"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post6.tar.gz",
"has_sig": false,
"md5_digest": "dc3e61a98fad2758f689af4933c5b698",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8725,
"upload_time": "2019-08-05T04:35:57",
"url": "https://files.pythonhosted.org/packages/c0/52/de08c1b0020f5550de53d998373e6cac0ded9ba824bded6c904aede635e6/python-outfit-0.0.1.post6.tar.gz"
}
],
"0.0.1.post7": [
{
"comment_text": "",
"digests": {
"md5": "13af4b8a553e9e42c31db8e5ba747012",
"sha256": "15fad7c1c09d3a0b79d673dc916a33aed452ddbbb1624228cced24c2448c437b"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "13af4b8a553e9e42c31db8e5ba747012",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 10714,
"upload_time": "2019-08-08T05:22:12",
"url": "https://files.pythonhosted.org/packages/8f/88/0475a16a844acf4c1ad9ccdadd0364b755d3730436bdd7884834098f525b/python_outfit-0.0.1.post7-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "65f03f806d7eb7c8d4a134751013c089",
"sha256": "bcd49717c78137e81c56f608b50f95f675e4306039ab7258d991db481ae9f54d"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post7.tar.gz",
"has_sig": false,
"md5_digest": "65f03f806d7eb7c8d4a134751013c089",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7710,
"upload_time": "2019-08-08T05:22:14",
"url": "https://files.pythonhosted.org/packages/7b/8f/96e3f37b1df477e2fb7c6c213e1e179980626f268faa23cc3b67f57814b6/python-outfit-0.0.1.post7.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "13af4b8a553e9e42c31db8e5ba747012",
"sha256": "15fad7c1c09d3a0b79d673dc916a33aed452ddbbb1624228cced24c2448c437b"
},
"downloads": -1,
"filename": "python_outfit-0.0.1.post7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "13af4b8a553e9e42c31db8e5ba747012",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 10714,
"upload_time": "2019-08-08T05:22:12",
"url": "https://files.pythonhosted.org/packages/8f/88/0475a16a844acf4c1ad9ccdadd0364b755d3730436bdd7884834098f525b/python_outfit-0.0.1.post7-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "65f03f806d7eb7c8d4a134751013c089",
"sha256": "bcd49717c78137e81c56f608b50f95f675e4306039ab7258d991db481ae9f54d"
},
"downloads": -1,
"filename": "python-outfit-0.0.1.post7.tar.gz",
"has_sig": false,
"md5_digest": "65f03f806d7eb7c8d4a134751013c089",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7710,
"upload_time": "2019-08-08T05:22:14",
"url": "https://files.pythonhosted.org/packages/7b/8f/96e3f37b1df477e2fb7c6c213e1e179980626f268faa23cc3b67f57814b6/python-outfit-0.0.1.post7.tar.gz"
}
]
}