{ "info": { "author": "Jonas Grimfelt", "author_email": "grimen@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries" ], "description": "\n# `envjoy` [![Build Status](https://travis-ci.com/grimen/python-envjoy.svg?branch=master)](https://travis-ci.com/grimen/python-envjoy) [![PyPI version](https://badge.fury.io/py/envjoy.svg)](https://badge.fury.io/py/envjoy)\n\n*A more enjoyable environment variable getter and setter - for Python.*\n\n## Introduction\n\nEnvironment variable getting and setting has a bit of an itch it. This is a not-so-whiny library that makes it more easy to get and set environment variables, and optionally smarter data type interpretation.\n\n\n## Install\n\nInstall using **pip**:\n\n```sh\n$ pip install envjoy\n```\n\n\n## Use\n\nVery basic **[example](https://github.com/grimen/python-envjoy/tree/master/examples/basic.py)**:\n\n```python\nfrom __future__ import print_function # Optional: Python 2 support for `env.print`\n\nfrom envjoy import env\n\n# non-casted access - never throws annoying errors\n\nenv.FOO\nenv.FOO = 1\n\ndel env.FOO\n\nenv.FOO = 1\n\n# casted access - never throws annoying errors\n\ndel env['FOO']\n\nprint('---')\n\nprint(env['FOO']) # => None\n\nenv['FOO']= 1 # set value without complaints (casted to string)\n\nprint(env['FOO']) # => \"1\"\nprint(env['FOO']) # => 1\n\nprint('---')\n\nenv['FOO'] = None\n\nprint(env['FOO']) # => ''\nprint(env['FOO', bool]) # => False\nprint(env['FOO', int]) # => 0\nprint(env['FOO', float]) # => 0.0\nprint(env['FOO', str]) # => ''\nprint(env['FOO', tuple]) # => ()\nprint(env['FOO', list]) # => []\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = True\n\nprint(env['FOO']) # => 'True'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 1\nprint(env['FOO', float]) # => 1.0\nprint(env['FOO', str]) # => 'true'\nprint(env['FOO', tuple]) # => (True)\nprint(env['FOO', list]) # => [True]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 'true' # => 'true'\n\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 1\nprint(env['FOO', float]) # => 1.0\nprint(env['FOO', str]) # => 'true'\nprint(env['FOO', tuple]) # => (True)\nprint(env['FOO', list]) # => [True]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 0\n\nprint(env['FOO']) # => '0'\nprint(env['FOO', bool]) # => False\nprint(env['FOO', int]) # => 0\nprint(env['FOO', float]) # => 0.0\nprint(env['FOO', str]) # => '0'\nprint(env['FOO', tuple]) # => (0)\nprint(env['FOO', list]) # => [0]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = '0'\n\nprint(env['FOO']) # => '0'\nprint(env['FOO', bool]) # => False\nprint(env['FOO', int]) # => 0\nprint(env['FOO', float]) # => 0.0\nprint(env['FOO', str]) # => '0'\nprint(env['FOO', tuple]) # => (0)\nprint(env['FOO', list]) # => [0]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 1\n\nprint(env['FOO']) # => '1'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 1\nprint(env['FOO', float]) # => 1.0\nprint(env['FOO', str]) # => '1'\nprint(env['FOO', tuple]) # => (1)\nprint(env['FOO', list]) # => [1]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = '1'\n\nprint(env['FOO']) # => '1'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 1\nprint(env['FOO', float]) # => 1.0\nprint(env['FOO', str]) # => '1'\nprint(env['FOO', tuple]) # => (1)\nprint(env['FOO', list]) # => [1]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = -1\n\nprint(env['FOO']) # => '-1'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => -1\nprint(env['FOO', float]) # => -1.0\nprint(env['FOO', str]) # => '-1'\nprint(env['FOO', tuple]) # => (-1)\nprint(env['FOO', list]) # => [1]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = '-1'\n\nprint(env['FOO']) # => '-1'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => -1\nprint(env['FOO', float]) # => -1.0\nprint(env['FOO', str]) # => '-1'\nprint(env['FOO', tuple]) # => (-1)\nprint(env['FOO', list]) # => [1]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 12.34\n\nprint(env['FOO']) # => '12.34'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 12\nprint(env['FOO', float]) # => 12.34\nprint(env['FOO', str]) # => '12.34'\nprint(env['FOO', tuple]) # => (12.34)\nprint(env['FOO', list]) # => [12.34]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = '12.34'\n\nprint(env['FOO']) # => '12.34'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 12\nprint(env['FOO', float]) # => 12.34\nprint(env['FOO', str]) # => '12.34'\nprint(env['FOO', tuple]) # => (12.34)\nprint(env['FOO', list]) # => [12.34]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = -12.34\n\nprint(env['FOO']) # => '-12.34'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => -12\nprint(env['FOO', float]) # => -12.34\nprint(env['FOO', str]) # => '-12.34'\nprint(env['FOO', tuple]) # => (-12.34)\nprint(env['FOO', list]) # => [-12.34]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = '-12.34'\n\nprint(env['FOO']) # => '-12.34'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => -12\nprint(env['FOO', float]) # => -12.34\nprint(env['FOO', str]) # => '-12.34'\nprint(env['FOO', tuple]) # => (-12.34)\nprint(env['FOO', list]) # => [-12.34]\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 'foo bar baz 1 2 3'\n\nprint(env['FOO']) # => 'foo bar baz 1 2 3'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 123\nprint(env['FOO', float]) # => 123.0\nprint(env['FOO', str]) # => 'foo bar baz 1 2 3'\nprint(env['FOO', tuple]) # => ('foo bar baz 1 2 3')\nprint(env['FOO', list]) # => ['foo bar baz 1 2 3']\nprint(env['FOO', dict]) # => {}\n\nprint('---')\n\nenv['FOO'] = 'foo,bar,baz,1,2,3'\n\nprint(env['FOO']) # => 'foo,bar,baz,1,2,3'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 123\nprint(env['FOO', float]) # => 123.0\nprint(env['FOO', str]) # => 'foo,bar,baz,1,2,3'\nprint(env['FOO', tuple]) # => ('foo', 'bar', 'baz')\nprint(env['FOO', list]) # => ['foo', 'bar', 'baz']\nprint(env['FOO', dict]) # => {0: 'foo', 1: 'bar', 2: 'baz'}\n\nprint('---')\n\nenv['FOO'] = ('foo', 'bar', 'baz', 1, 2, 3)\n\nprint(env['FOO']) # => '(foo,bar,baz,1,2,3)'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 123\nprint(env['FOO', float]) # => 123.0\nprint(env['FOO', str]) # => '(foo,bar,baz,1,2,3)'\nprint(env['FOO', tuple]) # => ('foo', 'bar', 'baz')\nprint(env['FOO', list]) # => ['foo', 'bar', 'baz', 1, 2, 3]\nprint(env['FOO', dict]) # => {} # TODO: {0: 'foo', 1: 'bar', 2: 'baz', 3: 1, 4: 2, 5: 3}\n\nprint('---')\n\nenv['FOO'] = ['foo', 'bar', 'baz', 1, 2, 3]\n\nprint(env['FOO']) # => '[foo,bar,baz,1,2,3]'\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 123\nprint(env['FOO', float]) # => 123.0\nprint(env['FOO', str]) # => '[foo, bar, baz, 1, 2, 3]'\nprint(env['FOO', tuple]) # => ('foo', 'bar', 'baz', 1, 2, 3)\nprint(env['FOO', list]) # => ['foo', 'bar', 'baz', 1, 2, 3]\nprint(env['FOO', dict]) # => {} # TODO: {0: 'foo', 1: 'bar', 2: 'baz', 3: 1, 4: 2, 5: 3}\n\nprint('---')\n\nenv['FOO'] = {'foo': 1, 'bar': 2, 'baz': 3}\n\nprint(env['FOO']) # => '{foo:1,bar:2,baz:3}' # REVIEW: handle nested json\nprint(env['FOO', bool]) # => True\nprint(env['FOO', int]) # => 123\nprint(env['FOO', float]) # => 123.0\nprint(env['FOO', str]) # => '{foo: 1, bar: 2, baz: 3}'\nprint(env['FOO', tuple]) # => ({0: 'foo', 1: 'bar', 2: 'baz', 3: 1, 4: 2, 5: 3})\nprint(env['FOO', list]) # => [{0: 'foo', 1: 'bar', 2: 'baz', 3: 1, 4: 2, 5: 3}]\nprint(env['FOO', dict]) # => {'foo': 1, 'bar': 2, 'baz': 3}\n\n# etc.\n\nprint('---')\n\nenv.inspect()\n\nprint('---')\n\nenv.print()\n\nprint('---')\n```\n\n\n## Test\n\nClone down source code:\n\n```sh\n$ make install\n```\n\nRun **colorful tests**, with only native environment (dependency sandboxing up to you):\n\n```sh\n$ make test\n```\n\nRun **less colorful tests**, with **multi-environment** (using **tox**):\n\n```sh\n$ make test-tox\n```\n\n\n## About\n\nThis project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Python** (research, CV, AI) is heavily used.\n\n\n## License\n\nReleased under the MIT license.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/grimen/python-envjoy", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/grimen/python-envjoy", "keywords": "env,environment,environ,variable,getter,setter,parser,caster,key,value", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "envjoy", "package_url": "https://pypi.org/project/envjoy/", "platform": "", "project_url": "https://pypi.org/project/envjoy/", "project_urls": { "Download": "https://github.com/grimen/python-envjoy", "Homepage": "https://github.com/grimen/python-envjoy", "bugs": "https://github.com/grimen/python-envjoy/issues", "repository": "https://github.com/grimen/python-envjoy" }, "release_url": "https://pypi.org/project/envjoy/0.1.0/", "requires_dist": [ "six (>=1.11.0)", "rootpath (>=0.1.0)", "inspecta (>=0.1.0)", "mybad (>=0.1.0)", "colour-runner (>=0.0.5)", "deepdiff (>=3.3.0)", "tox (>=3.0.0)" ], "requires_python": "", "summary": "A more enjoyable environment variable getter and setter - for Python.", "version": "0.1.0" }, "last_serial": 4776536, "releases": { "0.0.0": [ { "comment_text": "", "digests": { "md5": "a5b151aee737599a0c3479d74edb5c85", "sha256": "69f67efcca9911846c892d4659b146a2bcd8df41100f30cc8dbc6de7c6cfabac" }, "downloads": -1, "filename": "envjoy-0.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a5b151aee737599a0c3479d74edb5c85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5670, "upload_time": "2019-01-27T11:30:45", "url": "https://files.pythonhosted.org/packages/ea/17/3f13b68bf4320a4c9edd11799b2038496ba8cf1a9c97b12fa691be4cbba9/envjoy-0.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4ce23726886026a72029751cc9f34b9b", "sha256": "a81aeb5ebda274fa02bd0dbae2422262134066ec399d05c52429e7d68908f879" }, "downloads": -1, "filename": "envjoy-0.0.0.tar.gz", "has_sig": false, "md5_digest": "4ce23726886026a72029751cc9f34b9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8011, "upload_time": "2019-01-27T11:30:47", "url": "https://files.pythonhosted.org/packages/12/6d/034c11205c0d4b89b9fa5200f23f6981765b03c2d2dbab01e2bc1a294476/envjoy-0.0.0.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "7c7645cdcbc2429a93006e48019fd278", "sha256": "8012649a642411f9af81d9b67ab370601a40bc41d57ba5dad326ade9682b6d91" }, "downloads": -1, "filename": "envjoy-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7c7645cdcbc2429a93006e48019fd278", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18157, "upload_time": "2019-02-04T06:07:04", "url": "https://files.pythonhosted.org/packages/78/74/e5848ece6febc8913656829d33830f236e815bc0fc085b5992f6a3c4a9a7/envjoy-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a6c277518f296d631a57ed4b8193cc2", "sha256": "fc03631d01443d1f931883c236d1a11ad92ce9570cbe4b757ab0985a85ef46b7" }, "downloads": -1, "filename": "envjoy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6a6c277518f296d631a57ed4b8193cc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18801, "upload_time": "2019-02-04T06:07:06", "url": "https://files.pythonhosted.org/packages/b5/3b/99d67d06261c3a4e30965482b9b034a2ba2c665ef737011bc7bf871b0e2c/envjoy-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7c7645cdcbc2429a93006e48019fd278", "sha256": "8012649a642411f9af81d9b67ab370601a40bc41d57ba5dad326ade9682b6d91" }, "downloads": -1, "filename": "envjoy-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7c7645cdcbc2429a93006e48019fd278", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18157, "upload_time": "2019-02-04T06:07:04", "url": "https://files.pythonhosted.org/packages/78/74/e5848ece6febc8913656829d33830f236e815bc0fc085b5992f6a3c4a9a7/envjoy-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6a6c277518f296d631a57ed4b8193cc2", "sha256": "fc03631d01443d1f931883c236d1a11ad92ce9570cbe4b757ab0985a85ef46b7" }, "downloads": -1, "filename": "envjoy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "6a6c277518f296d631a57ed4b8193cc2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18801, "upload_time": "2019-02-04T06:07:06", "url": "https://files.pythonhosted.org/packages/b5/3b/99d67d06261c3a4e30965482b9b034a2ba2c665ef737011bc7bf871b0e2c/envjoy-0.1.0.tar.gz" } ] }