This is an automated email from the git hooks/post-receive script. sebastic pushed a commit to branch master in repository python-osmapi.
commit 6801a422d5faaadf5245ddc0bf6c1e7fa88d597e Author: Bas Couwenberg <[email protected]> Date: Tue Sep 5 22:07:23 2017 +0200 New upstream version 1.0.0 --- .gitignore | 1 + .travis.yml | 6 ++---- CHANGELOG.md | 10 ++++++++++ README.md | 14 ++++++++++++-- build.sh | 6 ++---- osmapi/OsmApi.py | 24 ++++++++++++++++++++++-- osmapi/__init__.py | 2 +- setup.py | 3 ++- test-requirements.txt | 3 ++- tests/changeset_tests.py | 18 +++++++++--------- tests/functional_tests.py | 17 +++++++++++++++++ tests/helper_tests.py | 23 ++++++++++------------- tox.ini | 6 +----- 13 files changed, 91 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 706a49c..8dacf3c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ dist/ MANIFEST *.pyc +*.egg-info .coverage .tox diff --git a/.travis.yml b/.travis.yml index 8f21d4d..9491025 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,19 +1,17 @@ language: python python: -- '2.6' - '2.7' - '3.3' - '3.4' +- '3.5' +- '3.6' before_install: - sudo apt-get update -qq - sudo apt-get install -qq pandoc install: -- if [[ $TRAVIS_PYTHON_VERSION == 2.6 ]]; then - pip install unittest2; - fi - pip install -r requirements.txt - pip install -r test-requirements.txt - pip install . diff --git a/CHANGELOG.md b/CHANGELOG.md index e9d9650..71fd1c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p ## [Unreleased][unreleased] +## 1.0.0 - 2017-09-05 +### Added +- Officially support Python 3.5 and 3.6 + +### Removed +- osmapi does **not** support Python 2.6 anymore (it might work, it might not) + +### Changed +- **BC-Break:** raise an exception if the requested element is deleted (previoulsy `None` has been returned) + ## 0.8.1 - 2016-12-21 ### Fixed - Use setuptools instead of distutils in setup.py diff --git a/README.md b/README.md index 6d1c461..4ba0fec 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Note: The password file should have the format _user:password_ ```python import osmapi -api = osmapi.OsmApi(username = u"metaodi", password = u"*******") +api = osmapi.OsmApi(api="api06.dev.openstreetmap.org", username = u"metaodi", password = u"*******") api.ChangesetCreate({u"comment": u"My first test"}) print api.NodeCreate({u"lon":1, u"lat":1, u"tag": {}}) # {u'changeset': 532907, u'lon': 1, u'version': 1, u'lat': 1, u'tag': {}, u'id': 164684} @@ -86,10 +86,20 @@ To run the tests use the following command: nosetests --verbose -By using tox you can even run the tests against different versions of python (2.6, 2.7, 3.2 and 3.3): +By using tox you can even run the tests against different versions of python (2.7, 3.3, 3.4, 3.5 and 3.6): tox +## Release + +To create a new release, follow these steps (please respect [Semantic Versioning](http://semver.org/)): + +1. Adapt the version number in `osmapi/__init__.py` +1. Update the CHANGELOG with the version +1. Create a pull request to merge develop into master +1. Create a [new release/tag on GitHub](https://github.com/metaodi/osmapi/releases) (on the master branch) +1. The [publication on PyPI](https://pypi.python.org/pypi/osmapi) happens via [Travis CI](https://travis-ci.org/metaodi/osmapi) on every tagged commit + ## Attribution This project was orginally developed by Etienne Chové. diff --git a/build.sh b/build.sh index 4ba4475..d146385 100755 --- a/build.sh +++ b/build.sh @@ -14,10 +14,8 @@ flake8 --statistics --show-source . # run tests nosetests --verbose --with-coverage -# generate docs (currently it's not possible to generate docs in Python 2.6) -if [[ $TRAVIS_PYTHON_VERSION != 2.6 ]]; then - pdoc --html --overwrite osmapi/OsmApi.py -fi +# generate the docs +pdoc --html --overwrite osmapi/OsmApi.py # setup a new virtualenv and try to install the lib virtualenv pyenv diff --git a/osmapi/OsmApi.py b/osmapi/OsmApi.py index a58de83..087cc83 100644 --- a/osmapi/OsmApi.py +++ b/osmapi/OsmApi.py @@ -122,6 +122,13 @@ class NotSubscribedApiError(ApiError): pass +class ElementDeletedApiError(ApiError): + """ + Error when the requested element is deleted + """ + pass + + class OsmApi: """ Main class of osmapi, instanciate this class to use osmapi @@ -1898,6 +1905,15 @@ class OsmApi: be preformed on this request. `send` contains additional data that might be sent in a request. + + If the username or password is missing, + `OsmApi.UsernamePasswordMissingError` is raised. + + If the requested element has been deleted, + `OsmApi.ElementDeletedApiError` is raised. + + If the response status code indicates an error, + `OsmApi.ApiError` is raised. """ if self._debug: error_msg = ( @@ -1919,9 +1935,13 @@ class OsmApi: response = self._session.request(method, path, auth=user_pass, data=send) if response.status_code != 200: - if response.status_code == 410: - return None payload = response.content.strip() + if response.status_code == 410: + raise ElementDeletedApiError( + response.status_code, + response.reason, + payload + ) raise ApiError(response.status_code, response.reason, payload) if self._debug: error_msg = ( diff --git a/osmapi/__init__.py b/osmapi/__init__.py index d6adc67..1a2cd5f 100644 --- a/osmapi/__init__.py +++ b/osmapi/__init__.py @@ -1,5 +1,5 @@ from __future__ import (absolute_import, print_function, unicode_literals) -__version__ = '0.8.1' +__version__ = '1.0.0' from .OsmApi import * # noqa diff --git a/setup.py b/setup.py index f68d023..24a83ec 100644 --- a/setup.py +++ b/setup.py @@ -42,10 +42,11 @@ setup( 'Topic :: Software Development :: Libraries', 'Development Status :: 4 - Beta', 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', ], ) diff --git a/test-requirements.txt b/test-requirements.txt index 5a410d0..3b52c77 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -3,9 +3,10 @@ flake8==3.0.4; python_version >= '2.7' flake8==2.1.0; python_version == '2.6' nose==1.3.0 -tox==1.7.1 +tox==2.8.1 coverage==3.7.1 coveralls==0.4.1 mock==1.0.1 xmltodict==0.9.0 virtualenv==15.1.0 +httpretty==0.8.14 diff --git a/tests/changeset_tests.py b/tests/changeset_tests.py index aeb224e..a35a10a 100644 --- a/tests/changeset_tests.py +++ b/tests/changeset_tests.py @@ -92,10 +92,10 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osm version="0.6" generator="osmapi/0.8.1">\n' + b'<osm version="0.6" generator="osmapi/1.0.0">\n' b' <changeset visible="true">\n' b' <tag k="test" v="foobar"/>\n' - b' <tag k="created_by" v="osmapi/0.8.1"/>\n' + b' <tag k="created_by" v="osmapi/1.0.0"/>\n' b' </changeset>\n' b'</osm>\n' ) @@ -125,7 +125,7 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osm version="0.6" generator="osmapi/0.8.1">\n' + b'<osm version="0.6" generator="osmapi/1.0.0">\n' b' <changeset visible="true">\n' b' <tag k="test" v="foobar"/>\n' b' <tag k="created_by" v="MyTestOSMApp"/>\n' @@ -163,10 +163,10 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osm version="0.6" generator="osmapi/0.8.1">\n' + b'<osm version="0.6" generator="osmapi/1.0.0">\n' b' <changeset visible="true">\n' b' <tag k="foobar" v="A new test changeset"/>\n' - b' <tag k="created_by" v="osmapi/0.8.1"/>\n' + b' <tag k="created_by" v="osmapi/1.0.0"/>\n' b' </changeset>\n' b'</osm>\n' ) @@ -190,7 +190,7 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osm version="0.6" generator="osmapi/0.8.1">\n' + b'<osm version="0.6" generator="osmapi/1.0.0">\n' b' <changeset visible="true">\n' b' <tag k="foobar" v="A new test changeset"/>\n' b' <tag k="created_by" v="CoolTestApp"/>\n' @@ -276,7 +276,7 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osmChange version="0.6" generator="osmapi/0.8.1">\n' + b'<osmChange version="0.6" generator="osmapi/1.0.0">\n' b'<create>\n' b' <node lat="47.123" lon="8.555" visible="true" ' b'changeset="4444">\n' @@ -350,7 +350,7 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osmChange version="0.6" generator="osmapi/0.8.1">\n' + b'<osmChange version="0.6" generator="osmapi/1.0.0">\n' b'<modify>\n' b' <way id="4294967296" version="2" visible="true" ' b'changeset="4444">\n' @@ -434,7 +434,7 @@ class TestOsmApiChangeset(osmapi_tests.TestOsmApi): xmltosorteddict(kwargs['data']), xmltosorteddict( b'<?xml version="1.0" encoding="UTF-8"?>\n' - b'<osmChange version="0.6" generator="osmapi/0.8.1">\n' + b'<osmChange version="0.6" generator="osmapi/1.0.0">\n' b'<delete>\n' b' <relation id="676" version="2" visible="true" ' b'changeset="4444">\n' diff --git a/tests/functional_tests.py b/tests/functional_tests.py new file mode 100644 index 0000000..3bb47ff --- /dev/null +++ b/tests/functional_tests.py @@ -0,0 +1,17 @@ +import httpretty +import unittest +import osmapi + + +class TestOsmApiFunctional(unittest.TestCase): + @httpretty.activate + def test_deleted_element_raises_exception(self): + httpretty.register_uri( + httpretty.GET, + "https://www.openstreetmap.org/api/0.6/relation/2911456/full", + status=410 + ) + with self.assertRaises(osmapi.ElementDeletedApiError) as context: + api = osmapi.OsmApi() + api.RelationFull(2911456) + self.assertEquals(410, context.exception.status) diff --git a/tests/helper_tests.py b/tests/helper_tests.py index 826fcd2..76fb596 100644 --- a/tests/helper_tests.py +++ b/tests/helper_tests.py @@ -101,19 +101,16 @@ class TestOsmApiHelper(osmapi_tests.TestOsmApi): def test_http_request_410_response(self): self.setupMock(410) - response = self.api._http_request( - 'GET', - '/api/0.6/test410', - False, - None - ) - self.api._session.request.assert_called_with( - 'GET', - self.api_base + '/api/0.6/test410', - auth=None, - data=None - ) - self.assertIsNone(response, "test response") + with self.assertRaises(osmapi.ElementDeletedApiError) as cm: + self.api._http_request( + 'GET', + '/api/0.6/test410', + False, + None + ) + self.assertEquals(cm.exception.status, 410) + self.assertEquals(cm.exception.reason, "test reason") + self.assertEquals(cm.exception.payload, "test response") def test_http_request_500_response(self): self.setupMock(500) diff --git a/tox.ini b/tox.ini index ccb6940..52c4dc7 100644 --- a/tox.ini +++ b/tox.ini @@ -1,11 +1,7 @@ [tox] -envlist = py26,py27,py32,py33,py34 +envlist = py27,py33,py34,py35,py36 [testenv] commands=nosetests --verbose deps = -r{toxinidir}/requirements.txt -r{toxinidir}/test-requirements.txt -[testenv:py26] -deps = - unittest2 - {[testenv]deps} -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/python-osmapi.git _______________________________________________ Pkg-grass-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel

