diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 000000000..bf9b9abef --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,15 @@ +codecov: + notify: + require_ci_to_pass: no + +coverage: + precision: 2 + round: down + range: "70...100" + status: + project: + default: + target: auto + threshold: 1% + base: auto + patch: off diff --git a/.github/workflows/libvcs-ci.yml b/.github/workflows/libvcs-ci.yml index 6fe4b78ca..c87baa1a1 100644 --- a/.github/workflows/libvcs-ci.yml +++ b/.github/workflows/libvcs-ci.yml @@ -19,16 +19,56 @@ jobs: uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - - name: Install dependencies + + - name: Get full Python version + id: full-python-version + shell: bash + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Install poetry run: | - python -m pip install --upgrade poetry - poetry install - - name: Lint with flake8 + curl -O -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py + python get-poetry.py -y + echo "::set-env name=PATH::$HOME/.poetry/bin:$PATH" + rm get-poetry.py + + - name: Get poetry cache paths from config run: | - poetry run flake8 + echo ::set-env name=poetry_cache_dir::$(poetry config --list | sed -n 's/.*cache-dir = //p' | sed -e 's/^"//' -e 's/"$//') + echo ::set-env name=poetry_virtualenvs_path::$(poetry config --list | sed -n 's/.*virtualenvs.path = .* # //p' | sed -e 's/^"//' -e 's/"$//') + + - name: Configure poetry + shell: bash + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v2 + id: cache + with: + path: | + .venv + {{ env.poetry_cache_dir }} + {{ env.poetry_virtualenvs_path }} + key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + shell: bash + run: poetry run pip --version >/dev/null 2>&1 || rm -rf .venv + + - name: Upgrade pip + shell: bash + run: poetry run python -m pip install pip -U + + - name: Install dependencies + run: poetry install + + - name: Lint with flake8 + run: poetry run flake8 + - name: Test with pytest - run: | - poetry run py.test --cov=./ --cov-report=xml + run: poetry run py.test --cov=./ --cov-report=xml + - uses: codecov/codecov-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/publish-docs.yml b/.github/workflows/publish-docs.yml new file mode 100644 index 000000000..74cd7c53c --- /dev/null +++ b/.github/workflows/publish-docs.yml @@ -0,0 +1,96 @@ +name: Publish Docs + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [ '3.x' ] + steps: + - uses: actions/checkout@v1 + - name: Configure git + run: | + git config --global user.name 'travis-ci' + git config --global user.email 'travis@nowhere.edu' + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + + - name: Get full Python version + id: full-python-version + shell: bash + run: echo ::set-output name=version::$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))") + + - name: Install poetry + run: | + curl -O -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py + python get-poetry.py -y + echo "::set-env name=PATH::$HOME/.poetry/bin:$PATH" + rm get-poetry.py + + - name: Get poetry cache paths from config + run: | + echo ::set-env name=poetry_cache_dir::$(poetry config --list | sed -n 's/.*cache-dir = //p' | sed -e 's/^"//' -e 's/"$//') + echo ::set-env name=poetry_virtualenvs_path::$(poetry config --list | sed -n 's/.*virtualenvs.path = .* # //p' | sed -e 's/^"//' -e 's/"$//') + + - name: Configure poetry + shell: bash + run: poetry config virtualenvs.in-project true + + - name: Set up cache + uses: actions/cache@v2 + id: cache + with: + path: | + .venv + {{ env.poetry_cache_dir }} + {{ env.poetry_virtualenvs_path }} + key: venv-${{ runner.os }}-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock') }} + + - name: Ensure cache is healthy + if: steps.cache.outputs.cache-hit == 'true' + shell: bash + run: poetry run pip --version >/dev/null 2>&1 || rm -rf .venv + + - name: Upgrade pip + shell: bash + run: poetry run python -m pip install pip -U + + - name: Install dependencies + run: poetry install + + - name: Build documentation + run: poetry run mkdocs build + + - name: Push documentation to S3 + uses: jakejarvis/s3-sync-action@master + with: + args: --acl public-read --follow-symlinks --delete + env: + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: 'us-west-1' # optional: defaults to us-east-1 + SOURCE_DIR: 'site' # optional: defaults to entire repository + + - name: Generate list of changed files for CloudFront to invalidate + run: | + pushd site; FILES=$(find . -name \* -print | grep html | cut -c2- | sort | uniq | tr '\n' ' '); popd + for file in $FILES; do + echo $file + # add bare directory to list of updated paths when we see index.html + [[ "$file" == *"/index.html" ]] && echo $file | sed -e 's/\/index.html$/\//' + done | sort | uniq | tr '\n' ' ' > .updated_files + + - name: Invalidate on CloudFront + uses: chetan/invalidate-cloudfront-action@master + env: + DISTRIBUTION: ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION }} + AWS_REGION: 'us-east-1' + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + PATHS_FROM: .updated_files diff --git a/.gitignore b/.gitignore index c68d894df..991b92c1c 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,12 @@ doc/_build/ *.lprof pip-wheel-metadata/ + +# Used by publish-docs.yml CI +.updated_files + +# mkdocs +site/ + +# vim +.vim/ diff --git a/.tmuxp.yaml b/.tmuxp.yaml index b81ab27f9..78ae837f4 100644 --- a/.tmuxp.yaml +++ b/.tmuxp.yaml @@ -21,5 +21,5 @@ windows: panes: - focus: true - pane - - make serve - - make SPHINXBUILD='poetry run sphinx-build' watch + - make -C .. serve_docs + - make -C .. watch_docs diff --git a/CHANGES b/CHANGES index f49d6e53a..8ad849258 100644 --- a/CHANGES +++ b/CHANGES @@ -1,220 +1,214 @@ -========= -Changelog -========= +# Changelog Here are the changes for libvcs. -libvcs 0.5-current ------------------- +## libvcs 0.5-current + Generally speaking, refactor / magic is in the process of being stripped out in the next few releases. The API is subject to change significantly in pre-1.0 builds. -libvcs 0.4.4 (2020-08-05) -------------------------- -- :issue:`268` :class:`libvcs.base.BaseRepo`: - - - no longer sets ``**kwargs`` to dictionary on the object - - remove ``__slot__`` and rename ``name`` attribute to ``repo_name`` - -libvcs 0.4.3 (2020-08-01) -------------------------- -- [bug] :func:`libvcs.git.extract_status()` Fix issue capturing branch names - with special characters - -libvcs 0.4.2 (2020-08-01) -------------------------- -- [bug] :meth:`libvcs.git.GitRepo.get_current_remote_name()` Handle case where - upstream is unpushed -- [feature] :meth:`libvcs.git.GitRepo.status()` - Retrieve status of repo -- [feature] :func:`libvcs.git.extract_status()` - Return structured info from - ``git status`` - -libvcs 0.4.1 (2020-08-01) -------------------------- +## libvcs 0.4.4 (2020-08-05) + +- `268` `libvcs.base.BaseRepo`: + - no longer sets `**kwargs` to dictionary on the object + - remove `__slot__` and rename `name` attribute to `repo_name` + +## libvcs 0.4.3 (2020-08-01) + +- \[bug\] `libvcs.git.extract_status()` Fix issue capturing branch + names with special characters + +## libvcs 0.4.2 (2020-08-01) + +- \[bug\] `libvcs.git.GitRepo.get_current_remote_name()` Handle case + where upstream is unpushed +- \[feature\] `libvcs.git.GitRepo.status()` - Retrieve status of repo +- \[feature\] `libvcs.git.extract_status()` - Return structured info + from `git status` + +## libvcs 0.4.1 (2020-08-01) + - Remove log statement -libvcs 0.4 (2020-08-01) ------------------------ +## libvcs 0.4 (2020-08-01) **Breaking changes** -Internal functionality relating to remotes have been reorganized to avoid -implicit behavior. +Internal functionality relating to remotes have been reorganized to +avoid implicit behavior. + +- `~libvcs.git.GitRepo` methods have been renamed, they will be + deprecated in 0.5: + + - `GitRepo.remotes_get` renamed to `libvcs.git.GitRepo.remotes()` + - `GitRepo.remote_get` renamed to `libvcs.git.GitRepo.remote()` + - `GitRepo.remote_set` renamed to + `libvcs.git.GitRepo.set_remote()` + +- `~libvcs.git.GitRepo` the `remotes` argument is deprecated and no + longer used. Use `libvcs.git.GitRepo.set_remote` after repo is + instantiated. -- :class:`~libvcs.git.GitRepo` methods have been renamed, they will be deprecated - in 0.5: +- `libvcs.git.GitRepo.obtain` no longer set remotes based on a `dict` + passed to `~libvcs.git.GitRepo`. This was deemed to specialized / + implicit. - - ``GitRepo.remotes_get`` renamed to :meth:`libvcs.git.GitRepo.remotes()` - - ``GitRepo.remote_get`` renamed to :meth:`libvcs.git.GitRepo.remote()` - - ``GitRepo.remote_set`` renamed to :meth:`libvcs.git.GitRepo.set_remote()` +- `libvcs.git.GitRepo.set_remote()` (formerly `remote_set`) -- :class:`~libvcs.git.GitRepo` the ``remotes`` argument is deprecated and no longer - used. Use :meth:`libvcs.git.GitRepo.set_remote` after repo is instantiated. + The new method accepts `name` and `url` (in that order). `name` no + longer has a default value (was `origin`). -- :meth:`libvcs.git.GitRepo.obtain` no longer set remotes based on a ``dict`` passed - to :class:`~libvcs.git.GitRepo`. This was deemed to specialized / implicit. +- `libvcs.git.GitRepo.remote()` (formerly `remote_get`): -- :meth:`libvcs.git.GitRepo.set_remote()` (formerly ``remote_set``) + - `remote` argument renamed to `name`. It will be removed in 0.5.0 - The new method accepts ``name`` and ``url`` (in that order). ``name`` no longer - has a default value (was ``origin``). + The default value of `'origin'` has been removed -- :meth:`libvcs.git.GitRepo.remote()` (formerly ``remote_get``): + - Now returns `~libvcs.git.GitRemote` (a + :py`collections.namedtuple` object) - - ``remote`` argument renamed to ``name``. It will be removed in 0.5.0 + The tuple is similar to the old output, except there is an + additional value at the beginning, the name of the remote, e.g. + `('origin', '', '')` - The default value of ``'origin'`` has been removed - - Now returns :meth:`~libvcs.git.GitRemote` (a :py:class:`collections.namedtuple` object) +- `libvcs.git.GitRepo.remotes()` (formerly `remotes_get`) are now + methods instead of properties. - The tuple is similar to the old output, except there is an additional value at - the beginning, the name of the remote, e.g. ``('origin', '', '')`` + Passing `flat=True` to return a `dict` of `tuple` instead of `dict` -- :meth:`libvcs.git.GitRepo.remotes()` (formerly ``remotes_get``) are now methods - instead of properties. +- New method: `libvcs.git.GitRepo.get_git_version()` - Passing ``flat=True`` to return a ``dict`` of ``tuple`` instead of ``dict`` -- New method: :meth:`libvcs.git.GitRepo.get_git_version()` -- New method: :meth:`libvcs.git.GitRepo.get_current_remote_name()` +- New method: `libvcs.git.GitRepo.get_current_remote_name()` +## libvcs 0.3.3 (2020-07-29) -libvcs 0.3.3 (2020-07-29) -------------------------- - Remove f-string from test -- :meth:`libvcs.git.GitRepo.obtain` Overwrite remote if exists +- `libvcs.git.GitRepo.obtain` Overwrite remote if exists -libvcs 0.3.2 (2020-07-26) -------------------------- -- :issue:`258` :meth:`libvcs.git.GitRepo.remote_set` +## libvcs 0.3.2 (2020-07-26) - - Fix updating of remote URLs - - Add new param: ``overwrite``, usage: ``repo.remote_set(url, 'origin', overwrite=True)`` +- `258` `libvcs.git.GitRepo.remote_set` + - Fix updating of remote URLs + - Add new param: `overwrite`, usage: + `repo.remote_set(url, 'origin', overwrite=True)` + +## libvcs 0.3.1post1 (2020-07-26) -libvcs 0.3.1post1 (2020-07-26) ------------------------------- - Fix version in pyroject.toml - Update developer docs -libvcs 0.3.1 (2020-07-25) -------------------------- +## libvcs 0.3.1 (2020-07-25) + - Fix issue with subprocess.Popen loud warning on Python 3.8 -- :issue:`296` - Move from Pipfile to poetry +- `296` - Move from Pipfile to poetry - Sort imports - Add isort package, isort configuration in setup.cfg, and - ``make isort`` task to Makefile. -- Add ``project_urls`` to setup.py + `make isort` task to Makefile. +- Add `project_urls` to setup.py + +## libvcs 0.3.0 (2018-03-12) -libvcs 0.3.0 (2018-03-12) -------------------------- - Move vcspull to the vcs-python organization -- Fix issue where VCS objects failed to set attribute in Ubuntu - 18.04. +- Fix issue where VCS objects failed to set attribute in Ubuntu 18.04. + +## libvcs 0.2.3 (2016-12-22) -libvcs 0.2.3 (2016-12-22) -------------------------- - Update documentation to point to libvcs.git-pull.com - Switch doc theme to alabaster - Pin and update libraries via pyup - - update vulture 0.8.1 to 0.11 - - update flake8 from 2.5.4 to 3.2.1 - - update pytest-mock from 1.4.0 to 1.5.0 - - update pytest from 3.0.4 to 3.0.5 - - pin alabaster to 0.7.9 - - pin sphinx to 1.5.1 - -libvcs 0.2.2 (2016-11-23) -------------------------- -- Fix bug with unused ``support`` module in vcspull. See `#43`_ - -libvcs 0.2.1 (2016-09-13) -------------------------- + - update vulture 0.8.1 to 0.11 + - update flake8 from 2.5.4 to 3.2.1 + - update pytest-mock from 1.4.0 to 1.5.0 + - update pytest from 3.0.4 to 3.0.5 + - pin alabaster to 0.7.9 + - pin sphinx to 1.5.1 + +## libvcs 0.2.2 (2016-11-23) + +- Fix bug with unused `support` module in vcspull. See + [\#43](https://github.com/vcs-python/vcspull/issues/43) + +## libvcs 0.2.1 (2016-09-13) + - Update pytest to 3.0.2, remove unused pytest-raisesregexp - dependency. -- Fix bug in ``which`` when executable is not found. Allow - specifying search paths manually. -- Better support for missing VCS when testing on git and - subversion. - -libvcs 0.2.0 (2016-06-24) -------------------------- -- :issue:`9` Support for ``progress_callback`` to use realtime output - from commands in progress (such as ``git fetch``). -- :issue:`9` More tests, internal factoring and documentation, thanks - @jcfr -- :issue:`9` Official support for pypy, pypy3 -- :issue:`11` : Fix unbound local when updating git repos - -libvcs 0.1.7 (2016-06-21) -------------------------- -- :issue:`7` Add ``check_returncode`` property to run, thanks @jcfr -- :issue:`8` Remove all cases of ``run_buffered`` / buffering from - the library. - -libvcs 0.1.6 (2016-06-21) -------------------------- -- :issue:`5` Remove colorama dependency -- :issue:`6` Remove log module. Logging defaults. - - The library user can still use formatters and set log levels, - for an example, see the vcspull logging setup. - - An example:: - - import logging - - # your app - log.setLevel(level) - log.addHandler(logging.StreamHandler()) - - # vcslib logging options - vcslogger = logging.getLogger('libvcs') - vcslogger.propagate = False # don't pass libvcs settings up scope - vcslogger.addHandler(logging.StreamHandler()) - vcslogger.setLevel(level) - - You can also use ``logging.Formatter`` variables ``repo_name`` - and ``repo_vcs`` with repos:: - - repo_channel = logging.StreamHandler() - repo_formatter = logging.Formatter( - '[%(repo_name)s] (%(repo_vcs)s) %(levelname)1.1s: %(message)s' - ) - repo_channel.setFormatter(repo_formatter) - vcslogger = logging.getLogger('libvcs') - vcslogger.propagate = False # don't pass libvcs settings up scope - vcslogger.addHandler(repo_channel) - vcslogger.setLevel(level) - -libvcs 0.1.5 (2016-06-21) -------------------------- -- Fix issue where repo context wouldn't pass to repo logging - adapter - -libvcs 0.1.4 (2016-06-20) -------------------------- -- Fix print_stdout_on_progress_end signature in git update - -libvcs 0.1.3 (2016-06-20) -------------------------- -- ``create_repo`` function for regular vcs urls + dependency. +- Fix bug in `which` when executable is not found. Allow specifying + search paths manually. +- Better support for missing VCS when testing on git and subversion. + +## libvcs 0.2.0 (2016-06-24) + +- `9` Support for `progress_callback` to use realtime output from + commands in progress (such as `git fetch`). +- `9` More tests, internal factoring and documentation, thanks @jcfr +- `9` Official support for pypy, pypy3 +- `11` : Fix unbound local when updating git repos + +## libvcs 0.1.7 (2016-06-21) + +- `7` Add `check_returncode` property to run, thanks @jcfr +- `8` Remove all cases of `run_buffered` / buffering from the library. + +## libvcs 0.1.6 (2016-06-21) + +- `5` Remove colorama dependency + +- `6` Remove log module. Logging defaults. + + The library user can still use formatters and set log levels, for an + example, see the vcspull logging setup. + + An example: + + import logging + + # your app + log.setLevel(level) + log.addHandler(logging.StreamHandler()) + + # vcslib logging options + vcslogger = logging.getLogger('libvcs') + vcslogger.propagate = False # don't pass libvcs settings up scope + vcslogger.addHandler(logging.StreamHandler()) + vcslogger.setLevel(level) + + You can also use `logging.Formatter` variables `repo_name` and + `repo_vcs` with repos: + + repo_channel = logging.StreamHandler() + repo_formatter = logging.Formatter( + '[%(repo_name)s] (%(repo_vcs)s) %(levelname)1.1s: %(message)s' + ) + repo_channel.setFormatter(repo_formatter) + vcslogger = logging.getLogger('libvcs') + vcslogger.propagate = False # don't pass libvcs settings up scope + vcslogger.addHandler(repo_channel) + vcslogger.setLevel(level) + +## libvcs 0.1.5 (2016-06-21) + +- Fix issue where repo context wouldn't pass to repo logging adapter + +## libvcs 0.1.4 (2016-06-20) + +- Fix print\_stdout\_on\_progress\_end signature in git update + +## libvcs 0.1.3 (2016-06-20) + +- `create_repo` function for regular vcs urls - API docs updated -libvcs 0.1.2 (2016-06-20) -------------------------- -- change signature on ``create_repo_from_pip_url`` to accept - ``pip_url`` insetad of ``url``. -- ``Base`` to accept ``repo_dir`` instead of ``name`` and - ``parent_dir``. +## libvcs 0.1.2 (2016-06-20) -libvcs 0.1.1 (2016-06-20) -------------------------- -- remove unneeded pyyaml, kaptan and click dependencies +- change signature on `create_repo_from_pip_url` to accept `pip_url` + insetad of `url`. +- `Base` to accept `repo_dir` instead of `name` and `parent_dir`. -libvcs 0.1.0 (2016-06-20) -------------------------- -- libvcs split from `vcspull`_ +## libvcs 0.1.1 (2016-06-20) + +- remove unneeded pyyaml, kaptan and click dependencies -.. _vcspull: https://github.com/vcs-python/vcspull -.. _#43: https://github.com/vcs-python/vcspull/issues/43 +## libvcs 0.1.0 (2016-06-20) -.. vim: set filetype=rst: +- libvcs split from [vcspull](https://github.com/vcs-python/vcspull) diff --git a/MANIFEST.in b/MANIFEST.in index 6336b37e4..98cccae47 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ -include README.rst LICENSE CHANGES .tmuxp.yaml +include README.md LICENSE CHANGES .tmuxp.yaml include requirements/*.txt recursive-include docs *.rst diff --git a/Makefile b/Makefile index 566982b4d..1773111cc 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ PY_FILES= find . -type f -not -path '*/\.*' | grep -i '.*[.]py$$' 2> /dev/null +DOC_FILES= find . -type f -not -path '*/\.*' | grep -i '.*[.]rst\$\|.*[.]md\$\|.*[.]css\$\|.*[.]py\$\|mkdocs\.yml\|CHANGES\|TODO\|.*conf\.py' 2> /dev/null entr_warn: @@ -22,10 +23,16 @@ watch_test: if command -v entr > /dev/null; then ${PY_FILES} | entr -c $(MAKE) test; else $(MAKE) test entr_warn; fi build_docs: - cd docs && $(MAKE) html + poetry run mkdocs build watch_docs: - cd docs && $(MAKE) watch_docs + if command -v entr > /dev/null; then ${DOC_FILES} | entr -c $(MAKE) build_docs; else $(MAKE) build_docs entr_warn; fi + +serve_docs: + python -m http.server --directory site + +dev_docs: + $(MAKE) -j watch_docs serve_docs flake8: flake8 libvcs tests diff --git a/README.md b/README.md new file mode 100644 index 000000000..a7e5e05fe --- /dev/null +++ b/README.md @@ -0,0 +1,126 @@ +`libvcs` - abstraction layer for vcs, powers +[vcspull](https://www.github.com/vcs-python/vcspull/). + +[![Python Package](https://img.shields.io/pypi/v/libvcs.svg)](http://badge.fury.io/py/libvcs) +[![Documentation Status](https://readthedocs.org/projects/libvcs/badge/?version=latest)](https://readthedocs.org/projects/libvcs/) +[![Build Status](https://img.shields.io/travis/vcs-python/libvcs.svg)](https://travis-ci.org/vcs-python/libvcs) +[![Code Coverage](https://codecov.io/gh/vcs-python/libvcs/branch/master/graph/badge.svg)](https://codecov.io/gh/vcs-python/libvcs) +![License](https://img.shields.io/github/license/vcs-python/libvcs.svg) + +Install: + + $ pip install libvcs + +Open up python: + + $ python + + # or for nice autocomplete and syntax highlighting + $ pip install ptpython + $ ptpython + +Create a +[Repo](https://libvcs.git-pull.com/en/latest/api.html#creating-a-repo-object) +object of the project to inspect / checkout / update: + + >>> from libvcs.shortcuts import create_repo_from_pip_url, create_repo + + # repo is an object representation of a vcs repository. + >>> r = create_repo(url='https://www.github.com/vcs-python/libtmux', + ... vcs='git', + ... repo_dir='/tmp/libtmux') + + # or via pip-style URL + >>> r = create_repo_from_pip_url( + ... pip_url='git+https://www.github.com/vcs-python/libtmux', + ... repo_dir='/tmp/libtmux') + +Update / clone repo: + + # it may or may not be checked out/cloned on the system yet + >>> r.update_repo() + +Get revision: + + >>> r.get_revision() + u'5c227e6ab4aab44bf097da2e088b0ff947370ab8' + +# Donations + +Your donations fund development of new features, testing and support. +Your money will go directly to maintenance and development of the +project. If you are an individual, feel free to give whatever feels +right for the value you get out of the project. + +See donation options at . + +# More information + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Python supportPython 2.7, >= 3.4, pypy
VCS supportedgit(1), svn(1), hg(1)
Sourcehttps://github.com/vcs-python/libvcs
Docshttps://libvcs.git-pull.com
Changeloghttps://libvcs.git-pull.com/en/latest/history.html
APIhttps://libvcs.git-pull.com/en/latest/api.html
Issueshttps://github.com/vcs-python/libvcs/issues
Travishttps://travis-ci.org/vcs-python/libvcs
Test Coveragehttps://codecov.io/gh/vcs-python/libvcs
pypihttps://pypi.python.org/pypi/libvcs
Open Hubhttps://www.openhub.net/p/libvcs
LicenseMIT.

