{ "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" } ] }