Implementing cookiecutter
This commit is contained in:
132
.circleci/config.yml
Normal file → Executable file
132
.circleci/config.yml
Normal file → Executable file
@ -1,89 +1,51 @@
|
||||
version: 2
|
||||
jobs:
|
||||
build:
|
||||
docker:
|
||||
- image: nikolaik/python-nodejs:python2.7-nodejs11
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v1-dependencies-{{ checksum "VERSION.md" }}
|
||||
- run:
|
||||
name: Install npm dependencies
|
||||
command: npm install
|
||||
- run:
|
||||
name: Build code
|
||||
command: npm run build:prod
|
||||
- run:
|
||||
name: Install python dependencies
|
||||
command: pip install -e .
|
||||
- save_cache:
|
||||
paths:
|
||||
- node_modules
|
||||
- mopidy_iris
|
||||
key: v1-dependencies-{{ checksum "VERSION.md" }}
|
||||
test:
|
||||
docker:
|
||||
- image: nikolaik/python-nodejs:python2.7-nodejs11
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v1-dependencies-{{ checksum "VERSION.md" }}
|
||||
- run:
|
||||
name: Run tests
|
||||
command: npm run test
|
||||
deploy:
|
||||
docker:
|
||||
- image: nikolaik/python-nodejs:python2.7-nodejs11
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
keys:
|
||||
- v1-dependencies-{{ checksum "VERSION.md" }}
|
||||
- run:
|
||||
name: Prepare .pypirc
|
||||
command: |
|
||||
echo -e "[distutils]" >> ~/.pypirc
|
||||
echo -e "index-servers =" >> ~/.pypirc
|
||||
echo -e " pypi" >> ~/.pypirc
|
||||
echo -e "[distutils]" >> ~/.pypirc
|
||||
echo -e "[pypi]" >> ~/.pypirc
|
||||
echo -e "username = jaedb" >> ~/.pypirc
|
||||
echo -e "password = $PYPI_PASSWORD" >> ~/.pypirc
|
||||
- run:
|
||||
name: Create and distribute package to pypi
|
||||
command: python setup.py sdist upload -r pypi
|
||||
version: 2.1
|
||||
|
||||
orbs:
|
||||
codecov: codecov/codecov@1.0.5
|
||||
|
||||
workflows:
|
||||
version: 2
|
||||
build_and_test:
|
||||
test:
|
||||
jobs:
|
||||
- build:
|
||||
filters:
|
||||
branches:
|
||||
only: deploy/test
|
||||
- test:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
branches:
|
||||
only: deploy/test
|
||||
build_test_and_deploy:
|
||||
- py38
|
||||
- py37
|
||||
- black
|
||||
- check-manifest
|
||||
- flake8
|
||||
|
||||
jobs:
|
||||
- build:
|
||||
filters:
|
||||
branches:
|
||||
only: deploy/release
|
||||
- test:
|
||||
requires:
|
||||
- build
|
||||
filters:
|
||||
branches:
|
||||
only: deploy/release
|
||||
- deploy:
|
||||
requires:
|
||||
- build
|
||||
- test
|
||||
filters:
|
||||
branches:
|
||||
only: deploy/release
|
||||
py38: &test-template
|
||||
docker:
|
||||
- image: mopidy/ci-python:3.8
|
||||
steps:
|
||||
- checkout
|
||||
- restore_cache:
|
||||
name: Restoring tox cache
|
||||
key: tox-v1-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.cfg" }}
|
||||
- run:
|
||||
name: Run tests
|
||||
command: |
|
||||
tox -e $CIRCLE_JOB -- \
|
||||
--junit-xml=test-results/pytest/results.xml \
|
||||
--cov-report=xml
|
||||
- save_cache:
|
||||
name: Saving tox cache
|
||||
key: tox-v1-{{ .Environment.CIRCLE_JOB }}-{{ checksum "setup.cfg" }}
|
||||
paths:
|
||||
- ./.tox
|
||||
- ~/.cache/pip
|
||||
- codecov/upload:
|
||||
file: coverage.xml
|
||||
- store_test_results:
|
||||
path: test-results
|
||||
|
||||
py37:
|
||||
<<: *test-template
|
||||
docker:
|
||||
- image: mopidy/ci-python:3.7
|
||||
|
||||
black: *test-template
|
||||
|
||||
check-manifest: *test-template
|
||||
|
||||
flake8: *test-template
|
||||
|
||||
17
pyproject.toml
Executable file
17
pyproject.toml
Executable file
@ -0,0 +1,17 @@
|
||||
[build-system]
|
||||
requires = ["setuptools >= 30.3.0", "wheel"]
|
||||
|
||||
|
||||
[tool.black]
|
||||
target-version = ["py37", "py38"]
|
||||
line-length = 80
|
||||
|
||||
|
||||
[tool.isort]
|
||||
multi_line_output = 3
|
||||
include_trailing_comma = true
|
||||
force_grid_wrap = 0
|
||||
use_parentheses = true
|
||||
line_length = 88
|
||||
known_tests = "tests"
|
||||
sections = "FUTURE,STDLIB,THIRDPARTY,FIRSTPARTY,TESTS,LOCALFOLDER"
|
||||
88
setup.cfg
88
setup.cfg
@ -1,5 +1,85 @@
|
||||
[wheel]
|
||||
universal = 1
|
||||
|
||||
[metadata]
|
||||
description-file = README.md
|
||||
name = Mopidy-Iris
|
||||
version = 3.0.0
|
||||
url = https://github.com/jaedb/mopidy-iris
|
||||
author = James Barnsley
|
||||
author_email = james@barnsley.nz
|
||||
license = Apache License, Version 2.0
|
||||
license_file = LICENSE
|
||||
description = Fully-featured Mopidy frontend client
|
||||
long_description = file: README.rst
|
||||
classifiers =
|
||||
Environment :: No Input/Output (Daemon)
|
||||
Intended Audience :: End Users/Desktop
|
||||
License :: OSI Approved :: Apache Software License
|
||||
Operating System :: OS Independent
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.7
|
||||
Programming Language :: Python :: 3.8
|
||||
Topic :: Multimedia :: Sound/Audio :: Players
|
||||
|
||||
|
||||
[options]
|
||||
zip_safe = False
|
||||
include_package_data = True
|
||||
packages = find:
|
||||
python_requires = >= 3.7
|
||||
install_requires =
|
||||
Mopidy >= 3.0.0a4 # Change to >= 3.0 once final is released
|
||||
Pykka >= 2.0.1
|
||||
setuptools
|
||||
|
||||
|
||||
[options.extras_require]
|
||||
lint =
|
||||
black
|
||||
check-manifest
|
||||
flake8
|
||||
flake8-bugbear
|
||||
flake8-import-order
|
||||
isort[pyproject]
|
||||
release =
|
||||
twine
|
||||
wheel
|
||||
test =
|
||||
pytest
|
||||
pytest-cov
|
||||
dev =
|
||||
%(lint)s
|
||||
%(release)s
|
||||
%(test)s
|
||||
|
||||
|
||||
[options.packages.find]
|
||||
exclude =
|
||||
tests
|
||||
tests.*
|
||||
|
||||
|
||||
[options.entry_points]
|
||||
mopidy.ext =
|
||||
iris = mopidy_iris:Extension
|
||||
|
||||
|
||||
[flake8]
|
||||
application-import-names = mopidy_iris, tests
|
||||
max-line-length = 80
|
||||
exclude = .git, .tox, build
|
||||
select =
|
||||
# Regular flake8 rules
|
||||
C, E, F, W
|
||||
# flake8-bugbear rules
|
||||
B
|
||||
# B950: line too long (soft speed limit)
|
||||
B950
|
||||
# pep8-naming rules
|
||||
N
|
||||
ignore =
|
||||
# E203: whitespace before ':' (not PEP8 compliant)
|
||||
E203
|
||||
# E501: line too long (replaced by B950)
|
||||
E501
|
||||
# W503: line break before binary operator (not PEP8 compliant)
|
||||
W503
|
||||
# B305: .next() is not a thing on Python 3 (used by playback controller)
|
||||
B305
|
||||
|
||||
42
setup.py
42
setup.py
@ -1,41 +1,3 @@
|
||||
from __future__ import unicode_literals
|
||||
from setuptools import setup
|
||||
|
||||
import re
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
def get_version(filename):
|
||||
content = open(filename).read()
|
||||
metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", content))
|
||||
return metadata['version']
|
||||
|
||||
setup(
|
||||
name='Mopidy-Iris',
|
||||
version=get_version('mopidy_iris/__init__.py'),
|
||||
url='https://github.com/jaedb/iris',
|
||||
license='Apache License, Version 2.0',
|
||||
author='James Barnsley',
|
||||
author_email='james@barnsley.nz',
|
||||
description='A fully-functional Mopidy web client encompassing Spotify and many other backends',
|
||||
packages=find_packages(),
|
||||
zip_safe=False,
|
||||
include_package_data=True,
|
||||
install_requires=[
|
||||
'setuptools >= 3.3',
|
||||
'Mopidy >= 2.0',
|
||||
'ConfigObj >= 5.0.6',
|
||||
'requests >= 2.0.0'
|
||||
],
|
||||
classifiers=[
|
||||
'Environment :: No Input/Output (Daemon)',
|
||||
'Intended Audience :: End Users/Desktop',
|
||||
'License :: OSI Approved :: Apache Software License',
|
||||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python :: 2',
|
||||
'Topic :: Multimedia :: Sound/Audio :: Players',
|
||||
],
|
||||
entry_points={
|
||||
'mopidy.ext': [
|
||||
'iris = mopidy_iris:Extension',
|
||||
],
|
||||
},
|
||||
)
|
||||
setup()
|
||||
|
||||
0
tests/__init__.py
Executable file
0
tests/__init__.py
Executable file
24
tests/test_extension.py
Executable file
24
tests/test_extension.py
Executable file
@ -0,0 +1,24 @@
|
||||
from mopidy_iris import Extension
|
||||
from mopidy_iris import frontend as frontend_lib
|
||||
|
||||
|
||||
def test_get_default_config():
|
||||
ext = Extension()
|
||||
|
||||
config = ext.get_default_config()
|
||||
|
||||
assert "[iris]" in config
|
||||
assert "enabled = true" in config
|
||||
|
||||
|
||||
def test_get_config_schema():
|
||||
ext = Extension()
|
||||
|
||||
schema = ext.get_config_schema()
|
||||
|
||||
# TODO Test the content of your config schema
|
||||
# assert "username" in schema
|
||||
# assert "password" in schema
|
||||
|
||||
|
||||
# TODO Write more tests
|
||||
23
tox.ini
Executable file
23
tox.ini
Executable file
@ -0,0 +1,23 @@
|
||||
[tox]
|
||||
envlist = py37, py38, black, check-manifest, flake8
|
||||
|
||||
[testenv]
|
||||
sitepackages = true
|
||||
deps = .[test]
|
||||
commands =
|
||||
python -m pytest \
|
||||
--basetemp={envtmpdir} \
|
||||
--cov=mopidy_iris --cov-report=term-missing \
|
||||
{posargs}
|
||||
|
||||
[testenv:black]
|
||||
deps = .[lint]
|
||||
commands = python -m black --check .
|
||||
|
||||
[testenv:check-manifest]
|
||||
deps = .[lint]
|
||||
commands = python -m check_manifest
|
||||
|
||||
[testenv:flake8]
|
||||
deps = .[lint]
|
||||
commands = python -m flake8 --show-source --statistics
|
||||
Reference in New Issue
Block a user