fix bug with recursive getter, remove pipenv, tox updates (#9)

* fix bug with recursive getter, remove pipenv, tox updates

* build dep

* build dep

* ...

* .
This commit is contained in:
Erick Daniszewski 2018-10-26 10:26:25 -04:00 committed by GitHub
parent 46b79c9ff1
commit 3e981c3f29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 77 additions and 293 deletions

View File

@ -5,13 +5,12 @@ python:
- "3.6" - "3.6"
# install dependencies # install dependencies
install: "make" install: pip install tox-travis
# run tests and linting # run tests and linting
script: script:
- pip install pipenv --upgrade - tox
- make init - tox -e lint
- make ci
after_success: after_success:
- coveralls - coveralls

View File

@ -2,34 +2,23 @@
# bison - python application configuration # bison - python application configuration
# #
HAS_PIPENV := $(shell which pipenv)
PKG_VERSION := $(shell cat bison/__version__.py | grep __version__ | awk '{print $$3}') PKG_VERSION := $(shell cat bison/__version__.py | grep __version__ | awk '{print $$3}')
requires-pipenv:
ifndef HAS_PIPENV
@echo "pipenv required, but not found: run 'pip install pipenv --upgrade'"
exit 1
endif
.PHONY: init
init: requires-pipenv ## Initialize the project for development
pipenv install --dev --skip-lock
.PHONY: test .PHONY: test
test: ## Run the bison unit tests test: ## Run the bison unit tests
pipenv run py.test -vv tox tests
.PHONY: ci .PHONY: ci
ci: coverage lint ## Run the ci pipeline (test w/ coverage, lint) ci: test lint ## Run the ci pipeline (test w/ coverage, lint)
.PHONY: deps ## Update pinned project dependencies (requirements.txt)
deps:
tox -e deps
.PHONY: lint .PHONY: lint
lint: requires-pipenv ## Run static analysis / linting on bison lint: ## Run static analysis / linting on bison
pipenv run flake8 --ignore=E501,E712 bison tox -e lint
pipenv run isort bison tests -rc -c --diff
.PHONY: coverage
coverage: requires-pipenv ## Show the coverage report for unit tests
pipenv run py.test --cov-report term --cov-report html --cov=bison tests
.PHONY: publish .PHONY: publish
publish: ## Publish bison to Pypi publish: ## Publish bison to Pypi

19
Pipfile
View File

@ -1,19 +0,0 @@
[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true
name = "pypi"
[dev-packages]
"pytest" = ">=2.8.0"
"pytest-cov" = "*"
"isort" = "*"
"flake8" = "*"
"tox" = "*"
"coveralls" = "*"
[packages]
"e1839a8" = {path = ".", editable = true}

241
Pipfile.lock generated
View File

@ -1,241 +0,0 @@
{
"_meta": {
"hash": {
"sha256": "169af82f00f401815defe78cfa60bbea2ab81a449ddf213d7a541cb35866565f"
},
"pipfile-spec": 6,
"requires": {},
"sources": [
{
"name": "pypi",
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
]
},
"default": {
"e1839a8": {
"editable": true,
"path": "."
},
"pyyaml": {
"hashes": [
"sha256:0c507b7f74b3d2dd4d1322ec8a94794927305ab4cebbe89cc47fe5e81541e6e8",
"sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736",
"sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f",
"sha256:326420cbb492172dec84b0f65c80942de6cedb5233c413dd824483989c000608",
"sha256:4474f8ea030b5127225b8894d626bb66c01cda098d47a2b0d3429b6700af9fd8",
"sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab",
"sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7",
"sha256:5f84523c076ad14ff5e6c037fe1c89a7f73a3e04cf0377cb4d017014976433f3",
"sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1",
"sha256:b4c423ab23291d3945ac61346feeb9a0dc4184999ede5e7c43e1ffb975130ae6",
"sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8",
"sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4",
"sha256:ca233c64c6e40eaa6c66ef97058cdc80e8d0157a443655baa1b2966e812807ca",
"sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269"
],
"version": "==3.12"
}
},
"develop": {
"attrs": {
"hashes": [
"sha256:1c7960ccfd6a005cd9f7ba884e6316b5e430a3f1a6c37c5f87d8b43f83b54ec9",
"sha256:a17a9573a6f475c99b551c0e0a812707ddda1ec9653bed04c13841404ed6f450"
],
"version": "==17.4.0"
},
"certifi": {
"hashes": [
"sha256:14131608ad2fd56836d33a71ee60fa1c82bc9d2c8d98b7bdbc631fe1b3cd1296",
"sha256:edbc3f203427eef571f79a7692bb160a2b0f7ccaa31953e99bd17e307cf63f7d"
],
"version": "==2018.1.18"
},
"chardet": {
"hashes": [
"sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
"sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
],
"version": "==3.0.4"
},
"colorama": {
"hashes": [
"sha256:463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda",
"sha256:48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1"
],
"markers": "sys_platform == 'win32'",
"version": "==0.3.9"
},
"coverage": {
"hashes": [
"sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba",
"sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed",
"sha256:104ab3934abaf5be871a583541e8829d6c19ce7bde2923b2751e0d3ca44db60a",
"sha256:15b111b6a0f46ee1a485414a52a7ad1d703bdf984e9ed3c288a4414d3871dcbd",
"sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640",
"sha256:1c383d2ef13ade2acc636556fd544dba6e14fa30755f26812f54300e401f98f2",
"sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162",
"sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508",
"sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249",
"sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694",
"sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a",
"sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287",
"sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1",
"sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000",
"sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1",
"sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e",
"sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5",
"sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062",
"sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba",
"sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc",
"sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc",
"sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99",
"sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653",
"sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c",
"sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558",
"sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f",
"sha256:9e112fcbe0148a6fa4f0a02e8d58e94470fc6cb82a5481618fea901699bf34c4",
"sha256:ac4fef68da01116a5c117eba4dd46f2e06847a497de5ed1d64bb99a5fda1ef91",
"sha256:b8815995e050764c8610dbc82641807d196927c3dbed207f0a079833ffcf588d",
"sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9",
"sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd",
"sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d",
"sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6",
"sha256:e4d96c07229f58cb686120f168276e434660e4358cc9cf3b0464210b04913e77",
"sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80",
"sha256:f8a923a85cb099422ad5a2e345fe877bbc89a8a8b23235824a93488150e45f6e"
],
"version": "==4.5.1"
},
"coveralls": {
"hashes": [
"sha256:32569a43c9dbc13fa8199247580a4ab182ef439f51f65bb7f8316d377a1340e8",
"sha256:664794748d2e5673e347ec476159a9d87f43e0d2d44950e98ed0e27b98da8346"
],
"version": "==1.3.0"
},
"docopt": {
"hashes": [
"sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"
],
"version": "==0.6.2"
},
"flake8": {
"hashes": [
"sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0",
"sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37"
],
"version": "==3.5.0"
},
"funcsigs": {
"hashes": [
"sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca",
"sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
],
"markers": "python_version < '3.0'",
"version": "==1.0.2"
},
"idna": {
"hashes": [
"sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f",
"sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4"
],
"version": "==2.6"
},
"isort": {
"hashes": [
"sha256:1153601da39a25b14ddc54955dbbacbb6b2d19135386699e2ad58517953b34af",
"sha256:b9c40e9750f3d77e6e4d441d8b0266cf555e7cdabdcff33c4fd06366ca761ef8",
"sha256:ec9ef8f4a9bc6f71eec99e1806bfa2de401650d996c59330782b89a5555c1497"
],
"version": "==4.3.4"
},
"mccabe": {
"hashes": [
"sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
"sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
],
"version": "==0.6.1"
},
"pluggy": {
"hashes": [
"sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff"
],
"version": "==0.6.0"
},
"py": {
"hashes": [
"sha256:8cca5c229d225f8c1e3085be4fcf306090b00850fefad892f9d96c7b6e2f310f",
"sha256:ca18943e28235417756316bfada6cd96b23ce60dd532642690dcfdaba988a76d"
],
"version": "==1.5.2"
},
"pycodestyle": {
"hashes": [
"sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766",
"sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9"
],
"version": "==2.3.1"
},
"pyflakes": {
"hashes": [
"sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f",
"sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
],
"version": "==1.6.0"
},
"pytest": {
"hashes": [
"sha256:062027955bccbc04d2fcd5d79690947e018ba31abe4c90b2c6721abec734261b",
"sha256:117bad36c1a787e1a8a659df35de53ba05f9f3398fb9e4ac17e80ad5903eb8c5"
],
"version": "==3.4.2"
},
"pytest-cov": {
"hashes": [
"sha256:03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d",
"sha256:890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec"
],
"version": "==2.5.1"
},
"requests": {
"hashes": [
"sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
"sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
],
"version": "==2.18.4"
},
"six": {
"hashes": [
"sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
"sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
],
"version": "==1.11.0"
},
"tox": {
"hashes": [
"sha256:752f5ec561c6c08c5ecb167d3b20f4f4ffc158c0ab78855701a75f5cef05f4b8",
"sha256:8af30fd835a11f3ff8e95176ccba5a4e60779df4d96a9dfefa1a1704af263225"
],
"version": "==2.9.1"
},
"urllib3": {
"hashes": [
"sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
"sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
],
"markers": "python_version < '3'",
"version": "==1.22"
},
"virtualenv": {
"hashes": [
"sha256:02f8102c2436bb03b3ee6dede1919d1dac8a427541652e5ec95171ec8adbc93a",
"sha256:39d88b533b422825d644087a21e78c45cf5af0ef7a99a1fc9fbb7b481e5c85b0"
],
"markers": "python_version != '3.2'",
"version": "==15.1.0"
}
}
}

View File

@ -7,10 +7,9 @@ A Python application configuration library.
""" """
# flake8: noqa # flake8: noqa
from .__version__ import __author__, __author_email__, __copyright__ from .__version__ import (__author__, __author_email__, __copyright__,
from .__version__ import __description__, __license__, __url__ __description__, __license__, __title__, __url__,
from .__version__ import __title__, __version__ __version__)
from .bison import Bison from .bison import Bison
from .scheme import DictOption, ListOption, Option, Scheme from .scheme import DictOption, ListOption, Option, Scheme
from .utils import DotDict from .utils import DotDict

View File

@ -3,7 +3,7 @@
__title__ = 'bison' __title__ = 'bison'
__description__ = 'Python application configuration' __description__ = 'Python application configuration'
__url__ = 'https://github.com/edaniszewski/bison' __url__ = 'https://github.com/edaniszewski/bison'
__version__ = '0.0.6' __version__ = '0.1.0'
__author__ = 'Erick Daniszewski' __author__ = 'Erick Daniszewski'
__author_email__ = 'edaniszewski@gmail.com' __author_email__ = 'edaniszewski@gmail.com'
__license__ = 'MIT' __license__ = 'MIT'

View File

@ -123,12 +123,12 @@ class DotDict(dict):
# DotDicts. # DotDicts.
first, remainder = key.split('.', 1) first, remainder = key.split('.', 1)
if first in self: if first in self:
value = super(DotDict, self).get(first) value = super(DotDict, self).get(first, default)
# if the value for the key at this level is a dictionary, # if the value for the key at this level is a dictionary,
# then pass the remainder to that DotDict. # then pass the remainder to that DotDict.
if isinstance(value, (dict, DotDict)): if isinstance(value, (dict, DotDict)):
return DotDict(value).get(remainder) return DotDict(value).get(remainder, default)
# TODO: support lists # TODO: support lists

7
requirements.txt Normal file
View File

@ -0,0 +1,7 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file requirements.txt setup.py
#
pyyaml==3.13

View File

@ -1,5 +1,10 @@
[bdist_wheel] [bdist_wheel]
universal = 1 universal = 1
[isort]
not_skip = __init__.py
default_section = THIRDPARTY
known_first_party = bison,tests
[metadata] [metadata]
license_file = LICENSE license_file = LICENSE

View File

@ -62,6 +62,25 @@ class TestBison:
value = b.get(key) value = b.get(key)
assert value == expected assert value == expected
@pytest.mark.parametrize(
'key,default,expected,config', [
('foo', 7, 7, None),
('foo', None, None, bison.DotDict()),
('foo', 'bar', 'bar', bison.DotDict()),
('foo', 'bar', None, bison.DotDict({'foo': None})),
('foo', 'bar', 'test', bison.DotDict({'foo': 'test'})),
('foo.bar', 7, 'baz', bison.DotDict({'foo': {'bar': 'baz'}})),
('foo.bar', 7, 7, bison.DotDict({'foo': {'something': 'else'}})),
]
)
def test_get_with_defaults(self, key, default, expected, config):
"""Get config values from Bison, using defaults if the key is not set."""
b = bison.Bison()
b._full_config = config # for the test, set the config manually
value = b.get(key, default=default)
assert value == expected
@pytest.mark.parametrize( @pytest.mark.parametrize(
'key,value', [ 'key,value', [
('foo', 'bar'), ('foo', 'bar'),

32
tox.ini
View File

@ -1,9 +1,35 @@
[tox] [tox]
testenv = py34,py35,py36 envlist = py{34,35,36}
minversion=3.4.0
skipsdist=True
skip_missing_interpreters=True
[testenv] [testenv]
basepython=
py34: python3.4
py35: python3.5
py36: python3.6
deps= deps=
pytest pytest
commands = pytest-cov
commands=
pip install -e . pip install -e .
py.test tests py.test \
--cov-report term \
--cov-report html \
--cov=bison \
{posargs}
[testenv:deps]
deps=
pip-tools
commands=
pip-compile --output-file requirements.txt setup.py
[testenv:lint]
deps=
isort
flake8
commands=
flake8 --ignore=E501,E712 bison
isort bison tests -rc -c --diff