Hello community,
here is the log from the commit of package python-librouteros for openSUSE:Factory checked in at 2020-12-21 10:23:55
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-librouteros (Old)
and /work/SRC/openSUSE:Factory/.python-librouteros.new.5145 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-librouteros"
Mon Dec 21 10:23:55 2020 rev:5 rq:857037 version:3.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-librouteros/python-librouteros.changes 2020-07-21 15:50:39.148315109 +0200
+++ /work/SRC/openSUSE:Factory/.python-librouteros.new.5145/python-librouteros.changes 2020-12-21 10:26:48.228210245 +0100
@@ -1,0 +2,6 @@
+Fri Dec 18 22:31:34 UTC 2020 - Martin Hauke
+
+- Update to version 3.1.0
+ * Add In operator
+
+-------------------------------------------------------------------
Old:
----
librouteros-3.0.2.tar.gz
New:
----
librouteros-3.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-librouteros.spec ++++++
--- /var/tmp/diff_new_pack.xPEUs4/_old 2020-12-21 10:26:48.752210839 +0100
+++ /var/tmp/diff_new_pack.xPEUs4/_new 2020-12-21 10:26:48.756210844 +0100
@@ -2,7 +2,7 @@
# spec file for package python-librouteros
#
# Copyright (c) 2020 SUSE LLC
-# Copyright (c) 2017-2019, Martin Hauke
+# Copyright (c) 2017-2020, Martin Hauke
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-librouteros
-Version: 3.0.2
+Version: 3.1.0
Release: 0
Summary: Python implementation of MikroTik RouterOS API
License: GPL-2.0-or-later
++++++ librouteros-3.0.2.tar.gz -> librouteros-3.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/.bumpversion.cfg new/librouteros-3.1.0/.bumpversion.cfg
--- old/librouteros-3.0.2/.bumpversion.cfg 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/.bumpversion.cfg 2020-12-17 23:52:59.000000000 +0100
@@ -1,5 +1,5 @@
[bumpversion]
-current_version = 3.0.2
+current_version = 3.1.0
commit = True
tag = True
tag_name = {new_version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/.gitattributes new/librouteros-3.1.0/.gitattributes
--- old/librouteros-3.0.2/.gitattributes 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/.gitattributes 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,3 @@
+images/routeros_6.33.3.qcow2 filter=lfs diff=lfs merge=lfs -text
+images/routeros_6.43rc21.qcow2 filter=lfs diff=lfs merge=lfs -text
+images/routeros_6.44.5.qcow2 filter=lfs diff=lfs merge=lfs -text
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/.github/workflows/ci.yml new/librouteros-3.1.0/.github/workflows/ci.yml
--- old/librouteros-3.0.2/.github/workflows/ci.yml 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/.github/workflows/ci.yml 2020-12-17 23:52:59.000000000 +0100
@@ -6,9 +6,11 @@
jobs:
build:
- runs-on: ubuntu-latest
- env:
- CI: yes
+ runs-on: ubuntu-20.04
+ container:
+ image: lukaszkostka/librouteros:${{ matrix.python-version }}
+ env:
+ CI: yes
strategy:
matrix:
python-version:
@@ -18,23 +20,8 @@
steps:
- name: Checkout
uses: actions/checkout@v2
-
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v1
with:
- python-version: ${{ matrix.python-version }}
-
- - name: Update apt
- run: sudo apt update
-
- - name: Install qemu
- run: >
- sudo apt-get install -yq --no-install-recommends
- qemu-system-i386
- qemu-utils
-
- - name: Install pipenv
- run: pip install pipenv
+ lfs: true
- name: Install package
run: pipenv --python python3 install
@@ -51,24 +38,15 @@
librouteros
tests
- - name: Download routeros images
- run: |
- wget --quiet netng.pl/routeros_test_images/routeros_6.33.3.qcow2 -O images/routeros_6.33.3.qcow2
- wget --quiet netng.pl/routeros_test_images/routeros_6.44.5.qcow2 -O images/routeros_6.44.5.qcow2
-
- name: Unit tests
run: pipenv run pytest tests/unit
- name: Integration tests
run: pipenv run pytest -n auto tests/integration
- - name: Package
- run: python setup.py sdist
- if: success()
-
- name: Publish package
+ run: ./upload.sh
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && matrix.python-version == '3.7' && success()
- uses: pypa/gh-action-pypi-publish@master
- with:
- user: __token__
- password: ${{ secrets.pypi_password }}
+ env:
+ TWINE_PASSWORD: ${{ secrets.pypi_password }}
+ TWINE_USERNAME: __token__
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/.gitignore new/librouteros-3.1.0/.gitignore
--- old/librouteros-3.0.2/.gitignore 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/.gitignore 2020-12-17 23:52:59.000000000 +0100
@@ -24,3 +24,5 @@
.pydevproject
.settings
.vscode
+
+Pipfile.lock
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/CHANGELOG.rst new/librouteros-3.1.0/CHANGELOG.rst
--- old/librouteros-3.0.2/CHANGELOG.rst 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/CHANGELOG.rst 2020-12-17 23:52:59.000000000 +0100
@@ -1,3 +1,8 @@
+3.1.0
+----------
+
+* Add In operator
+
3.0.2
----------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/Pipfile new/librouteros-3.1.0/Pipfile
--- old/librouteros-3.0.2/Pipfile 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/Pipfile 2020-12-17 23:52:59.000000000 +0100
@@ -6,7 +6,7 @@
[dev-packages]
[packages]
-librouteros = {editable = true,path = "."}
+librouteros = {editable = true, path = "."}
pytest = "*"
pylint = "*"
yapf = "*"
@@ -14,6 +14,3 @@
bumpversion = "*"
twine = "*"
pytest-xdist = "*"
-
-[requires]
-python_version = "3.7"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/Pipfile.lock new/librouteros-3.1.0/Pipfile.lock
--- old/librouteros-3.0.2/Pipfile.lock 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/Pipfile.lock 1970-01-01 01:00:00.000000000 +0100
@@ -1,486 +0,0 @@
-{
- "_meta": {
- "hash": {
- "sha256": "c1874ba19c01841b533eafbe7ab0a639ce8447d03018e0c0142478c0ee06e3e6"
- },
- "pipfile-spec": 6,
- "requires": {
- "python_version": "3.7"
- },
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "apipkg": {
- "hashes": [
- "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6",
- "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"
- ],
- "version": "==1.5"
- },
- "astroid": {
- "hashes": [
- "sha256:2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703",
- "sha256:bc58d83eb610252fd8de6363e39d4f1d0619c894b0ed24603b881c02e64c7386"
- ],
- "version": "==2.4.2"
- },
- "attrs": {
- "hashes": [
- "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
- "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
- ],
- "version": "==19.3.0"
- },
- "bleach": {
- "hashes": [
- "sha256:2bce3d8fab545a6528c8fa5d9f9ae8ebc85a56da365c7f85180bfe96a35ef22f",
- "sha256:3c4c520fdb9db59ef139915a5db79f8b51bc2a7257ea0389f30c846883430a4b"
- ],
- "version": "==3.1.5"
- },
- "bump2version": {
- "hashes": [
- "sha256:477f0e18a0d58e50bb3dbc9af7fcda464fd0ebfc7a6151d8888602d7153171a0",
- "sha256:cd4f3a231305e405ed8944d8ff35bd742d9bc740ad62f483bd0ca21ce7131984"
- ],
- "version": "==1.0.0"
- },
- "bumpversion": {
- "hashes": [
- "sha256:4ba55e4080d373f80177b4dabef146c07ce73c7d1377aabf9d3c3ae1f94584a6",
- "sha256:4eb3267a38194d09f048a2179980bb4803701969bff2c85fa8f6d1ce050be15e"
- ],
- "index": "pypi",
- "version": "==0.6.0"
- },
- "certifi": {
- "hashes": [
- "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3",
- "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"
- ],
- "version": "==2020.6.20"
- },
- "cffi": {
- "hashes": [
- "sha256:001bf3242a1bb04d985d63e138230802c6c8d4db3668fb545fb5005ddf5bb5ff",
- "sha256:00789914be39dffba161cfc5be31b55775de5ba2235fe49aa28c148236c4e06b",
- "sha256:028a579fc9aed3af38f4892bdcc7390508adabc30c6af4a6e4f611b0c680e6ac",
- "sha256:14491a910663bf9f13ddf2bc8f60562d6bc5315c1f09c704937ef17293fb85b0",
- "sha256:1cae98a7054b5c9391eb3249b86e0e99ab1e02bb0cc0575da191aedadbdf4384",
- "sha256:2089ed025da3919d2e75a4d963d008330c96751127dd6f73c8dc0c65041b4c26",
- "sha256:2d384f4a127a15ba701207f7639d94106693b6cd64173d6c8988e2c25f3ac2b6",
- "sha256:337d448e5a725bba2d8293c48d9353fc68d0e9e4088d62a9571def317797522b",
- "sha256:399aed636c7d3749bbed55bc907c3288cb43c65c4389964ad5ff849b6370603e",
- "sha256:3b911c2dbd4f423b4c4fcca138cadde747abdb20d196c4a48708b8a2d32b16dd",
- "sha256:3d311bcc4a41408cf5854f06ef2c5cab88f9fded37a3b95936c9879c1640d4c2",
- "sha256:62ae9af2d069ea2698bf536dcfe1e4eed9090211dbaafeeedf5cb6c41b352f66",
- "sha256:66e41db66b47d0d8672d8ed2708ba91b2f2524ece3dee48b5dfb36be8c2f21dc",
- "sha256:675686925a9fb403edba0114db74e741d8181683dcf216be697d208857e04ca8",
- "sha256:7e63cbcf2429a8dbfe48dcc2322d5f2220b77b2e17b7ba023d6166d84655da55",
- "sha256:8a6c688fefb4e1cd56feb6c511984a6c4f7ec7d2a1ff31a10254f3c817054ae4",
- "sha256:8c0ffc886aea5df6a1762d0019e9cb05f825d0eec1f520c51be9d198701daee5",
- "sha256:95cd16d3dee553f882540c1ffe331d085c9e629499ceadfbda4d4fde635f4b7d",
- "sha256:99f748a7e71ff382613b4e1acc0ac83bf7ad167fb3802e35e90d9763daba4d78",
- "sha256:b8c78301cefcf5fd914aad35d3c04c2b21ce8629b5e4f4e45ae6812e461910fa",
- "sha256:c420917b188a5582a56d8b93bdd8e0f6eca08c84ff623a4c16e809152cd35793",
- "sha256:c43866529f2f06fe0edc6246eb4faa34f03fe88b64a0a9a942561c8e22f4b71f",
- "sha256:cab50b8c2250b46fe738c77dbd25ce017d5e6fb35d3407606e7a4180656a5a6a",
- "sha256:cef128cb4d5e0b3493f058f10ce32365972c554572ff821e175dbc6f8ff6924f",
- "sha256:cf16e3cf6c0a5fdd9bc10c21687e19d29ad1fe863372b5543deaec1039581a30",
- "sha256:e56c744aa6ff427a607763346e4170629caf7e48ead6921745986db3692f987f",
- "sha256:e577934fc5f8779c554639376beeaa5657d54349096ef24abe8c74c5d9c117c3",
- "sha256:f2b0fa0c01d8a0c7483afd9f31d7ecf2d71760ca24499c8697aeb5ca37dc090c"
- ],
- "version": "==1.14.0"
- },
- "chardet": {
- "hashes": [
- "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
- "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
- ],
- "version": "==3.0.4"
- },
- "colorama": {
- "hashes": [
- "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff",
- "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"
- ],
- "version": "==0.4.3"
- },
- "cryptography": {
- "hashes": [
- "sha256:091d31c42f444c6f519485ed528d8b451d1a0c7bf30e8ca583a0cac44b8a0df6",
- "sha256:18452582a3c85b96014b45686af264563e3e5d99d226589f057ace56196ec78b",
- "sha256:1dfa985f62b137909496e7fc182dac687206d8d089dd03eaeb28ae16eec8e7d5",
- "sha256:1e4014639d3d73fbc5ceff206049c5a9a849cefd106a49fa7aaaa25cc0ce35cf",
- "sha256:22e91636a51170df0ae4dcbd250d318fd28c9f491c4e50b625a49964b24fe46e",
- "sha256:3b3eba865ea2754738616f87292b7f29448aec342a7c720956f8083d252bf28b",
- "sha256:651448cd2e3a6bc2bb76c3663785133c40d5e1a8c1a9c5429e4354201c6024ae",
- "sha256:726086c17f94747cedbee6efa77e99ae170caebeb1116353c6cf0ab67ea6829b",
- "sha256:844a76bc04472e5135b909da6aed84360f522ff5dfa47f93e3dd2a0b84a89fa0",
- "sha256:88c881dd5a147e08d1bdcf2315c04972381d026cdb803325c03fe2b4a8ed858b",
- "sha256:96c080ae7118c10fcbe6229ab43eb8b090fccd31a09ef55f83f690d1ef619a1d",
- "sha256:a0c30272fb4ddda5f5ffc1089d7405b7a71b0b0f51993cb4e5dbb4590b2fc229",
- "sha256:bb1f0281887d89617b4c68e8db9a2c42b9efebf2702a3c5bf70599421a8623e3",
- "sha256:c447cf087cf2dbddc1add6987bbe2f767ed5317adb2d08af940db517dd704365",
- "sha256:c4fd17d92e9d55b84707f4fd09992081ba872d1a0c610c109c18e062e06a2e55",
- "sha256:d0d5aeaedd29be304848f1c5059074a740fa9f6f26b84c5b63e8b29e73dfc270",
- "sha256:daf54a4b07d67ad437ff239c8a4080cfd1cc7213df57d33c97de7b4738048d5e",
- "sha256:e993468c859d084d5579e2ebee101de8f5a27ce8e2159959b6673b418fd8c785",
- "sha256:f118a95c7480f5be0df8afeb9a11bd199aa20afab7a96bcf20409b411a3a85f0"
- ],
- "version": "==2.9.2"
- },
- "docutils": {
- "hashes": [
- "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af",
- "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"
- ],
- "version": "==0.16"
- },
- "execnet": {
- "hashes": [
- "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50",
- "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547"
- ],
- "version": "==1.7.1"
- },
- "idna": {
- "hashes": [
- "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6",
- "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"
- ],
- "version": "==2.10"
- },
- "importlib-metadata": {
- "hashes": [
- "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83",
- "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"
- ],
- "markers": "python_version < '3.8'",
- "version": "==1.7.0"
- },
- "isort": {
- "hashes": [
- "sha256:54da7e92468955c4fceacd0c86bd0ec997b0e1ee80d97f67c35a78b719dccab1",
- "sha256:6e811fcb295968434526407adb8796944f1988c5b65e8139058f2014cbe100fd"
- ],
- "version": "==4.3.21"
- },
- "jeepney": {
- "hashes": [
- "sha256:3479b861cc2b6407de5188695fa1a8d57e5072d7059322469b62628869b8e36e",
- "sha256:d6c6b49683446d2407d2fe3acb7a368a77ff063f9182fe427da15d622adc24cf"
- ],
- "markers": "sys_platform == 'linux'",
- "version": "==0.4.3"
- },
- "keyring": {
- "hashes": [
- "sha256:3401234209015144a5d75701e71cb47239e552b0882313e9f51e8976f9e27843",
- "sha256:c53e0e5ccde3ad34284a40ce7976b5b3a3d6de70344c3f8ee44364cc340976ec"
- ],
- "version": "==21.2.1"
- },
- "lazy-object-proxy": {
- "hashes": [
- "sha256:0c4b206227a8097f05c4dbdd323c50edf81f15db3b8dc064d08c62d37e1a504d",
- "sha256:194d092e6f246b906e8f70884e620e459fc54db3259e60cf69a4d66c3fda3449",
- "sha256:1be7e4c9f96948003609aa6c974ae59830a6baecc5376c25c92d7d697e684c08",
- "sha256:4677f594e474c91da97f489fea5b7daa17b5517190899cf213697e48d3902f5a",
- "sha256:48dab84ebd4831077b150572aec802f303117c8cc5c871e182447281ebf3ac50",
- "sha256:5541cada25cd173702dbd99f8e22434105456314462326f06dba3e180f203dfd",
- "sha256:59f79fef100b09564bc2df42ea2d8d21a64fdcda64979c0fa3db7bdaabaf6239",
- "sha256:8d859b89baf8ef7f8bc6b00aa20316483d67f0b1cbf422f5b4dc56701c8f2ffb",
- "sha256:9254f4358b9b541e3441b007a0ea0764b9d056afdeafc1a5569eee1cc6c1b9ea",
- "sha256:9651375199045a358eb6741df3e02a651e0330be090b3bc79f6d0de31a80ec3e",
- "sha256:97bb5884f6f1cdce0099f86b907aa41c970c3c672ac8b9c8352789e103cf3156",
- "sha256:9b15f3f4c0f35727d3a0fba4b770b3c4ebbb1fa907dbcc046a1d2799f3edd142",
- "sha256:a2238e9d1bb71a56cd710611a1614d1194dc10a175c1e08d75e1a7bcc250d442",
- "sha256:a6ae12d08c0bf9909ce12385803a543bfe99b95fe01e752536a60af2b7797c62",
- "sha256:ca0a928a3ddbc5725be2dd1cf895ec0a254798915fb3a36af0964a0a4149e3db",
- "sha256:cb2c7c57005a6804ab66f106ceb8482da55f5314b7fcb06551db1edae4ad1531",
- "sha256:d74bb8693bf9cf75ac3b47a54d716bbb1a92648d5f781fc799347cfc95952383",
- "sha256:d945239a5639b3ff35b70a88c5f2f491913eb94871780ebfabb2568bd58afc5a",
- "sha256:eba7011090323c1dadf18b3b689845fd96a61ba0a1dfbd7f24b921398affc357",
- "sha256:efa1909120ce98bbb3777e8b6f92237f5d5c8ea6758efea36a473e1d38f7d3e4",
- "sha256:f3900e8a5de27447acbf900b4750b0ddfd7ec1ea7fbaf11dfa911141bc522af0"
- ],
- "version": "==1.4.3"
- },
- "librouteros": {
- "editable": true,
- "path": "."
- },
- "mccabe": {
- "hashes": [
- "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
- "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
- ],
- "version": "==0.6.1"
- },
- "more-itertools": {
- "hashes": [
- "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5",
- "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"
- ],
- "version": "==8.4.0"
- },
- "mypy": {
- "hashes": [
- "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c",
- "sha256:3fdda71c067d3ddfb21da4b80e2686b71e9e5c72cca65fa216d207a358827f86",
- "sha256:5dd13ff1f2a97f94540fd37a49e5d255950ebcdf446fb597463a40d0df3fac8b",
- "sha256:6731603dfe0ce4352c555c6284c6db0dc935b685e9ce2e4cf220abe1e14386fd",
- "sha256:6bb93479caa6619d21d6e7160c552c1193f6952f0668cdda2f851156e85186fc",
- "sha256:81c7908b94239c4010e16642c9102bfc958ab14e36048fa77d0be3289dda76ea",
- "sha256:9c7a9a7ceb2871ba4bac1cf7217a7dd9ccd44c27c2950edbc6dc08530f32ad4e",
- "sha256:a4a2cbcfc4cbf45cd126f531dedda8485671545b43107ded25ce952aac6fb308",
- "sha256:b7fbfabdbcc78c4f6fc4712544b9b0d6bf171069c6e0e3cb82440dd10ced3406",
- "sha256:c05b9e4fb1d8a41d41dec8786c94f3b95d3c5f528298d769eb8e73d293abc48d",
- "sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707",
- "sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d",
- "sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c",
- "sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a"
- ],
- "index": "pypi",
- "version": "==0.782"
- },
- "mypy-extensions": {
- "hashes": [
- "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d",
- "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"
- ],
- "version": "==0.4.3"
- },
- "packaging": {
- "hashes": [
- "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8",
- "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"
- ],
- "version": "==20.4"
- },
- "pkginfo": {
- "hashes": [
- "sha256:7424f2c8511c186cd5424bbf31045b77435b37a8d604990b79d4e70d741148bb",
- "sha256:a6d9e40ca61ad3ebd0b72fbadd4fba16e4c0e4df0428c041e01e06eb6ee71f32"
- ],
- "version": "==1.5.0.1"
- },
- "pluggy": {
- "hashes": [
- "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0",
- "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"
- ],
- "version": "==0.13.1"
- },
- "py": {
- "hashes": [
- "sha256:366389d1db726cd2fcfc79732e75410e5fe4d31db13692115529d34069a043c2",
- "sha256:9ca6883ce56b4e8da7e79ac18787889fa5206c79dcc67fb065376cd2fe03f342"
- ],
- "version": "==1.9.0"
- },
- "pycparser": {
- "hashes": [
- "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0",
- "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705"
- ],
- "version": "==2.20"
- },
- "pygments": {
- "hashes": [
- "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44",
- "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324"
- ],
- "version": "==2.6.1"
- },
- "pylint": {
- "hashes": [
- "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc",
- "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c"
- ],
- "index": "pypi",
- "version": "==2.5.3"
- },
- "pyparsing": {
- "hashes": [
- "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1",
- "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"
- ],
- "version": "==2.4.7"
- },
- "pytest": {
- "hashes": [
- "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1",
- "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"
- ],
- "index": "pypi",
- "version": "==5.4.3"
- },
- "pytest-forked": {
- "hashes": [
- "sha256:42a438336731465c5bd76ab38e1645647ac55914a08b507efbabe8783a08aa6c",
- "sha256:65f96334863d9cbe53d21f73e8febc4dd61b8d1fdcac7b487d9af07a5d02a938"
- ],
- "version": "==1.2.0"
- },
- "pytest-xdist": {
- "hashes": [
- "sha256:833b902b16473162cc0572d5bd7b63f8b843df63a4ada9c8af1270d31db17607",
- "sha256:9149b4010240643a5e206fd0ece6f0a1cd5955dae014cf04610d359e22e22453"
- ],
- "index": "pypi",
- "version": "==1.33.0"
- },
- "readme-renderer": {
- "hashes": [
- "sha256:cbe9db71defedd2428a1589cdc545f9bd98e59297449f69d721ef8f1cfced68d",
- "sha256:cc4957a803106e820d05d14f71033092537a22daa4f406dfbdd61177e0936376"
- ],
- "version": "==26.0"
- },
- "requests": {
- "hashes": [
- "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b",
- "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"
- ],
- "version": "==2.24.0"
- },
- "requests-toolbelt": {
- "hashes": [
- "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f",
- "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"
- ],
- "version": "==0.9.1"
- },
- "rfc3986": {
- "hashes": [
- "sha256:112398da31a3344dc25dbf477d8df6cb34f9278a94fee2625d89e4514be8bb9d",
- "sha256:af9147e9aceda37c91a05f4deb128d4b4b49d6b199775fd2d2927768abdc8f50"
- ],
- "version": "==1.4.0"
- },
- "secretstorage": {
- "hashes": [
- "sha256:15da8a989b65498e29be338b3b279965f1b8f09b9668bd8010da183024c8bff6",
- "sha256:b5ec909dde94d4ae2fa26af7c089036997030f0cf0a5cb372b4cccabd81c143b"
- ],
- "markers": "sys_platform == 'linux'",
- "version": "==3.1.2"
- },
- "six": {
- "hashes": [
- "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259",
- "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"
- ],
- "version": "==1.15.0"
- },
- "toml": {
- "hashes": [
- "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f",
- "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"
- ],
- "version": "==0.10.1"
- },
- "tqdm": {
- "hashes": [
- "sha256:63ef7a6d3eb39f80d6b36e4867566b3d8e5f1fe3d6cb50c5e9ede2b3198ba7b7",
- "sha256:7810e627bcf9d983a99d9ff8a0c09674400fd2927eddabeadf153c14a2ec8656"
- ],
- "version": "==4.47.0"
- },
- "twine": {
- "hashes": [
- "sha256:34352fd52ec3b9d29837e6072d5a2a7c6fe4290e97bba46bb8d478b5c598f7ab",
- "sha256:ba9ff477b8d6de0c89dd450e70b2185da190514e91c42cc62f96850025c10472"
- ],
- "index": "pypi",
- "version": "==3.2.0"
- },
- "typed-ast": {
- "hashes": [
- "sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355",
- "sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919",
- "sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa",
- "sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652",
- "sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75",
- "sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01",
- "sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d",
- "sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1",
- "sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907",
- "sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c",
- "sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3",
- "sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b",
- "sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614",
- "sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb",
- "sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b",
- "sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41",
- "sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6",
- "sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34",
- "sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe",
- "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4",
- "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7"
- ],
- "markers": "implementation_name == 'cpython' and python_version < '3.8'",
- "version": "==1.4.1"
- },
- "typing-extensions": {
- "hashes": [
- "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5",
- "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae",
- "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392"
- ],
- "version": "==3.7.4.2"
- },
- "urllib3": {
- "hashes": [
- "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
- "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
- ],
- "version": "==1.25.9"
- },
- "wcwidth": {
- "hashes": [
- "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784",
- "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"
- ],
- "version": "==0.2.5"
- },
- "webencodings": {
- "hashes": [
- "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78",
- "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"
- ],
- "version": "==0.5.1"
- },
- "wrapt": {
- "hashes": [
- "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"
- ],
- "version": "==1.12.1"
- },
- "yapf": {
- "hashes": [
- "sha256:3000abee4c28daebad55da6c85f3cd07b8062ce48e2e9943c8da1b9667d48427",
- "sha256:3abf61ba67cf603069710d30acbc88cfe565d907e16ad81429ae90ce9651e0c9"
- ],
- "index": "pypi",
- "version": "==0.30.0"
- },
- "zipp": {
- "hashes": [
- "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b",
- "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"
- ],
- "version": "==3.1.0"
- }
- },
- "develop": {}
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docker/3.6.dockerfile new/librouteros-3.1.0/docker/3.6.dockerfile
--- old/librouteros-3.0.2/docker/3.6.dockerfile 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/docker/3.6.dockerfile 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,13 @@
+FROM python:3.6
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends \
+ qemu-system-i386 \
+ qemu-utils \
+ wget \
+ git-lfs
+
+RUN pip install pipenv
+RUN pip install twine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docker/3.7.dockerfile new/librouteros-3.1.0/docker/3.7.dockerfile
--- old/librouteros-3.0.2/docker/3.7.dockerfile 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/docker/3.7.dockerfile 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,13 @@
+FROM python:3.7
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends \
+ qemu-system-i386 \
+ qemu-utils \
+ wget \
+ git-lfs
+
+RUN pip install pipenv
+RUN pip install twine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docker/3.8.dockerfile new/librouteros-3.1.0/docker/3.8.dockerfile
--- old/librouteros-3.0.2/docker/3.8.dockerfile 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/docker/3.8.dockerfile 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,13 @@
+FROM python:3.8
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update
+RUN apt-get install -y --no-install-recommends \
+ qemu-system-i386 \
+ qemu-utils \
+ wget \
+ git-lfs
+
+RUN pip install pipenv
+RUN pip install twine
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docker/do.sh new/librouteros-3.1.0/docker/do.sh
--- old/librouteros-3.0.2/docker/do.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/docker/do.sh 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+for ver in 3.6 3.7 3.8
+do
+ docker build -t lukaszkostka/librouteros:${ver} -f docker/${ver}.dockerfile .
+ docker push lukaszkostka/librouteros:${ver}
+done
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docs/conf.py new/librouteros-3.1.0/docs/conf.py
--- old/librouteros-3.0.2/docs/conf.py 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/docs/conf.py 2020-12-17 23:52:59.000000000 +0100
@@ -62,3 +62,7 @@
# Output file base name for HTML help builder.
htmlhelp_basename = 'librouteros'
+
+html_theme_options = {
+ 'fixed_sidebar': True,
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docs/connect.rst new/librouteros-3.1.0/docs/connect.rst
--- old/librouteros-3.0.2/docs/connect.rst 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/docs/connect.rst 2020-12-17 23:52:59.000000000 +0100
@@ -38,6 +38,14 @@
port=8729
)
+If you need to pass any other parameters like ``server_name``,
+use `partial https://docs.python.org/3/library/functools.html#functools.partial`_.
+
+.. code-block:: python
+
+ from functools import partial
+ ssl_wrapper=partial(ctx.wrap_socket, server_hostname='some.address.com')
+
Auth methods
------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/docs/query.rst new/librouteros-3.1.0/docs/query.rst
--- old/librouteros-3.0.2/docs/query.rst 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/docs/query.rst 2020-12-17 23:52:59.000000000 +0100
@@ -24,17 +24,27 @@
name = Key('name')
disabled = Key('disabled')
- for row in api.path('/interface').select(name, disabled).where(
+ query = api.path('/interface').select(name, disabled).where(
disabled == False,
Or(
name == 'ether2',
name == 'wlan-lan',
),
- ):
+ )
Above code demonstrates how to select ``name``, ``disabled`` fields where each interface is disabled
and ``name`` is equal to one of ``ether2``, ``wlan-lan``.
If you do not specify any logical operation within `where()`, them it defaults to `And()`.
+Above example can be rewritten using `In` operator.
+
+.. code-block:: python
+
+ name = Key('name')
+ disabled = Key('disabled')
+ query = api.path('/interface').select(name, disabled).where(
+ disabled == False,
+ name.In('ether2', 'wlan-lan'),
+ )
Usable operators
----------------
@@ -45,6 +55,7 @@
``!=`` ``name != 'ether2'``
``>`` ``mtu > 1500``
``<`` ``mtu < 1400``
+``In`` ``name.In('ether1', 'ether2', 'wlan1')``
======== =========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/images/.gitignore new/librouteros-3.1.0/images/.gitignore
--- old/librouteros-3.0.2/images/.gitignore 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/images/.gitignore 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-*.qcow2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/images/routeros_6.33.3.qcow2 new/librouteros-3.1.0/images/routeros_6.33.3.qcow2
--- old/librouteros-3.0.2/images/routeros_6.33.3.qcow2 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/images/routeros_6.33.3.qcow2 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be3b9d982d1ffc893ad50d5295a5f4e55f222eb6088cd52ba8d453a6da800a28
+size 46006272
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/images/routeros_6.43rc21.qcow2 new/librouteros-3.1.0/images/routeros_6.43rc21.qcow2
--- old/librouteros-3.0.2/images/routeros_6.43rc21.qcow2 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/images/routeros_6.43rc21.qcow2 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72579f09778acd8023cf0b467801378373042cc8dc2492121271081cd9914115
+size 37027840
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/images/routeros_6.44.5.qcow2 new/librouteros-3.1.0/images/routeros_6.44.5.qcow2
--- old/librouteros-3.0.2/images/routeros_6.44.5.qcow2 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/images/routeros_6.44.5.qcow2 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a58b18c702b046622f86d68255252135dc5b660a5f8a71989a0e4e95072d3cd
+size 36241408
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/librouteros/query.py new/librouteros-3.1.0/librouteros/query.py
--- old/librouteros-3.0.2/librouteros/query.py 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/librouteros/query.py 2020-12-17 23:52:59.000000000 +0100
@@ -31,6 +31,12 @@
def __str__(self) -> str:
return str(self.name)
+ # pylint: disable=invalid-name
+ def In(self, one, *elems):
+ yield from self == one
+ yield from chain.from_iterable(self == str(elem) for elem in elems)
+ yield from ('?#|', ) * len(elems)
+
class Query:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/setup.py new/librouteros-3.1.0/setup.py
--- old/librouteros-3.0.2/setup.py 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/setup.py 2020-12-17 23:52:59.000000000 +0100
@@ -28,7 +28,7 @@
setup_requires=setup_pkgs,
zip_safe=False,
name='librouteros',
- version='3.0.2',
+ version='3.1.0',
description='Python implementation of MikroTik RouterOS API',
long_description=read('README.rst'),
author='Łukasz Kostka',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/tests/integration/test_general.py new/librouteros-3.1.0/tests/integration/test_general.py
--- old/librouteros-3.0.2/tests/integration/test_general.py 2020-07-20 12:50:59.000000000 +0200
+++ new/librouteros-3.1.0/tests/integration/test_general.py 2020-12-17 23:52:59.000000000 +0100
@@ -1,4 +1,5 @@
import socket
+import pytest
from time import sleep
from librouteros.query import Key
from librouteros import connect
@@ -46,6 +47,23 @@
assert selected_data[0]['address'] == new_address
+@pytest.mark.parametrize(
+ 'addresses', (
+ {'172.16.1.1/24', '172.16.1.2/24'},
+ {'172.16.1.1/24', '172.16.1.2/24', '1.1.1.1/24'},
+ {'172.16.1.2/24'},
+ )
+)
+def test_query_In_operator(routeros_api, addresses):
+ addr_path = routeros_api.path('/ip/address')
+ for addr in addresses:
+ addr_path.add(interface='ether1', address=addr)
+
+ address = Key('address')
+ query = addr_path.select(address).where(address.In(*addresses))
+ assert addresses == set(row['address'] for row in query)
+
+
def test_long_word(routeros_api):
r"""
Assert that when word length is encoded with \x00 in it,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/librouteros-3.0.2/upload.sh new/librouteros-3.1.0/upload.sh
--- old/librouteros-3.0.2/upload.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/librouteros-3.1.0/upload.sh 2020-12-17 23:52:59.000000000 +0100
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+set -Eeuo pipefail
+
+python setup.py sdist
+twine upload dist/*