git repo

$ git clone https://github.com/vcs-python/libvcs.git

install dev

$ git clone https://github.com/vcs-python/libvcs.git libvcs
+$ cd ./libvcs
+$ virtualenv .venv
+$ source .venv/bin/activate
+$ pip install -e .

tests

$ py.test
diff --git a/README.rst b/README.rst deleted file mode 100644 index d6490e3cb..000000000 --- a/README.rst +++ /dev/null @@ -1,117 +0,0 @@ -``libvcs`` - abstraction layer for vcs, powers `vcspull`_. - -|pypi| |docs| |build-status| |coverage| |license| - -Install: - -.. code-block:: sh - - $ pip install libvcs - -Open up python: - -.. code-block:: sh - - $ python - - # or for nice autocomplete and syntax highlighting - $ pip install ptpython - $ ptpython - -Create a `Repo`_ object of the project to inspect / checkout / update: - -.. code-block:: python - - >>> from libvcs.shortcuts import create_repo_from_pip_url, create_repo - - # repo is an object representation of a vcs repository. - >>> r = create_repo(url='https://www.github.com/vcs-python/libtmux', - ... vcs='git', - ... repo_dir='/tmp/libtmux') - - # or via pip-style URL - >>> r = create_repo_from_pip_url( - ... pip_url='git+https://www.github.com/vcs-python/libtmux', - ... repo_dir='/tmp/libtmux') - -Update / clone repo: - -.. code-block:: python - - # it may or may not be checked out/cloned on the system yet - >>> r.update_repo() - -Get revision: - -.. code-block:: python - - >>> r.get_revision() - u'5c227e6ab4aab44bf097da2e088b0ff947370ab8' - -Donations ---------- - -Your donations fund development of new features, testing and support. -Your money will go directly to maintenance and development of the project. -If you are an individual, feel free to give whatever feels right for the -value you get out of the project. - -See donation options at https://www.git-pull.com/support.html. - -More information ----------------- - -============== ========================================================== -Python support Python 2.7, >= 3.4, pypy -VCS supported git(1), svn(1), hg(1) -Source https://github.com/vcs-python/libvcs -Docs https://libvcs.git-pull.com -Changelog https://libvcs.git-pull.com/en/latest/history.html -API https://libvcs.git-pull.com/en/latest/api.html -Issues https://github.com/vcs-python/libvcs/issues -Travis https://travis-ci.org/vcs-python/libvcs -Test Coverage https://codecov.io/gh/vcs-python/libvcs -pypi https://pypi.python.org/pypi/libvcs -Open Hub https://www.openhub.net/p/libvcs -License `MIT`_. -git repo .. code-block:: bash - - $ git clone https://github.com/vcs-python/libvcs.git -install dev .. code-block:: bash - - $ git clone https://github.com/vcs-python/libvcs.git libvcs - $ cd ./libvcs - $ virtualenv .venv - $ source .venv/bin/activate - $ pip install -e . -tests .. code-block:: bash - - $ py.test -============== ========================================================== - -.. _MIT: https://opensource.org/licenses/MIT -.. _Documentation: https://libvcs.git-pull.com/en/latest/ -.. _API: https://libvcs.git-pull.com/en/latest/api.html -.. _pip: http://www.pip-installer.org/en/latest/ -.. _vcspull: https://www.github.com/vcs-python/vcspull/ -.. _Repo: https://libvcs.git-pull.com/en/latest/api.html#creating-a-repo-object - -.. |pypi| image:: https://img.shields.io/pypi/v/libvcs.svg - :alt: Python Package - :target: http://badge.fury.io/py/libvcs - -.. |build-status| image:: https://img.shields.io/travis/vcs-python/libvcs.svg - :alt: Build Status - :target: https://travis-ci.org/vcs-python/libvcs - -.. |coverage| image:: https://codecov.io/gh/vcs-python/libvcs/branch/master/graph/badge.svg - :alt: Code Coverage - :target: https://codecov.io/gh/vcs-python/libvcs - -.. |license| image:: https://img.shields.io/github/license/vcs-python/libvcs.svg - :alt: License - -.. |docs| image:: https://readthedocs.org/projects/libvcs/badge/?version=latest - :alt: Documentation Status - :scale: 100% - :target: https://readthedocs.org/projects/libvcs/ diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 000000000..8f578b18b --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,47 @@ +.mkapi-node { + font-size: 0.85em; +} + +.mkapi-node a.mkapi-src-link, a.mkapi-docs-link { + font-size: 0.8em; +} + +.mkapi-node .mkapi-object.code h3.mkapi-object-body { + font-size: 1.2em; +} + +.mkapi-node .mkapi-section-name .mkapi-section-name-body { + font-size: 1em; +} + +.mkapi-node .mkapi-base { + font-size: .9em; +} + +.mkapi-node code.mkapi-item-name, +.mkapi-node code.mkapi-object-signature, +.mkapi-node code.mkapi-object-parenthesis, +.mkapi-node span.mkapi-item-dash, +.mkapi-node span.mkapi-item-type { + font-size: 0.9em; +} + +.mkapi-node .mkapi-item-name, +.mkapi-node .mkapi-object, +.mkapi-node .mkapi-object code, +.mkapi-node .mkapi-object.code h2.mkapi-object-body, +.mkapi-node h2 .mkapi-object { + font-size: 1em; +} + +.mkapi-node ul.mkapi-items li::before { + font-size: 80%; +} + +.mkapi-section-name { + padding: 0px 8px 2px 8px; +} + +.mkapi-object.plain .mkapi-object-kind { + font-weight: normal; +} diff --git a/docs/_static/favicon.ico b/assets/images/favicon.ico similarity index 100% rename from docs/_static/favicon.ico rename to assets/images/favicon.ico diff --git a/docs/_static/img/libvcs.svg b/assets/images/libvcs.svg similarity index 100% rename from docs/_static/img/libvcs.svg rename to assets/images/libvcs.svg diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index b6c24566c..000000000 --- a/docs/Makefile +++ /dev/null @@ -1,178 +0,0 @@ -# Makefile for Sphinx documentation -# -PYVERSION=$(shell python -c "import sys;v=sys.version_info[0];sys.stdout.write(str(v))") -HTTP_PORT = 8068 - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/libvcs.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/libvcs.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/libvcs" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/libvcs" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -checkbuild: - rm -rf $(BUILDDIR) - $(SPHINXBUILD) -n -q ./ $(BUILDDIR) - -WATCH_FILES= find .. -type f -not -path '*/\.*' | grep -i '.*[.]rst\$\|.*[.]py\$\|CHANGES\|TODO\|.*conf\.py' 2> /dev/null - -watch: - if command -v entr > /dev/null; then ${WATCH_FILES} | entr -c $(MAKE) html; else $(MAKE) html; fi - -serve: - @echo '==============================================================' - @echo - @echo 'docs server running at http://0.0.0.0:${HTTP_PORT}/_build/html' - @echo - @echo '==============================================================' - @if test ${PYVERSION} -eq 2; then $(MAKE) serve_py2; else make serve_py3; fi - -serve_py2: - python -m SimpleHTTPServer ${HTTP_PORT} - -serve_py3: - python -m http.server ${HTTP_PORT} diff --git a/docs/api.rst b/docs/api.rst deleted file mode 100644 index 51be33ccd..000000000 --- a/docs/api.rst +++ /dev/null @@ -1,70 +0,0 @@ -.. _api: - -============= -API Reference -============= - -Creating a repo object ----------------------- - -Helper methods are available in ``libvcs.shortcuts`` which -can return a repo object from a single entry-point. - -.. autofunction:: libvcs.shortcuts.create_repo - -.. autofunction:: libvcs.shortcuts.create_repo_from_pip_url - -Instantiating a repo by hand ----------------------------- - -Tools like :func:`libvcs.shortcuts.create_repo` and -:func:`libvcs.shortcuts.create_repo_from_pip_url` are just wrappers -around instantiated these classes. - -See examples below of git, mercurial, and subversion. - -Git ---- - -.. autoclass:: libvcs.git.GitRepo - :members: - :show-inheritance: - -.. autoclass:: libvcs.git.GitRemote - :members: - :show-inheritance: - -.. autofunction:: libvcs.git.extract_status - -Mercurial ---------- - -aka ``hg(1)`` - -.. autoclass:: libvcs.hg.MercurialRepo - :members: - :show-inheritance: - -Subversion ----------- - -aka ``svn(1)`` - -.. autoclass:: libvcs.svn.SubversionRepo - :members: - :show-inheritance: - -Adding your own VCS -------------------- - -Extending libvcs can be done through subclassing ``BaseRepo``. - -.. autoclass:: libvcs.base.BaseRepo - :members: - :show-inheritance: - -Utility stuff -------------- - -.. automodule:: libvcs.util - :members: diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index fe2fade49..000000000 --- a/docs/conf.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -import os - -import alagitpull - -# Get the project root dir, which is the parent dir of this -cwd = os.getcwd() -project_root = os.path.dirname(cwd) - -# package data -about = {} -with open("../libvcs/__about__.py") as fp: - exec(fp.read(), about) - -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.napoleon', - 'alagitpull', - 'sphinx_issues', -] - -releases_unstable_prehistory = True -releases_document_name = ["history"] -releases_issue_uri = "https://github.com/vcs-python/libvcs/issues/%s" -releases_release_uri = "https://github.com/vcs-python/libvcs/tree/v%s" - -issues_github_path = about['__github__'] - -templates_path = ['_templates'] - -source_suffix = '.rst' - -master_doc = 'index' - -project = about['__title__'] -copyright = about['__copyright__'] - -version = '%s' % ('.'.join(about['__version__'].split('.'))[:2]) -release = '%s' % (about['__version__']) - -exclude_patterns = ['_build'] - -pygments_style = 'sphinx' - -html_theme_path = [alagitpull.get_path()] -html_favicon = 'favicon.ico' -html_theme = 'alagitpull' -html_theme_options = { - 'logo': 'img/libvcs.svg', - 'github_user': 'vcs-python', - 'github_repo': 'libvcs', - 'github_type': 'star', - 'github_banner': True, - 'projects': alagitpull.projects, - 'project_name': about['__title__'], -} -html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', - 'more.html', - 'searchbox.html', - ] -} - -html_static_path = ['_static'] -htmlhelp_basename = '%sdoc' % about['__title__'] - -alagitpull_internal_hosts = ['libvcs.git-pull.com', '0.0.0.0'] -alagitpull_external_hosts_new_window = True - - -latex_documents = [ - ( - 'index', - '{0}.tex'.format(about['__package_name__']), - '{0} Documentation'.format(about['__title__']), - about['__author__'], - 'manual', - ) -] - -man_pages = [ - ( - 'index', - about['__package_name__'], - '{0} Documentation'.format(about['__title__']), - about['__author__'], - 1, - ) -] - -texinfo_documents = [ - ( - 'index', - '{0}'.format(about['__package_name__']), - '{0} Documentation'.format(about['__title__']), - about['__author__'], - about['__package_name__'], - about['__description__'], - 'Miscellaneous', - ) -] - -intersphinx_mapping = { - 'py': ('https://docs.python.org/2', None), - 'pip': ('http://pip.readthedocs.io/en/latest/', None), -} diff --git a/docs/developing.md b/docs/developing.md new file mode 100644 index 000000000..ee42b86ea --- /dev/null +++ b/docs/developing.md @@ -0,0 +1,106 @@ +# Development + +## Testing + +Our tests are inside `tests/`. Tests are implemented using +[pytest](http://pytest.org/). + +## Install the latest code from git + +### Using pip + +To begin developing, check out the code from github: + + $ git clone git@github.com:vcs-python/libvcs.git + $ cd libvcs + +Now create a virtualenv, if you don't know how to, you can create a +virtualenv with: + + $ virtualenv .venv + +Then activate it to current tty / terminal session with: + + $ source .venv/bin/activate + +Good! Now let's run this: + + $ pip install -r requirements/test.txt -e . + +This has `pip`, a python package manager install the python package in +the current directory. `-e` means `--editable`, which means you can +adjust the code and the installed software will reflect the changes. + +### Using poetry + +To begin developing, check out the code from github: + + $ git clone git@github.com:vcs-python/libvcs.git + $ cd libvcs + +You can create a virtualenv, and install all of the locked packages as +listed in poetry.lock: + + $ poetry install + +If you ever need to update packages during your development session, the +following command can be used to update all packages as per poetry +settings or individual package (second command): + + $ poetry update + $ poetry update requests + +Then activate it to your current tty / terminal session with: + + $ poetry shell + +That is it! You are now ready to code! + +## Test Runner + +As you seen above, the `libvcs` command will now be available to you, +since you are in the virtual environment, your PATH environment was updated to include a +special version of `python` inside your `.venv` folder with its own +packages. + + $ make test + +You probably didn't see anything but tests scroll by. + +If you found a problem or are trying to write a test, you can file an +[issue on github](https://github.com/vcs-python/libvcs/issues). + +#### Test runner options + +Test only a file: + + $ py.test tests/test_util.py + +will test the `tests/test_util.py` tests. + + $ py.test tests/test_util.py::test_mkdir_p + +tests `test_mkdir_p` inside of `tests/test_util.py`. + +Multiple can be separated by spaces: + + $ py.test tests/test_{git,svn}.py tests/test_util.py::test_mkdir_p + +## Docs + +Build docs to _site/_: + + $ make build_docs + +Serve docs from http://localhost:8000: + + $ make serve_docs + +Rebuild docs when files are edited (requires [`entr(1)`](http://eradman.com/entrproject/)): + + $ make watch_docs + +Serve + watch w/ rebuild (requires `make(1)` w/ `-j` support, usually GNU Make): + + $ make dev_docs diff --git a/docs/developing.rst b/docs/developing.rst deleted file mode 100644 index f0f4b67bb..000000000 --- a/docs/developing.rst +++ /dev/null @@ -1,129 +0,0 @@ -.. _developing: - -=========== -Development -=========== - -Testing -------- - -Our tests are inside ``tests/``. Tests are implemented using -`pytest`_. - -.. _pytest: http://pytest.org/ - -.. _install_dev_env: - -Install the latest code from git --------------------------------- - -Using pip -^^^^^^^^^ - -To begin developing, check out the code from github: - -.. code-block:: sh - - $ git clone git@github.com:vcs-python/libvcs.git - $ cd libvcs - -Now create a virtualenv, if you don't know how to, you can create a -virtualenv with: - -.. code-block:: sh - - $ virtualenv .venv - -Then activate it to current tty / terminal session with: - -.. code-block:: sh - - $ source .venv/bin/activate - -Good! Now let's run this: - -.. code-block:: sh - - $ pip install -r requirements/test.txt -e . - -This has ``pip``, a python package manager install the python package -in the current directory. ``-e`` means ``--editable``, which means you can -adjust the code and the installed software will reflect the changes. - -Using poetry -^^^^^^^^^^^^ - -To begin developing, check out the code from github: - -.. code-block:: bash - - $ git clone git@github.com:vcs-python/libvcs.git - $ cd libvcs - -You can create a virtualenv, and install all of the locked -packages as listed in poetry.lock: - -.. code-block:: bash - - $ poetry install - -If you ever need to update packages during your development session, the -following command can be used to update all packages as per poetry settings or -individual package (second command): - -.. code-block:: bash - - $ poetry update - $ poetry update requests - -Then activate it to your current tty / terminal session with: - -.. code-block:: bash - - $ poetry shell - -That is it! You are now ready to code! - -Test Runner ------------ - -As you seen above, the ``libvcs`` command will now be available to you, -since you are in the virtual environment, your `PATH` environment was -updated to include a special version of ``python`` inside your ``.venv`` -folder with its own packages. - -.. code-block:: bash - - $ make test - -You probably didn't see anything but tests scroll by. - -If you found a problem or are trying to write a test, you can file an -`issue on github`_. - -.. _test_specific_tests: - -Test runner options -~~~~~~~~~~~~~~~~~~~ - -Test only a file: - -.. code-block:: bash - - $ py.test tests/test_util.py - -will test the ``tests/test_util.py`` tests. - -.. code-block:: bash - - $ py.test tests/test_util.py::test_mkdir_p - -tests ``test_mkdir_p`` inside of ``tests/test_util.py``. - -Multiple can be separated by spaces: - -.. code-block:: bash - - $ py.test tests/test_{git,svn}.py tests/test_util.py::test_mkdir_p - -.. _issue on github: https://github.com/vcs-python/libvcs/issues diff --git a/docs/history.md b/docs/history.md new file mode 120000 index 000000000..3e8bc8c0c --- /dev/null +++ b/docs/history.md @@ -0,0 +1 @@ +../CHANGES \ No newline at end of file diff --git a/docs/history.rst b/docs/history.rst deleted file mode 100644 index 37c6fae3b..000000000 --- a/docs/history.rst +++ /dev/null @@ -1,8 +0,0 @@ -.. _history: - -======= -History -======= - -.. include:: ../CHANGES - :start-line: 5 diff --git a/docs/index.md b/docs/index.md new file mode 120000 index 000000000..32d46ee88 --- /dev/null +++ b/docs/index.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index f49e189a3..000000000 --- a/docs/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _index: - -###### -libvcs -###### - - -.. include:: ../README.rst - :start-line: 4 - -.. toctree:: - :maxdepth: 2 - :hidden: - - api - developing - history diff --git a/docs/requirements.txt b/docs/requirements.txt deleted file mode 100644 index 04b4dec7d..000000000 --- a/docs/requirements.txt +++ /dev/null @@ -1 +0,0 @@ --r ../requirements/doc.txt diff --git a/libvcs/__init__.py b/libvcs/__init__.py index a184ff009..4c7effe9c 100644 --- a/libvcs/__init__.py +++ b/libvcs/__init__.py @@ -1,10 +1,5 @@ # -*- coding: utf-8 -*- -"""Repo package for libvcs. - -libvcs -~~~~~~ - -""" +"""Repo package for libvcs.""" from __future__ import absolute_import, print_function, unicode_literals import logging diff --git a/libvcs/base.py b/libvcs/base.py index ed355e100..2bf0a11fc 100644 --- a/libvcs/base.py +++ b/libvcs/base.py @@ -1,10 +1,5 @@ # -*- coding: utf-8 -*- -"""Base class for Repository objects. - -libvcs.base -~~~~~~~~~~~ - -""" +"""Base class for Repository objects.""" from __future__ import absolute_import, print_function, unicode_literals import logging @@ -22,7 +17,6 @@ class BaseRepo(RepoLoggingAdapter, object): """Base class for repositories. Extends :py:class:`logging.LoggerAdapter`. - """ #: log command output to buffer @@ -33,14 +27,16 @@ class BaseRepo(RepoLoggingAdapter, object): def __init__(self, url, repo_dir, progress_callback=None, *args, **kwargs): """ - :param callback: Retrieve live progress from ``sys.stderr`` (useful for - certain vcs commands like ``git pull``. Use ``progress_callback``:: - - def progress_cb(output, timestamp): - sys.stdout.write(output) - sys.stdout.flush() - create_repo(..., progress_callback=progress_cb) - :type callback: func + Parameters + ---------- + callback : func + Retrieve live progress from ``sys.stderr`` (useful for certain vcs commands + like ``git pull``. Use ``progress_callback``: + + >>> def progress_cb(output, timestamp): + >>> sys.stdout.write(output) + >>> sys.stdout.flush() + >>> create_repo(..., progress_callback=progress_cb) """ self.progress_callback = progress_callback self.url = url @@ -77,17 +73,21 @@ def run( """Return combined stderr/stdout from a command. This method will also prefix the VCS command bin_name. By default runs - using the cwd :attr:`~.path` of the repo. + using the cwd `libvcs.base.BaseRepo.path` of the repo. - :param cwd: dir command is run from, defaults :attr:`~.path`. - :type cwd: str + Parameters + ---------- + cwd : str + dir command is run from, defaults to `libvcs.base.BaseRepo.path`. - :param check_returncode: Indicate whether a :exc:`~exc.CommandError` - should be raised if return code is different from 0. - :type check_returncode: :class:`bool` + check_returncode : bool + Indicate whether a :exc:`~exc.CommandError` should be raised if return code + is different from 0. - :returns: combined stdout/stderr in a big string, newlines retained - :rtype: str + Returns + ------- + str + combined stdout/stderr in a big string, newlines retained """ if cwd is None: @@ -124,7 +124,7 @@ def check_destination(self, *args, **kwargs): @classmethod def get_url_and_revision_from_pip_url(cls, pip_url): - """Return repo URL and revision by parsing :attr:`~.url`.""" + """Return repo URL and revision by parsing `libvcs.base.BaseRepo.url`.""" error_message = ( "Sorry, '%s' is a malformed VCS url. " "The format is +://, " diff --git a/libvcs/exc.py b/libvcs/exc.py index d95baaffd..f19477840 100644 --- a/libvcs/exc.py +++ b/libvcs/exc.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- """Exceptions for libvcs. -libvcs.exc -~~~~~~~~~~ +If you see this, we're publishing to S3 automatically """ from __future__ import absolute_import, print_function, unicode_literals diff --git a/libvcs/git.py b/libvcs/git.py index 54e3e44d7..7469514e0 100644 --- a/libvcs/git.py +++ b/libvcs/git.py @@ -1,22 +1,18 @@ # -*- coding: utf-8 -*- """Git Repo object for libvcs. -libvcs.git -~~~~~~~~~~ - From https://github.com/saltstack/salt (Apache License): -- :py:meth:`GitRepo.remote` -- :py:meth:`GitRepo.remote_get` (renamed to ``remote``) -- :py:meth:`GitRepo.remote_set` (renamed to ``set_remote``) +- [`GitRepo.remote`](libvcs.git.GitRepo.remote) (renamed to ``remote``) +- [`GitRepo.remote`](libvcs.git.GitRepo.remote_set) (renamed to ``set_remote``) From pip (MIT Licnese): -- :py:meth:`GitRepo.get_url_and_revision_from_pip_url` (get_url_rev) -- :py:meth:`GitRepo.get_revision` -- :py:meth:`GitRepo.get_git_version` - -""" +- [`GitRepo.remote`](libvcs.git.GitRepo.remote_set) (renamed to ``set_remote``) +- [`GitRepo.get_url_and_revision_from_pip_url`](libvcs.git.GitRepo.get_url_and_revision_from_pip_url`) (``get_url_rev``) +- [`GitRepo.get_revision`](libvcs.git.GitRepo.get_revision) +- [`GitRepo.get_git_version`](libvcs.git.GitRepo.get_git_version) +""" # NOQA: E501 from __future__ import absolute_import, print_function, unicode_literals import collections @@ -34,9 +30,7 @@ GitRemote = collections.namedtuple('GitRemote', ['name', 'fetch_url', 'push_url']) """Structure containing git repo information. -Supports :meth:`collections.namedtuple._asdict()` - -.. versionadded:: 0.4.0 +Supports `collections.namedtuple._asdict()` """ @@ -45,7 +39,7 @@ def extract_status(value): Returns ------- - dict : + dict Dictionary of git repo's status """ pattern = re.compile( @@ -102,24 +96,20 @@ class GitRepo(BaseRepo): def __init__(self, url, **kwargs): """A git repository. - :param url: URL of repo - :type url: str - - :param git_shallow: clone with ``--depth 1`` (default False) - :type git_shallow: bool - - :param git_submodules: Git submodules that shall be updated, all if empty - :type git_submodules: list + Parameters + ---------- + url : str + URL of repo - :param tls_verify: Should certificate for https be checked (default False) - :type tls_verify: bool + git_shallow : bool + clone with `--depth 1`, default `False` - .. versionchanged:: 0.4.0 + git_submodules : list + Git submodules that shall be updated, all if empty - The ``remotes`` argument is ignored. Use :meth:`~.set_remote` to set remotes - before running :meth:`~.obtain`. + tls_verify : bool + Should certificate for https be checked (default False) - The ``remotes`` argument is deprecated and will be removed in 0.5 """ if 'git_shallow' not in kwargs: self.git_shallow = False @@ -169,13 +159,7 @@ def get_url_and_revision_from_pip_url(cls, pip_url): return url, rev def obtain(self): - """Retrieve the repository, clone if doesn't exist. - - .. versionchanged:: 0.4.0 - - No longer sets remotes. This is now done manually through - :meth:`~.set_remote`. - """ + """Retrieve the repository, clone if doesn't exist.""" self.check_destination() url = self.url @@ -349,25 +333,14 @@ def update_repo(self): def remotes(self, flat=False): """Return remotes like git remote -v. - :param flat: Return a dict of ``tuple`` instead of ``dict``. Default False. - :type flat: bool - - .. versionchanged:: 0.4.0 - - Has been changed from property to method - - .. versionchanged:: 0.4.0 - - The ``flat`` argument has been added to return remotes in ``tuple`` form - - .. versionchanged:: 0.4.0 - - This used to return a dict of tuples, it now returns a dict of dictionaries - with ``name``, ``fetch_url``, and ``push_url``. + Parameters + ---------- + flat : bool + Return a dict of ``tuple`` instead of ``dict``, default `False`. Returns ------- - dict : + dict dict of git upstream / remote URLs """ remotes = {} @@ -383,12 +356,6 @@ def remotes(self, flat=False): @property def remotes_get(self): - """ - .. versionchanged:: 0.4.0 - - The ``remotes_get`` property is deprecated and will be removed in 0.5. It - has been renamed ``remotes()`` and changed from property to a method. - """ warnings.warn( "'remotes_get' is deprecated and will be removed in 0.5. " "Use 'remotes()' method instead.", @@ -408,13 +375,8 @@ def remote(self, name, **kwargs): Returns ------- - :class:`libvcs.git.GitRemote` : + [`GitRemote`](libvcs.git.GitRemote) Remote name and url in tuple form - - .. versionchanged:: 0.4.0 - - The ``remote`` argument was renamed to ``name`` and will be deprecated - in 0.5. """ if kwargs.get('remote') is not None: @@ -441,11 +403,11 @@ def remote(self, name, **kwargs): return None def remote_get(self, name='origin', **kwargs): - """ - .. versionchanged:: 0.4.0 + """Retrieve remote - The ``remote_get`` method is deprecated and will be removed in 0.5.0. It has - been renamed ``remote`` + !!! note + The ``remote_get`` method is deprecated and will be removed in 0.5.0. It has + been renamed ``remote`` """ warnings.warn( "'remote_get' is deprecated and will be removed in 0.5. " @@ -459,12 +421,13 @@ def remote_get(self, name='origin', **kwargs): def set_remote(self, name, url, overwrite=False): """Set remote with name and URL like git remote add. - :param name: defines the remote name. - :type name: str - :param url: defines the remote URL - :type url: str + Parameters + ---------- + name : str + defines the remote name. - .. versionadded:: 0.4.0 + url : str + defines the remote URL """ url = self.chomp_protocol(url) @@ -476,12 +439,6 @@ def set_remote(self, name, url, overwrite=False): return self.remote(name=name) def remote_set(self, url, name='origin', overwrite=False, **kwargs): - """ - .. versionchanged:: 0.4.0 - - The ``remote_set`` method is deprecated and will be removed in 0.5.0. It has - been renamed ``set_remote``. - """ warnings.warn( "'remote_set' is deprecated and will be removed in 0.5. " "Use 'set_remote' instead.", @@ -502,7 +459,7 @@ def chomp_protocol(url): Returns ------- - str : + str URL as VCS software would accept it """ if '+' in url: @@ -525,7 +482,7 @@ def get_git_version(self): Returns ------- - str : + str git version """ VERSION_PFX = 'git version ' @@ -541,25 +498,23 @@ def status(self): Wraps ``git status --sb --porcelain=2``. Does not include changed files, yet. - Examples - -------- - - :: - - print(git_repo.status()) - { - "branch_oid": 'de6185fde0806e5c7754ca05676325a1ea4d6348', - "branch_head": 'fix-current-remote-name', - "branch_upstream": 'origin/fix-current-remote-name', - "branch_ab": '+0 -0', - "branch_ahead": '0', - "branch_behind": '0', - } - Returns ------- - dict : + dict Status of current checked out repository + + Examples + -------- + + >>> git_repo.status() + { + "branch_oid": 'de6185fde0806e5c7754ca05676325a1ea4d6348', + "branch_head": 'fix-current-remote-name', + "branch_upstream": 'origin/fix-current-remote-name', + "branch_ab": '+0 -0', + "branch_ahead": '0', + "branch_behind": '0' + } """ return extract_status(self.run(['status', '-sb', '--porcelain=2'])) @@ -568,7 +523,7 @@ def get_current_remote_name(self): Returns ------- - str : + str If upstream the same, returns ``branch_name``. If upstream mismatches, returns ``remote_name/branch_name``. """ diff --git a/libvcs/hg.py b/libvcs/hg.py index 4f6ba3a88..06e8624cc 100644 --- a/libvcs/hg.py +++ b/libvcs/hg.py @@ -1,16 +1,12 @@ # -*- coding: utf-8 -*- """Mercurial Repo object for libvcs. -libvcs.hg -~~~~~~~~~ - The following is from pypa/pip (MIT license): -- :py:meth:`MercurialRepo.get_url_and_revision_from_pip_url` -- :py:meth:`MercurialRepo.get_url` -- :py:meth:`MercurialRepo.get_revision` - -""" +- [`MercurialRepo.get_url_and_revision_from_pip_url`](libvcs.hg.get_url_and_revision_from_pip_url) +- [`MercurialRepo.get_url`](libvcs.hg.MercurialRepo.get_url) +- [`MercurialRepo.get_revision`](libvcs.hg.MercurialRepo.get_revision) +""" # NOQA E5 from __future__ import absolute_import, print_function, unicode_literals import logging diff --git a/libvcs/shortcuts.py b/libvcs/shortcuts.py index d374d604e..a5210a250 100644 --- a/libvcs/shortcuts.py +++ b/libvcs/shortcuts.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +"""Shortcuts""" from __future__ import absolute_import, print_function, unicode_literals from libvcs import GitRepo, MercurialRepo, SubversionRepo @@ -8,20 +9,23 @@ def create_repo(url, vcs, **kwargs): r"""Return a object representation of a VCS repository. - :returns: instance of a repository object - :rtype: :class:`libvcs.svn.SubversionRepo`, :class:`libvcs.git.GitRepo` or - :class:`libvcs.hg.MercurialRepo`. + Returns + ------- + `libvcs.svn.SubversionRepo`, `libvcs.git.GitRepo`, or `libvcs.hg.MercurialRepo`. - Usage Example:: + Examples + -------- - >>> from libvcs.shortcuts import create_repo + >>> from libvcs.shortcuts import create_repo + >>> + >>> r = create_repo( + ... url='https://www.github.com/you/myrepo', + ... vcs='git', + ... repo_dir='/tmp/myrepo' + ... ) - >>> r = create_repo( - ... url='https://www.github.com/you/myrepo', - ... vcs='git', - ... repo_dir='/tmp/myrepo') + >>> r.update_repo() - >>> r.update_repo() |myrepo| (git) Repo directory for myrepo (git) does not exist @ \ /tmp/myrepo |myrepo| (git) Cloning. @@ -46,29 +50,30 @@ def create_repo(url, vcs, **kwargs): def create_repo_from_pip_url(pip_url, **kwargs): r"""Return a object representation of a VCS repository via pip-style url. - :returns: instance of a repository object - :rtype: :class:`libvcs.svn.SubversionRepo`, :class:`libvcs.git.GitRepo` or - :class:`libvcs.hg.MercurialRepo`. + Returns + ------- + `libvcs.svn.SubversionRepo`, `libvcs.git.GitRepo`, or `libvcs.hg.MercurialRepo`. - Usage Example:: + Examples + -------- - >>> from libvcs.shortcuts import create_repo_from_pip_url + >>> from libvcs.shortcuts import create_repo_from_pip_url - >>> r = create_repo_from_pip_url( - ... pip_url='git+https://www.github.com/you/myrepo', - ... repo_dir='/tmp/myrepo') + >>> r = create_repo_from_pip_url( + ... pip_url='git+https://www.github.com/you/myrepo', + ... repo_dir='/tmp/myrepo') - >>> r.update_repo() - |myrepo| (git) Repo directory for myrepo (git) does not exist @ \ - /tmp/myrepo - |myrepo| (git) Cloning. - |myrepo| (git) git clone https://www.github.com/tony/myrepo \ - /tmp/myrepo - Cloning into '/tmp/myrepo'... - Checking connectivity... done. - |myrepo| (git) git fetch - |myrepo| (git) git pull - Already up-to-date. + >>> r.update_repo() + |myrepo| (git) Repo directory for myrepo (git) does not exist @ \ + /tmp/myrepo + |myrepo| (git) Cloning. + |myrepo| (git) git clone https://www.github.com/tony/myrepo \ + /tmp/myrepo + Cloning into '/tmp/myrepo'... + Checking connectivity... done. + |myrepo| (git) git fetch + |myrepo| (git) git pull + Already up-to-date. """ if pip_url.startswith('git+'): return GitRepo.from_pip_url(pip_url, **kwargs) diff --git a/libvcs/svn.py b/libvcs/svn.py index f0a66bd64..dbec084d9 100644 --- a/libvcs/svn.py +++ b/libvcs/svn.py @@ -2,21 +2,17 @@ # -*- coding: utf-8 -*- """Subversion object for libvcs. -libvcs.svn -~~~~~~~~~~ - The follow are from saltstack/salt (Apache license): -- :py:meth:`SubversionRepo.get_revision_file` +- [`SubversionRepo.get_revision_file`](libvcs.svn.SubversionRepo.get_revision_file) The following are pypa/pip (MIT license): -- :py:meth:`SubversionRepo.get_url_and_revision_from_pip_url` -- :py:meth:`SubversionRepo.get_url` -- :py:meth:`SubversionRepo.get_revision` -- :py:meth:`~.get_rev_options` - -""" +- [`SubversionRepo.get_url_and_revision_from_pip_url`](libvcs.svn.SubversionRepo.get_url_and_revision_from_pip_url) +- [`SubversionRepo.get_url`](libvcs.svn.SubversionRepo.get_url) +- [`SubversionRepo.get_revision`](libvcs.svn.SubversionRepo.get_revision) +- [`get_rev_options`](libvcs.svn.get_rev_options) +""" # NOQA: E5 from __future__ import absolute_import, print_function, unicode_literals import logging @@ -36,18 +32,19 @@ class SubversionRepo(BaseRepo): def __init__(self, url, **kwargs): """A svn repository. - :param url: URL in subversion repository - :type url: str + Parameters + ---------- + url : str + URL in subversion repository - :param svn_username: username to use for checkout and update - :type svn_username: str or None + svn_username : str, optional + username to use for checkout and update - :param svn_password: password to use for checkout and update - :type svn_password: str or None + svn_password : str, optional + password to use for checkout and update - :param svn_trust_cert: trust the Subversion server site certificate - (default False) - :type svn_trust_cert: bool + svn_trust_cert : bool + trust the Subversion server site certificate, default False """ if 'svn_trust_cert' not in kwargs: self.svn_trust_cert = False @@ -87,9 +84,7 @@ def get_revision_file(self, location): return int(dict(info_list)['Revision']) def get_revision(self, location=None): - """ - Return the maximum revision for all files under a given location - """ + """Return maximum revision for all files under a given location""" if not location: location = self.url @@ -146,11 +141,7 @@ def update_repo(self, dest=None): def get_rev_options(url, rev): - """Return revision options. - - from pip pip.vcs.subversion. - - """ + """Return revision options. From pip pip.vcs.subversion.""" if rev: rev_options = ['-r', rev] else: diff --git a/libvcs/util.py b/libvcs/util.py index dc7df95cc..bfaeaf894 100644 --- a/libvcs/util.py +++ b/libvcs/util.py @@ -1,10 +1,5 @@ # -*- coding: utf-8 -*- -"""Utility functions for libvcs. - -libvcs.util -~~~~~~~~~~~ - -""" +"""Utility functions for libvcs.""" from __future__ import absolute_import, print_function, unicode_literals import datetime @@ -26,11 +21,17 @@ def which( from salt.util - https://www.github.com/saltstack/salt - license apache - :param exe: Application to search PATHs for. - :type exe: str - :param default_path: Application to search PATHs for. - :type default_path: list - :rtype: str + Parameters + ---------- + exe : str + Application to search PATHs for. + default_path : list + Application to search PATHs for. + + Returns + ------- + str : + Path to binary """ def _is_executable_file_or_link(exe): @@ -66,8 +67,10 @@ def _is_executable_file_or_link(exe): def mkdir_p(path): """Make directories recursively. - :param path: path to create - :type path: str + Parameters + ---------- + path : str + path to create """ try: os.makedirs(path) @@ -82,7 +85,7 @@ class RepoLoggingAdapter(logging.LoggerAdapter): """Adapter for adding Repo related content to logger. - Extends :class:`logging.LoggerAdapter`'s functionality. + Extends `logging.LoggerAdapter`'s functionality. The standard library :py:mod:`logging` facility is pretty complex, so this warrants and explanation of what's happening. @@ -96,7 +99,6 @@ class RepoLoggingAdapter(logging.LoggerAdapter): logging.LoggerAdapter.process()` to be made use of when the user of this library wishes to use a custom :class:`logging.Formatter` to output results. - """ def __init__(self, *args, **kwargs): @@ -124,30 +126,37 @@ def run( """ Run 'cmd' in a shell and return the combined contents of stdout and stderr (Blocking). Throws an exception if the command exits non-zero. - :param cmd: list of str (or single str, if shell==True) indicating + Parameters + ---------- + cmd : list or str, or single str, if shell=True the command to run - :param shell: boolean indicating whether we are using advanced shell + + shell : boolean + boolean indicating whether we are using advanced shell features. Use only when absolutely necessary, since this allows a lot more freedom which could be exploited by malicious code. See the warning here: http://docs.python.org/library/subprocess.html#popen-constructor - :param cwd: dir command is run from. - :type cwd: str - :param log_in_real_time: boolean indicating whether to read stdout from the + + cwd : str + dir command is run from. Defaults to ``path``. + + log_in_real_time : boolean + boolean indicating whether to read stdout from the subprocess in real time instead of when the process finishes. - :param check_returncode: Indicate whether a :exc:`~exc.CommandError` - should be raised if return code is different from 0. - :type check_returncode: :class:`bool` - :param cwd: dir command is run from, defaults :attr:`~.path`. - :type cwd: str - :param callback: callback to return output as a command executes, accepts - a function signature of ``(output, timestamp)``. Example usage:: - - def progress_cb(output, timestamp): - sys.stdout.write(output) - sys.stdout.flush() - run(['git', 'pull'], callback=progrses_cb) - :type callback: func + + check_returncode : bool + Indicate whether a `libvcs.exc.CommandError` should be raised if return code is + different from 0. + + callback : callable + callback to return output as a command executes, accepts a function signature + of `(output, timestamp)`. Example usage: + + def progress_cb(output, timestamp): + sys.stdout.write(output) + sys.stdout.flush() + run(['git', 'pull'], callback=progrses_cb) """ proc = subprocess.Popen( cmd, shell=shell, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd=cwd, diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..c0d513561 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,27 @@ +# mkdocs.yml +site_name: libvcs +site_url: https://libvcs.git-pull.com +repo_url: https://github.com/vcs-python/libvcs +repo_name: 'GitHub' +theme: + name: "material" + custom_dir: . + logo: assets/images/libvcs.svg + favicon: assets/images/favicon.ico + +extra_css: + - assets/css/custom.css + +markdown_extensions: + - admonition + - codehilite + +plugins: + - search + - mkapi + +nav: + - index.md + - history.md + - developing.md + - API: mkapi/api/libvcs diff --git a/poetry.lock b/poetry.lock index 8209a7ec5..90364d979 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,22 +1,3 @@ -[[package]] -category = "dev" -description = "A configurable sidebar-enabled Sphinx theme" -name = "alabaster" -optional = false -python-versions = "*" -version = "0.7.12" - -[[package]] -category = "dev" -description = "Cleverly-named alabaster sub-theme for git-pull projects" -name = "alagitpull" -optional = false -python-versions = "*" -version = "0.0.23" - -[package.dependencies] -alabaster = "<0.8" - [[package]] category = "dev" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." @@ -49,17 +30,6 @@ dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.int docs = ["sphinx", "zope.interface"] tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"] -[[package]] -category = "dev" -description = "Internationalization utilities" -name = "babel" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "2.8.0" - -[package.dependencies] -pytz = ">=2015.7" - [[package]] category = "dev" description = "Backport of functools.lru_cache" @@ -115,6 +85,18 @@ optional = false python-versions = "*" version = "2020.6.20" +[[package]] +category = "dev" +description = "Foreign Function Interface for Python calling C code." +marker = "sys_platform == \"linux\"" +name = "cffi" +optional = false +python-versions = "*" +version = "1.14.1" + +[package.dependencies] +pycparser = "*" + [[package]] category = "dev" description = "Universal encoding detector for Python 2 and 3" @@ -126,7 +108,7 @@ version = "3.0.4" [[package]] category = "dev" description = "Composable command line interface toolkit" -marker = "python_version >= \"3.6\" and python_version < \"4.0\"" +marker = "python_version >= \"3.5\" or python_version >= \"3.5\" or python_version >= \"3.6\" and python_version < \"4.0\"" name = "click" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -147,7 +129,6 @@ requests = ">=2.7.9" [[package]] category = "dev" description = "Cross-platform colored terminal text." -marker = "sys_platform == \"win32\" and python_version < \"3\" or python_version >= \"3\" and sys_platform == \"win32\" or sys_platform == \"win32\"" name = "colorama" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -169,7 +150,7 @@ testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2)", "pytes [[package]] category = "dev" description = "Backports and enhancements for the contextlib module" -marker = "python_version < \"3\" or python_version >= \"3\" and python_version < \"3.4\"" +marker = "python_version < \"3.4\" or python_version >= \"3\" and python_version < \"3.4\"" name = "contextlib2" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" @@ -188,19 +169,24 @@ toml = ["toml"] [[package]] category = "dev" -description = "Style checker for Sphinx (or other) RST documentation" -name = "doc8" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +marker = "sys_platform == \"linux\"" +name = "cryptography" optional = false -python-versions = "*" -version = "0.8.1" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +version = "3.0" [package.dependencies] -Pygments = "*" -chardet = "*" -docutils = "*" -restructuredtext-lint = ">=0.7" -six = "*" -stevedore = "*" +cffi = ">=1.8,<1.11.3 || >1.11.3" +six = ">=1.4.1" + +[package.extras] +docs = ["sphinx (>=1.6.5,<1.8.0 || >1.8.0,<3.1.0 || >3.1.0,<3.1.1 || >3.1.1)", "sphinx-rtd-theme"] +docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] +idna = ["idna (>=2.1)"] +pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["pytest (>=3.6.0,<3.9.0 || >3.9.0,<3.9.1 || >3.9.1,<3.9.2 || >3.9.2)", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,<3.79.2 || >3.79.2)"] [[package]] category = "dev" @@ -270,6 +256,15 @@ optional = false python-versions = "*" version = "3.2.3-2" +[[package]] +category = "dev" +description = "Clean single-source support for Python 3 and 2" +marker = "python_version >= \"3.5\"" +name = "future" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +version = "0.18.2" + [[package]] category = "dev" description = "Backport of the concurrent.futures package from Python 3" @@ -287,18 +282,10 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.10" -[[package]] -category = "dev" -description = "Getting image size from png/jpeg/jpeg2000/gif file" -name = "imagesize" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.2.0" - [[package]] category = "dev" description = "Read metadata from Python packages" -marker = "python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\"" +marker = "python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\"" name = "importlib-metadata" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" @@ -369,9 +356,22 @@ colors = ["colorama (>=0.4.3,<0.5.0)"] pipfile_deprecated_finder = ["pipreqs", "requirementslib", "tomlkit (>=0.5.3)"] requirements_deprecated_finder = ["pipreqs", "pip-api"] +[[package]] +category = "dev" +description = "Low-level, pure Python DBus protocol wrapper." +marker = "sys_platform == \"linux\"" +name = "jeepney" +optional = false +python-versions = ">=3.5" +version = "0.4.3" + +[package.extras] +dev = ["testpath"] + [[package]] category = "dev" description = "A very fast and expressive template engine." +marker = "python_version >= \"3.5\"" name = "jinja2" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -383,10 +383,103 @@ MarkupSafe = ">=0.23" [package.extras] i18n = ["Babel (>=0.8)"] +[[package]] +category = "dev" +description = "Lightweight pipelining: using Python functions as pipeline jobs." +marker = "python_version >= \"3.5\"" +name = "joblib" +optional = false +python-versions = "*" +version = "0.14.1" + +[[package]] +category = "dev" +description = "Lightweight pipelining: using Python functions as pipeline jobs." +marker = "python_version >= \"3.5\"" +name = "joblib" +optional = false +python-versions = ">=3.6" +version = "0.16.0" + +[[package]] +category = "dev" +description = "Store and access your passwords safely." +name = "keyring" +optional = false +python-versions = ">=3.6" +version = "21.2.1" + +[package.dependencies] +SecretStorage = ">=3" +jeepney = ">=0.4.2" +pywin32-ctypes = "<0.1.0 || >0.1.0,<0.1.1 || >0.1.1" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = "*" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-black (>=0.3.7)", "pytest-cov"] + +[[package]] +category = "dev" +description = "Python LiveReload is an awesome tool for web developers" +marker = "python_version >= \"3.5\"" +name = "livereload" +optional = false +python-versions = "*" +version = "2.6.2" + +[package.dependencies] +six = "*" + +[package.dependencies.tornado] +python = ">=2.8" +version = "*" + +[[package]] +category = "dev" +description = "A Python implementation of Lunr.js" +marker = "python_version >= \"3.5\"" +name = "lunr" +optional = false +python-versions = "*" +version = "0.5.8" + +[package.dependencies] +future = ">=0.16.0" +six = ">=1.11.0" + +[package.dependencies.nltk] +optional = true +python = ">=2.8" +version = ">=3.2.5" + +[package.extras] +languages = ["nltk (>=3.2.5,<3.5)", "nltk (>=3.2.5)"] + +[[package]] +category = "dev" +description = "Python implementation of Markdown." +marker = "python_version >= \"3.5\"" +name = "markdown" +optional = false +python-versions = ">=3.5" +version = "3.2.2" + +[package.dependencies] +[package.dependencies.importlib-metadata] +python = "<3.8" +version = "*" + +[package.extras] +testing = ["coverage", "pyyaml"] + [[package]] category = "dev" description = "Safely add untrusted strings to HTML/XML markup." -marker = "python_version < \"3\" or python_version >= \"3\"" +marker = "python_version >= \"3.5\"" name = "markupsafe" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" @@ -400,6 +493,68 @@ optional = false python-versions = "*" version = "0.6.1" +[[package]] +category = "dev" +description = "Fork of mkapi since poetry fails with git + python verson constraint" +marker = "python_version >= \"3.7\"" +name = "mkapi-git-pull" +optional = false +python-versions = ">=3.7" +version = "1.0.12.post1" + +[package.dependencies] +jinja2 = "*" +markdown = "*" + +[[package]] +category = "dev" +description = "Project documentation with Markdown." +marker = "python_version >= \"3.5\"" +name = "mkdocs" +optional = false +python-versions = ">=3.5" +version = "1.1.2" + +[package.dependencies] +Jinja2 = ">=2.10.1" +Markdown = ">=3.2.1" +PyYAML = ">=3.10" +click = ">=3.3" +livereload = ">=2.5.1" +tornado = ">=5.0" + +[package.dependencies.lunr] +extras = ["languages"] +version = "0.5.8" + +[[package]] +category = "dev" +description = "A Material Design theme for MkDocs" +marker = "python_version >= \"3.5\"" +name = "mkdocs-material" +optional = false +python-versions = "*" +version = "5.5.1" + +[package.dependencies] +Pygments = ">=2.4" +markdown = ">=3.2" +mkdocs = ">=1.1" +mkdocs-material-extensions = ">=1.0" +pymdown-extensions = ">=7.0" + +[[package]] +category = "dev" +description = "Extension pack for Python Markdown." +marker = "python_version >= \"3.5\"" +name = "mkdocs-material-extensions" +optional = false +python-versions = ">=3.5" +version = "1.0" + +[package.dependencies] +mkdocs-material = ">=5.0.0" + [[package]] category = "dev" description = "Rolling backport of unittest.mock for all Pythons" @@ -441,6 +596,29 @@ optional = false python-versions = ">=3.5" version = "8.4.0" +[[package]] +category = "dev" +description = "Natural Language Toolkit" +marker = "python_version >= \"3.5\"" +name = "nltk" +optional = false +python-versions = "*" +version = "3.5" + +[package.dependencies] +click = "*" +joblib = "*" +regex = "*" +tqdm = "*" + +[package.extras] +all = ["requests", "numpy", "python-crfsuite", "scikit-learn", "twython", "pyparsing", "scipy", "matplotlib", "gensim"] +corenlp = ["requests"] +machine_learning = ["gensim", "numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + [[package]] category = "dev" description = "Core utilities for Python packages" @@ -490,14 +668,6 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" version = "0.8.0" -[[package]] -category = "dev" -description = "Python Build Reasonableness" -name = "pbr" -optional = false -python-versions = "*" -version = "5.4.5" - [[package]] category = "dev" description = "Query metadatdata from sdists / bdists / installed packages." @@ -541,6 +711,15 @@ optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" version = "2.6.0" +[[package]] +category = "dev" +description = "C parser in Python" +marker = "sys_platform == \"linux\"" +name = "pycparser" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.20" + [[package]] category = "dev" description = "passive checker of Python programs" @@ -565,6 +744,18 @@ optional = false python-versions = ">=3.5" version = "2.6.1" +[[package]] +category = "dev" +description = "Extension pack for Python Markdown." +marker = "python_version >= \"3.5\"" +name = "pymdown-extensions" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +version = "7.1" + +[package.dependencies] +Markdown = ">=3.2" + [[package]] category = "dev" description = "Python parsing module" @@ -736,12 +927,21 @@ setuptools = ">=40.0" [[package]] category = "dev" -description = "World timezone definitions, modern and historical" -marker = "python_version < \"3\" or python_version >= \"3\"" -name = "pytz" +description = "" +marker = "sys_platform == \"win32\"" +name = "pywin32-ctypes" optional = false python-versions = "*" -version = "2020.1" +version = "0.2.0" + +[[package]] +category = "dev" +description = "YAML parser and emitter for Python" +marker = "python_version >= \"3.5\"" +name = "pyyaml" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "5.3.1" [[package]] category = "dev" @@ -763,7 +963,7 @@ md = ["cmarkgfm (>=0.2.0)"] [[package]] category = "dev" description = "Alternative regular expression module, to replace re." -marker = "python_version >= \"3.6\" and python_version < \"4.0\"" +marker = "python_version >= \"3.5\" or python_version >= \"3.6\" and python_version < \"4.0\"" name = "regex" optional = false python-versions = "*" @@ -800,14 +1000,14 @@ requests = ">=2.0.1,<3.0.0" [[package]] category = "dev" -description = "reStructuredText linter" -name = "restructuredtext-lint" +description = "Validating URI References per RFC 3986" +name = "rfc3986" optional = false python-versions = "*" -version = "1.3.1" +version = "1.4.0" -[package.dependencies] -docutils = ">=0.11,<1.0" +[package.extras] +idna2008 = ["idna"] [[package]] category = "dev" @@ -820,201 +1020,41 @@ version = "1.10.0" [[package]] category = "dev" -description = "Python 2 and 3 compatibility utilities" -name = "six" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -version = "1.15.0" - -[[package]] -category = "dev" -description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms." -name = "snowballstemmer" -optional = false -python-versions = "*" -version = "2.0.0" - -[[package]] -category = "dev" -description = "Python documentation generator" -name = "sphinx" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.8.5" - -[package.dependencies] -Jinja2 = ">=2.3" -Pygments = ">=2.0" -alabaster = ">=0.7,<0.8" -babel = ">=1.3,<2.0 || >2.0" -colorama = ">=0.3.5" -docutils = ">=0.11" -imagesize = "*" -packaging = "*" -requests = ">=2.0.0" -setuptools = "*" -six = ">=1.5" -snowballstemmer = ">=1.1" -sphinxcontrib-websupport = "*" - -[package.dependencies.typing] -python = "<3.5" -version = "*" - -[package.extras] -test = ["mock", "pytest", "pytest-cov", "html5lib", "flake8 (>=3.5.0)", "flake8-import-order", "enum34", "mypy", "typed-ast"] -websupport = ["sqlalchemy (>=0.9)", "whoosh (>=2.0)"] - -[[package]] -category = "dev" -description = "Python documentation generator" -name = "sphinx" +description = "Python bindings to FreeDesktop.org Secret Service API" +marker = "sys_platform == \"linux\"" +name = "secretstorage" optional = false python-versions = ">=3.5" version = "3.1.2" [package.dependencies] -Jinja2 = ">=2.3" -Pygments = ">=2.0" -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = ">=0.3.5" -docutils = ">=0.12" -imagesize = "*" -packaging = "*" -requests = ">=2.5.0" -setuptools = "*" -snowballstemmer = ">=1.1" -sphinxcontrib-applehelp = "*" -sphinxcontrib-devhelp = "*" -sphinxcontrib-htmlhelp = "*" -sphinxcontrib-jsmath = "*" -sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = "*" - -[package.extras] -docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.780)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] - -[[package]] -category = "dev" -description = "A Sphinx extension for linking to your project's issue tracker" -name = "sphinx-issues" -optional = false -python-versions = "*" -version = "1.2.0" - -[package.dependencies] -sphinx = "*" - -[package.extras] -dev = ["pytest", "flake8 (3.6.0)", "pre-commit (1.13.0)", "tox", "mock", "flake8-bugbear (18.8.0)"] -lint = ["flake8 (3.6.0)", "pre-commit (1.13.0)", "flake8-bugbear (18.8.0)"] -tests = ["pytest", "mock"] +cryptography = "*" +jeepney = ">=0.4.2" [[package]] category = "dev" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -name = "sphinxcontrib-applehelp" -optional = false -python-versions = ">=3.5" -version = "1.0.2" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -category = "dev" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -name = "sphinxcontrib-devhelp" -optional = false -python-versions = ">=3.5" -version = "1.0.2" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -category = "dev" -description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -name = "sphinxcontrib-htmlhelp" -optional = false -python-versions = ">=3.5" -version = "1.0.3" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest", "html5lib"] - -[[package]] -category = "dev" -description = "A sphinx extension which renders display math in HTML via JavaScript" -name = "sphinxcontrib-jsmath" -optional = false -python-versions = ">=3.5" -version = "1.0.1" - -[package.extras] -test = ["pytest", "flake8", "mypy"] - -[[package]] -category = "dev" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -name = "sphinxcontrib-qthelp" -optional = false -python-versions = ">=3.5" -version = "1.0.3" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -category = "dev" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -name = "sphinxcontrib-serializinghtml" -optional = false -python-versions = ">=3.5" -version = "1.1.4" - -[package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] -test = ["pytest"] - -[[package]] -category = "dev" -description = "Sphinx API for Web Apps" -marker = "python_version < \"3\"" -name = "sphinxcontrib-websupport" +description = "Python 2 and 3 compatibility utilities" +name = "six" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -version = "1.1.2" - -[package.extras] -test = ["pytest", "mock"] +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.15.0" [[package]] category = "dev" -description = "Manage dynamic plugins for Python applications" -name = "stevedore" +description = "Python Library for Tom's Obvious, Minimal Language" +name = "toml" optional = false python-versions = "*" -version = "1.32.0" - -[package.dependencies] -pbr = ">=2.0.0,<2.1.0 || >2.1.0" -six = ">=1.10.0" +version = "0.10.1" [[package]] category = "dev" -description = "Python Library for Tom's Obvious, Minimal Language" -name = "toml" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +marker = "python_version >= \"3.5\"" +name = "tornado" optional = false -python-versions = "*" -version = "0.10.1" +python-versions = ">= 3.5" +version = "6.0.4" [[package]] category = "dev" @@ -1047,6 +1087,29 @@ tqdm = ">=4.14" keyring = ["keyring"] with-blake2 = ["pyblake2"] +[[package]] +category = "dev" +description = "Collection of utilities for publishing packages on PyPI" +name = "twine" +optional = false +python-versions = ">=3.6" +version = "3.2.0" + +[package.dependencies] +colorama = ">=0.4.3" +keyring = ">=15.1" +pkginfo = ">=1.4.2" +readme-renderer = ">=21.0" +requests = ">=2.20" +requests-toolbelt = ">=0.8.0,<0.9.0 || >0.9.0" +rfc3986 = ">=1.4.0" +setuptools = ">=0.7.0" +tqdm = ">=4.14" + +[package.dependencies.importlib-metadata] +python = "<3.8" +version = "*" + [[package]] category = "dev" description = "a fork of Python 2 and 3 ast modules with type comment support" @@ -1103,7 +1166,7 @@ version = "0.5.1" [[package]] category = "dev" description = "Backport of pathlib-compatible object wrapper for zip files" -marker = "python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\")" +marker = "python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\") or python_version >= \"3.5\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\")" name = "zipp" optional = false python-versions = ">=2.7" @@ -1118,19 +1181,25 @@ version = "*" docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] testing = ["pathlib2", "unittest2", "jaraco.itertools", "func-timeout"] +[[package]] +category = "dev" +description = "Backport of pathlib-compatible object wrapper for zip files" +marker = "python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\") or python_version >= \"3.5\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\") or python_version >= \"3.7\" and python_version < \"3.8\" and (python_version < \"3.8\" or python_version >= \"3\" and python_version < \"3.8\" or python_version >= \"3.5\" and python_version < \"3.8\" or python_version >= \"3.7\" and python_version < \"3.8\")" +name = "zipp" +optional = false +python-versions = ">=3.6" +version = "3.1.0" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"] +testing = ["jaraco.itertools", "func-timeout"] + [metadata] -content-hash = "309df1aced75306f5132362539af7253404a0f18595d8fab5ba9ca91a3993c7a" +content-hash = "de585c376ed01e73efa6774d7dd539ad3cd3be1ab0c1cf0abb0361293ee37368" lock-version = "1.0" python-versions = "~2.7 || ^3.5" [metadata.files] -alabaster = [ - {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, - {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, -] -alagitpull = [ - {file = "alagitpull-0.0.23.tar.gz", hash = "sha256:a56c1672f17eb3bb55c63f93fc71e7914e0a7fa0707ceefbf8d5e422bf4a9f8a"}, -] appdirs = [ {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, @@ -1143,10 +1212,6 @@ attrs = [ {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"}, {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"}, ] -babel = [ - {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"}, - {file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"}, -] "backports.functools-lru-cache" = [ {file = "backports.functools_lru_cache-1.6.1-py2.py3-none-any.whl", hash = "sha256:0bada4c2f8a43d533e4ecb7a12214d9420e66eb206d54bf2d682581ca4b80848"}, {file = "backports.functools_lru_cache-1.6.1.tar.gz", hash = "sha256:8fde5f188da2d593bd5bc0be98d9abc46c95bb8a9dde93429570192ee6cc2d4a"}, @@ -1163,6 +1228,36 @@ certifi = [ {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"}, {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"}, ] +cffi = [ + {file = "cffi-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:66dd45eb9530e3dde8f7c009f84568bc7cac489b93d04ac86e3111fb46e470c2"}, + {file = "cffi-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:4f53e4128c81ca3212ff4cf097c797ab44646a40b42ec02a891155cd7a2ba4d8"}, + {file = "cffi-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:833401b15de1bb92791d7b6fb353d4af60dc688eaa521bd97203dcd2d124a7c1"}, + {file = "cffi-1.14.1-cp27-cp27m-win32.whl", hash = "sha256:26f33e8f6a70c255767e3c3f957ccafc7f1f706b966e110b855bfe944511f1f9"}, + {file = "cffi-1.14.1-cp27-cp27m-win_amd64.whl", hash = "sha256:b87dfa9f10a470eee7f24234a37d1d5f51e5f5fa9eeffda7c282e2b8f5162eb1"}, + {file = "cffi-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:effd2ba52cee4ceff1a77f20d2a9f9bf8d50353c854a282b8760ac15b9833168"}, + {file = "cffi-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bac0d6f7728a9cc3c1e06d4fcbac12aaa70e9379b3025b27ec1226f0e2d404cf"}, + {file = "cffi-1.14.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d6033b4ffa34ef70f0b8086fd4c3df4bf801fee485a8a7d4519399818351aa8e"}, + {file = "cffi-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8416ed88ddc057bab0526d4e4e9f3660f614ac2394b5e019a628cdfff3733849"}, + {file = "cffi-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:892daa86384994fdf4856cb43c93f40cbe80f7f95bb5da94971b39c7f54b3a9c"}, + {file = "cffi-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:c991112622baee0ae4d55c008380c32ecfd0ad417bcd0417ba432e6ba7328caa"}, + {file = "cffi-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fcf32bf76dc25e30ed793145a57426064520890d7c02866eb93d3e4abe516948"}, + {file = "cffi-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f960375e9823ae6a07072ff7f8a85954e5a6434f97869f50d0e41649a1c8144f"}, + {file = "cffi-1.14.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:a6d28e7f14ecf3b2ad67c4f106841218c8ab12a0683b1528534a6c87d2307af3"}, + {file = "cffi-1.14.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:cda422d54ee7905bfc53ee6915ab68fe7b230cacf581110df4272ee10462aadc"}, + {file = "cffi-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:4a03416915b82b81af5502459a8a9dd62a3c299b295dcdf470877cb948d655f2"}, + {file = "cffi-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:4ce1e995aeecf7cc32380bc11598bfdfa017d592259d5da00fc7ded11e61d022"}, + {file = "cffi-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e23cb7f1d8e0f93addf0cae3c5b6f00324cccb4a7949ee558d7b6ca973ab8ae9"}, + {file = "cffi-1.14.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ddff0b2bd7edcc8c82d1adde6dbbf5e60d57ce985402541cd2985c27f7bec2a0"}, + {file = "cffi-1.14.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f90c2267101010de42f7273c94a1f026e56cbc043f9330acd8a80e64300aba33"}, + {file = "cffi-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:3cd2c044517f38d1b577f05927fb9729d3396f1d44d0c659a445599e79519792"}, + {file = "cffi-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fa72a52a906425416f41738728268072d5acfd48cbe7796af07a923236bcf96"}, + {file = "cffi-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:267adcf6e68d77ba154334a3e4fc921b8e63cbb38ca00d33d40655d4228502bc"}, + {file = "cffi-1.14.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d3148b6ba3923c5850ea197a91a42683f946dba7e8eb82dfa211ab7e708de939"}, + {file = "cffi-1.14.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:98be759efdb5e5fa161e46d404f4e0ce388e72fbf7d9baf010aff16689e22abe"}, + {file = "cffi-1.14.1-cp38-cp38-win32.whl", hash = "sha256:6923d077d9ae9e8bacbdb1c07ae78405a9306c8fd1af13bfa06ca891095eb995"}, + {file = "cffi-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:b1d6ebc891607e71fd9da71688fcf332a6630b7f5b7f5549e6e631821c0e5d90"}, + {file = "cffi-1.14.1.tar.gz", hash = "sha256:b2a2b0d276a136146e012154baefaea2758ef1f56ae9f4e01c612b0831e0bd2f"}, +] chardet = [ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, @@ -1224,9 +1319,26 @@ coverage = [ {file = "coverage-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:b8f58c7db64d8f27078cbf2a4391af6aa4e4767cc08b37555c4ae064b8558d9b"}, {file = "coverage-5.2.1.tar.gz", hash = "sha256:a34cb28e0747ea15e82d13e14de606747e9e484fb28d63c999483f5d5188e89b"}, ] -doc8 = [ - {file = "doc8-0.8.1-py2.py3-none-any.whl", hash = "sha256:4d58a5c8c56cedd2b2c9d6e3153be5d956cf72f6051128f0f2255c66227df721"}, - {file = "doc8-0.8.1.tar.gz", hash = "sha256:4d1df12598807cf08ffa9a1d5ef42d229ee0de42519da01b768ff27211082c12"}, +cryptography = [ + {file = "cryptography-3.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ab49edd5bea8d8b39a44b3db618e4783ef84c19c8b47286bf05dfdb3efb01c83"}, + {file = "cryptography-3.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:124af7255ffc8e964d9ff26971b3a6153e1a8a220b9a685dc407976ecb27a06a"}, + {file = "cryptography-3.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:51e40123083d2f946794f9fe4adeeee2922b581fa3602128ce85ff813d85b81f"}, + {file = "cryptography-3.0-cp27-cp27m-win32.whl", hash = "sha256:dea0ba7fe6f9461d244679efa968d215ea1f989b9c1957d7f10c21e5c7c09ad6"}, + {file = "cryptography-3.0-cp27-cp27m-win_amd64.whl", hash = "sha256:8ecf9400d0893836ff41b6f977a33972145a855b6efeb605b49ee273c5e6469f"}, + {file = "cryptography-3.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0c608ff4d4adad9e39b5057de43657515c7da1ccb1807c3a27d4cf31fc923b4b"}, + {file = "cryptography-3.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:bec7568c6970b865f2bcebbe84d547c52bb2abadf74cefce396ba07571109c67"}, + {file = "cryptography-3.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:0cbfed8ea74631fe4de00630f4bb592dad564d57f73150d6f6796a24e76c76cd"}, + {file = "cryptography-3.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:a09fd9c1cca9a46b6ad4bea0a1f86ab1de3c0c932364dbcf9a6c2a5eeb44fa77"}, + {file = "cryptography-3.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:ce82cc06588e5cbc2a7df3c8a9c778f2cb722f56835a23a68b5a7264726bb00c"}, + {file = "cryptography-3.0-cp35-cp35m-win32.whl", hash = "sha256:9367d00e14dee8d02134c6c9524bb4bd39d4c162456343d07191e2a0b5ec8b3b"}, + {file = "cryptography-3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:384d7c681b1ab904fff3400a6909261cae1d0939cc483a68bdedab282fb89a07"}, + {file = "cryptography-3.0-cp36-cp36m-win32.whl", hash = "sha256:4d355f2aee4a29063c10164b032d9fa8a82e2c30768737a2fd56d256146ad559"}, + {file = "cryptography-3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:45741f5499150593178fc98d2c1a9c6722df88b99c821ad6ae298eff0ba1ae71"}, + {file = "cryptography-3.0-cp37-cp37m-win32.whl", hash = "sha256:8ecef21ac982aa78309bb6f092d1677812927e8b5ef204a10c326fc29f1367e2"}, + {file = "cryptography-3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:4b9303507254ccb1181d1803a2080a798910ba89b1a3c9f53639885c90f7a756"}, + {file = "cryptography-3.0-cp38-cp38-win32.whl", hash = "sha256:8713ddb888119b0d2a1462357d5946b8911be01ddbf31451e1d07eaa5077a261"}, + {file = "cryptography-3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bea0b0468f89cdea625bb3f692cd7a4222d80a6bdafd6fb923963f2b9da0e15f"}, + {file = "cryptography-3.0.tar.gz", hash = "sha256:8e924dbc025206e97756e8903039662aa58aa9ba357d8e1d8fc29e3092322053"}, ] docutils = [ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"}, @@ -1249,6 +1361,9 @@ functools32 = [ {file = "functools32-3.2.3-2.tar.gz", hash = "sha256:f6253dfbe0538ad2e387bd8fdfd9293c925d63553f5813c4e587745416501e6d"}, {file = "functools32-3.2.3-2.zip", hash = "sha256:89d824aa6c358c421a234d7f9ee0bd75933a67c29588ce50aaa3acdf4d403fa0"}, ] +future = [ + {file = "future-0.18.2.tar.gz", hash = "sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d"}, +] futures = [ {file = "futures-3.3.0-py2-none-any.whl", hash = "sha256:49b3f5b064b6e3afc3316421a3f25f66c137ae88f068abbf72830170033c5e16"}, {file = "futures-3.3.0.tar.gz", hash = "sha256:7e033af76a5e35f58e56da7a91e687706faf4e7bdfb2cbc3f2cca6b9bcda9794"}, @@ -1257,10 +1372,6 @@ idna = [ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, ] -imagesize = [ - {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, - {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, -] importlib-metadata = [ {file = "importlib_metadata-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"}, {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"}, @@ -1275,10 +1386,35 @@ isort = [ {file = "isort-5.2.2-py3-none-any.whl", hash = "sha256:aea484023188ef1c38256dd24afa96e914adafe3a911a1786800a74e433006d1"}, {file = "isort-5.2.2.tar.gz", hash = "sha256:96b27045e3187b9bdde001143b79f9b10a462f372bff7062302818013b6c86f3"}, ] +jeepney = [ + {file = "jeepney-0.4.3-py3-none-any.whl", hash = "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"}, + {file = "jeepney-0.4.3.tar.gz", hash = "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e"}, +] jinja2 = [ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, ] +joblib = [ + {file = "joblib-0.14.1-py2.py3-none-any.whl", hash = "sha256:bdb4fd9b72915ffb49fde2229ce482dd7ae79d842ed8c2b4c932441495af1403"}, + {file = "joblib-0.14.1.tar.gz", hash = "sha256:0630eea4f5664c463f23fbf5dcfc54a2bc6168902719fa8e19daf033022786c8"}, + {file = "joblib-0.16.0-py3-none-any.whl", hash = "sha256:d348c5d4ae31496b2aa060d6d9b787864dd204f9480baaa52d18850cb43e9f49"}, + {file = "joblib-0.16.0.tar.gz", hash = "sha256:8f52bf24c64b608bf0b2563e0e47d6fcf516abc8cfafe10cfd98ad66d94f92d6"}, +] +keyring = [ + {file = "keyring-21.2.1-py3-none-any.whl", hash = "sha256:3401234209015144a5d75701e71cb47239e552b0882313e9f51e8976f9e27843"}, + {file = "keyring-21.2.1.tar.gz", hash = "sha256:c53e0e5ccde3ad34284a40ce7976b5b3a3d6de70344c3f8ee44364cc340976ec"}, +] +livereload = [ + {file = "livereload-2.6.2.tar.gz", hash = "sha256:d1eddcb5c5eb8d2ca1fa1f750e580da624c0f7fcb734aa5780dc81b7dcbd89be"}, +] +lunr = [ + {file = "lunr-0.5.8-py2.py3-none-any.whl", hash = "sha256:aab3f489c4d4fab4c1294a257a30fec397db56f0a50273218ccc3efdbf01d6ca"}, + {file = "lunr-0.5.8.tar.gz", hash = "sha256:c4fb063b98eff775dd638b3df380008ae85e6cb1d1a24d1cd81a10ef6391c26e"}, +] +markdown = [ + {file = "Markdown-3.2.2-py3-none-any.whl", hash = "sha256:c467cd6233885534bf0fe96e62e3cf46cfc1605112356c4f9981512b8174de59"}, + {file = "Markdown-3.2.2.tar.gz", hash = "sha256:1fafe3f1ecabfb514a5285fca634a53c1b32a81cb0feb154264d55bf2ff22c17"}, +] markupsafe = [ {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, @@ -1318,6 +1454,21 @@ mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] +mkapi-git-pull = [ + {file = "mkapi-git-pull-1.0.12.post1.tar.gz", hash = "sha256:eba245518808a67ba0e6068269d68224ccff324460ecf179cacae8c2122c3ef4"}, +] +mkdocs = [ + {file = "mkdocs-1.1.2-py3-none-any.whl", hash = "sha256:096f52ff52c02c7e90332d2e53da862fde5c062086e1b5356a6e392d5d60f5e9"}, + {file = "mkdocs-1.1.2.tar.gz", hash = "sha256:f0b61e5402b99d7789efa032c7a74c90a20220a9c81749da06dbfbcbd52ffb39"}, +] +mkdocs-material = [ + {file = "mkdocs-material-5.5.1.tar.gz", hash = "sha256:7a0dd451523008d0670f8f78037822f86f868f08c0532b1add4367252bb54133"}, + {file = "mkdocs_material-5.5.1-py2.py3-none-any.whl", hash = "sha256:aee5689f87d687c75962da9d4f07eef48664c22c176b6514bd18e4798ac2ca4f"}, +] +mkdocs-material-extensions = [ + {file = "mkdocs-material-extensions-1.0.tar.gz", hash = "sha256:17d7491e189af75700310b7ec33c6c48a22060b8b445001deca040cb60471cde"}, + {file = "mkdocs_material_extensions-1.0-py3-none-any.whl", hash = "sha256:09569c3694b5acc1e8334c9730e52b4bcde65fc9d613cc20e49af131ef1a9ca0"}, +] mock = [ {file = "mock-3.0.5-py2.py3-none-any.whl", hash = "sha256:d157e52d4e5b938c550f39eb2fd15610db062441a9c2747d3dbfa9298211d0f8"}, {file = "mock-3.0.5.tar.gz", hash = "sha256:83657d894c90d5681d62155c82bda9c1187827525880eda8ff5df4ec813437c3"}, @@ -1329,6 +1480,9 @@ more-itertools = [ {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"}, {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"}, ] +nltk = [ + {file = "nltk-3.5.zip", hash = "sha256:845365449cd8c5f9731f7cb9f8bd6fd0767553b9d53af9eb1b3abf7700936b35"}, +] packaging = [ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, @@ -1343,10 +1497,6 @@ pathspec = [ {file = "pathspec-0.8.0-py2.py3-none-any.whl", hash = "sha256:7d91249d21749788d07a2d0f94147accd8f845507400749ea19c1ec9054a12b0"}, {file = "pathspec-0.8.0.tar.gz", hash = "sha256:da45173eb3a6f2a5a487efba21f050af2b41948be6ab52b6a1e3ff22bb8b7061"}, ] -pbr = [ - {file = "pbr-5.4.5-py2.py3-none-any.whl", hash = "sha256:579170e23f8e0c2f24b0de612f71f648eccb79fb1322c814ae6b3c07b5ba23e8"}, - {file = "pbr-5.4.5.tar.gz", hash = "sha256:07f558fece33b05caf857474a366dfcc00562bca13dd8b47b2b3e22d9f9bf55c"}, -] pkginfo = [ {file = "pkginfo-1.5.0.1-py2.py3-none-any.whl", hash = "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"}, {file = "pkginfo-1.5.0.1.tar.gz", hash = "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb"}, @@ -1363,6 +1513,10 @@ pycodestyle = [ {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, ] +pycparser = [ + {file = "pycparser-2.20-py2.py3-none-any.whl", hash = "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"}, + {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, +] pyflakes = [ {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, @@ -1373,6 +1527,10 @@ pygments = [ {file = "Pygments-2.6.1-py3-none-any.whl", hash = "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"}, {file = "Pygments-2.6.1.tar.gz", hash = "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44"}, ] +pymdown-extensions = [ + {file = "pymdown-extensions-7.1.tar.gz", hash = "sha256:5bf93d1ccd8281948cd7c559eb363e59b179b5373478e8a7195cf4b78e3c11b6"}, + {file = "pymdown_extensions-7.1-py2.py3-none-any.whl", hash = "sha256:8f415b21ee86d80bb2c3676f4478b274d0a8ccb13af672a4c86b9ffd22bd005c"}, +] pyparsing = [ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, @@ -1401,9 +1559,22 @@ pytest-rerunfailures = [ {file = "pytest-rerunfailures-9.0.tar.gz", hash = "sha256:895ac2a6486c0da0468ae31768b818d9f3f7fceddef110970c7dbb09e7b4b8e4"}, {file = "pytest_rerunfailures-9.0-py3-none-any.whl", hash = "sha256:f215f2b6da866f01df2e0d12c25687d7f6f0182cefed541afc442230d2d94e6b"}, ] -pytz = [ - {file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"}, - {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"}, +pywin32-ctypes = [ + {file = "pywin32-ctypes-0.2.0.tar.gz", hash = "sha256:24ffc3b341d457d48e8922352130cf2644024a4ff09762a2261fd34c36ee5942"}, + {file = "pywin32_ctypes-0.2.0-py2.py3-none-any.whl", hash = "sha256:9dc2d991b3479cc2df15930958b674a48a227d5361d413827a4cfd0b5876fc98"}, +] +pyyaml = [ + {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, + {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, + {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, + {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, + {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, + {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, + {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, + {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, ] readme-renderer = [ {file = "readme_renderer-26.0-py2.py3-none-any.whl", hash = "sha256:cc4957a803106e820d05d14f71033092537a22daa4f406dfbdd61177e0936376"}, @@ -1440,8 +1611,9 @@ requests-toolbelt = [ {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, ] -restructuredtext-lint = [ - {file = "restructuredtext_lint-1.3.1.tar.gz", hash = "sha256:470e53b64817211a42805c3a104d2216f6f5834b22fe7adb637d1de4d6501fb8"}, +rfc3986 = [ + {file = "rfc3986-1.4.0-py2.py3-none-any.whl", hash = "sha256:af9147e9aceda37c91a05f4deb128d4b4b49d6b199775fd2d2927768abdc8f50"}, + {file = "rfc3986-1.4.0.tar.gz", hash = "sha256:112398da31a3344dc25dbf477d8df6cb34f9278a94fee2625d89e4514be8bb9d"}, ] scandir = [ {file = "scandir-1.10.0-cp27-cp27m-win32.whl", hash = "sha256:92c85ac42f41ffdc35b6da57ed991575bdbe69db895507af88b9f499b701c188"}, @@ -1456,60 +1628,29 @@ scandir = [ {file = "scandir-1.10.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b24086f2375c4a094a6b51e78b4cf7ca16c721dcee2eddd7aa6494b42d6d519d"}, {file = "scandir-1.10.0.tar.gz", hash = "sha256:4d4631f6062e658e9007ab3149a9b914f3548cb38bfb021c64f39a025ce578ae"}, ] +secretstorage = [ + {file = "SecretStorage-3.1.2-py3-none-any.whl", hash = "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"}, + {file = "SecretStorage-3.1.2.tar.gz", hash = "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6"}, +] six = [ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, ] -snowballstemmer = [ - {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, - {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, -] -sphinx = [ - {file = "Sphinx-1.8.5-py2.py3-none-any.whl", hash = "sha256:9f3e17c64b34afc653d7c5ec95766e03043cc6d80b0de224f59b6b6e19d37c3c"}, - {file = "Sphinx-1.8.5.tar.gz", hash = "sha256:c7658aab75c920288a8cf6f09f244c6cfdae30d82d803ac1634d9f223a80ca08"}, - {file = "Sphinx-3.1.2-py3-none-any.whl", hash = "sha256:97dbf2e31fc5684bb805104b8ad34434ed70e6c588f6896991b2fdfd2bef8c00"}, - {file = "Sphinx-3.1.2.tar.gz", hash = "sha256:b9daeb9b39aa1ffefc2809b43604109825300300b987a24f45976c001ba1a8fd"}, -] -sphinx-issues = [ - {file = "sphinx-issues-1.2.0.tar.gz", hash = "sha256:845294736c7ac4c09c706f13431f709e1164037cbb00f6bf623ae16eccf509f3"}, - {file = "sphinx_issues-1.2.0-py2.py3-none-any.whl", hash = "sha256:1208e1869742b7800a45b3c47ab987b87b2ad2024cbc36e0106e8bba3549dd22"}, -] -sphinxcontrib-applehelp = [ - {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, - {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, -] -sphinxcontrib-devhelp = [ - {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, - {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, -] -sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-1.0.3.tar.gz", hash = "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"}, - {file = "sphinxcontrib_htmlhelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f"}, -] -sphinxcontrib-jsmath = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] -sphinxcontrib-qthelp = [ - {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, - {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, -] -sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.4.tar.gz", hash = "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc"}, - {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"}, -] -sphinxcontrib-websupport = [ - {file = "sphinxcontrib-websupport-1.1.2.tar.gz", hash = "sha256:1501befb0fdf1d1c29a800fdbf4ef5dc5369377300ddbdd16d2cd40e54c6eefc"}, - {file = "sphinxcontrib_websupport-1.1.2-py2.py3-none-any.whl", hash = "sha256:e02f717baf02d0b6c3dd62cf81232ffca4c9d5c331e03766982e3ff9f1d2bc3f"}, -] -stevedore = [ - {file = "stevedore-1.32.0-py2.py3-none-any.whl", hash = "sha256:a4e7dc759fb0f2e3e2f7d8ffe2358c19d45b9b8297f393ef1256858d82f69c9b"}, - {file = "stevedore-1.32.0.tar.gz", hash = "sha256:18afaf1d623af5950cc0f7e75e70f917784c73b652a34a12d90b309451b5500b"}, -] toml = [ {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"}, {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"}, ] +tornado = [ + {file = "tornado-6.0.4-cp35-cp35m-win32.whl", hash = "sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d"}, + {file = "tornado-6.0.4-cp35-cp35m-win_amd64.whl", hash = "sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740"}, + {file = "tornado-6.0.4-cp36-cp36m-win32.whl", hash = "sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673"}, + {file = "tornado-6.0.4-cp36-cp36m-win_amd64.whl", hash = "sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a"}, + {file = "tornado-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6"}, + {file = "tornado-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b"}, + {file = "tornado-6.0.4-cp38-cp38-win32.whl", hash = "sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52"}, + {file = "tornado-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9"}, + {file = "tornado-6.0.4.tar.gz", hash = "sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc"}, +] tqdm = [ {file = "tqdm-4.48.0-py2.py3-none-any.whl", hash = "sha256:fcb7cb5b729b60a27f300b15c1ffd4744f080fb483b88f31dc8654b082cc8ea5"}, {file = "tqdm-4.48.0.tar.gz", hash = "sha256:6baa75a88582b1db6d34ce4690da5501d2a1cb65c34664840a456b2c9f794d29"}, @@ -1517,6 +1658,8 @@ tqdm = [ twine = [ {file = "twine-1.15.0-py2.py3-none-any.whl", hash = "sha256:630fadd6e342e725930be6c696537e3f9ccc54331742b16245dab292a17d0460"}, {file = "twine-1.15.0.tar.gz", hash = "sha256:a3d22aab467b4682a22de4a422632e79d07eebd07ff2a7079effb13f8a693787"}, + {file = "twine-3.2.0-py3-none-any.whl", hash = "sha256:ba9ff477b8d6de0c89dd450e70b2185da190514e91c42cc62f96850025c10472"}, + {file = "twine-3.2.0.tar.gz", hash = "sha256:34352fd52ec3b9d29837e6072d5a2a7c6fe4290e97bba46bb8d478b5c598f7ab"}, ] typed-ast = [ {file = "typed_ast-1.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3"}, @@ -1560,4 +1703,6 @@ webencodings = [ zipp = [ {file = "zipp-1.2.0-py2.py3-none-any.whl", hash = "sha256:e0d9e63797e483a30d27e09fffd308c59a700d365ec34e93cc100844168bf921"}, {file = "zipp-1.2.0.tar.gz", hash = "sha256:c70410551488251b0fee67b460fb9a536af8d6f9f008ad10ac51f615b6a521b1"}, + {file = "zipp-3.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"}, + {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"}, ] diff --git a/pyproject.toml b/pyproject.toml index f53daea12..93537aa70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,12 @@ [tool.black] skip-string-normalization = true +[tool.portray.mkdocs.theme] +favicon = "art/favicon.ico" +logo = "art/libvcs.svg" +name = "material" +palette = {primary = "blue grey", accent = "pink"} + [tool.poetry] name = "libvcs" version = "0.4.4" @@ -12,10 +18,7 @@ authors = ["Tony Narlock "] python = "~2.7 || ^3.5" [tool.poetry.dev-dependencies] -alagitpull = "*" black = {version="==19.10b0", python="^3.6"} -doc8 = "*" -docutils = "*" flake8 = "*" isort = [ {version="<5", python="<3.6"}, @@ -27,11 +30,6 @@ pytest = [ ] pathlib2 = {version="<2.3.5", python="<3"} # Untangle pytest peer-dependency pytest-rerunfailures = "*" -sphinx = [ - {version="<2", python="<3"}, - {version="*", python=">=3"} -] -sphinx-issues = "*" twine = "*" codecov = "*" coverage = "*" @@ -43,3 +41,6 @@ pytest-mock = [ {version="<3.0.0", python="<3"}, {version="*", python=">=3"} ] +mkdocs = {version = "^1.1.2", extras = ["docs"], python = ">=3.5"} +mkdocs-material = {version = "^5.5.1", extras = ["docs"], python = ">=3.5"} +mkapi-git-pull = {version = "^1.0.12", extras = ["docs"], python = ">=3.7"} diff --git a/requirements/dev.txt b/requirements/dev.txt deleted file mode 100644 index 55161885b..000000000 --- a/requirements/dev.txt +++ /dev/null @@ -1,3 +0,0 @@ -flake8==3.7.7 -isort<=4.4;python_version<'3.6' -isort>=5;python_version>='3.6' diff --git a/setup.py b/setup.py index 5d8a10d35..896ec4171 100644 --- a/setup.py +++ b/setup.py @@ -13,7 +13,7 @@ with open('requirements/test.txt') as f: tests_reqs = [line for line in f.read().split('\n') if line] -readme = open('README.rst').read() +readme = open('README.md').read() history = open('CHANGES').read().replace('.. :changelog:', '')