Bug#861905: unblock: pyosmium/2.11.1-1

Bas Couwenberg sebastic at xs4all.nl
Fri May 5 15:49:12 UTC 2017


Package: release.debian.org
Severity: normal
User: release.debian.org at packages.debian.org
Usertags: unblock

Please unblock package pyosmium

Upstream has only fixed bugs for this release in line with the freeze
policy.

unblock pyosmium/2.11.1-1

Kind Regards,

Bas
-------------- next part --------------
diff -Nru pyosmium-2.11.0/CHANGELOG.md pyosmium-2.11.1/CHANGELOG.md
--- pyosmium-2.11.0/CHANGELOG.md	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/CHANGELOG.md	2017-05-04 23:36:03.000000000 +0200
@@ -13,6 +13,19 @@
 ### Fixed
 
 
+## [2.11.1] - 2017-05-04
+
+### Added
+
+### Changed
+
+### Fixed
+
+- prevent unnecessary calls to callbacks
+- correctly throw KeyError in taglist accessor
+- fix output type of index.map_types() function
+- don't overgrow writer buffers over requested size
+
 ## [2.11.0] - 2017-01-15
 
 ### Changed
@@ -123,7 +136,8 @@
 
 - Exception not caught in test.
 
-[unreleased]: https://github.com/osmcode/pyosmium/compare/v2.11.0...HEAD
+[unreleased]: https://github.com/osmcode/pyosmium/compare/v2.11.1...HEAD
+[2.11.1]: https://github.com/osmcode/pyosmium/compare/v2.11.0...v2.11.1
 [2.11.0]: https://github.com/osmcode/pyosmium/compare/v2.10.2...v2.11.0
 [2.10.2]: https://github.com/osmcode/pyosmium/compare/v2.9.0...v2.10.2
 [2.9.0]: https://github.com/osmcode/pyosmium/compare/v2.8.0...v2.9.0
diff -Nru pyosmium-2.11.0/debian/changelog pyosmium-2.11.1/debian/changelog
--- pyosmium-2.11.0/debian/changelog	2017-01-17 18:45:04.000000000 +0100
+++ pyosmium-2.11.1/debian/changelog	2017-05-05 09:51:21.000000000 +0200
@@ -1,3 +1,15 @@
+pyosmium (2.11.1-1) unstable; urgency=medium
+
+  * New upstream bugfix release.
+    - Prevent unnecessary calls to callbacks
+    - Correctly throw KeyError in taglist accessor
+    - Fix output type of index.map_types() function
+    - Don't overgrow writer buffers over requested size
+  * Update branch in gbp.conf & Vcs-Git URL.
+  * Limit watch file to 2.11.x releases.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Fri, 05 May 2017 09:51:21 +0200
+
 pyosmium (2.11.0-1) unstable; urgency=medium
 
   * Move from experimental to unstable.
diff -Nru pyosmium-2.11.0/debian/control pyosmium-2.11.1/debian/control
--- pyosmium-2.11.0/debian/control	2017-01-15 21:46:51.000000000 +0100
+++ pyosmium-2.11.1/debian/control	2017-05-05 09:48:33.000000000 +0200
@@ -23,7 +23,7 @@
                zlib1g-dev
 Standards-Version: 3.9.8
 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-grass/pyosmium.git/
-Vcs-Git: https://anonscm.debian.org/git/pkg-grass/pyosmium.git
+Vcs-Git: https://anonscm.debian.org/git/pkg-grass/pyosmium.git -b stretch
 Homepage: http://osmcode.org/pyosmium/
 
 Package: python-pyosmium
diff -Nru pyosmium-2.11.0/debian/gbp.conf pyosmium-2.11.1/debian/gbp.conf
--- pyosmium-2.11.0/debian/gbp.conf	2016-11-27 10:29:05.000000000 +0100
+++ pyosmium-2.11.1/debian/gbp.conf	2017-05-05 09:48:33.000000000 +0200
@@ -2,11 +2,11 @@
 
 # The default name for the upstream branch is "upstream".
 # Change it if the name is different (for instance, "master").
-upstream-branch = upstream
+upstream-branch = upstream-2.11
 
 # The default name for the Debian branch is "master".
 # Change it if the name is different (for instance, "debian/unstable").
-debian-branch = master
+debian-branch = stretch
 
 # git-import-orig uses the following names for the upstream tags.
 # Change the value if you are not using git-import-orig
diff -Nru pyosmium-2.11.0/debian/watch pyosmium-2.11.1/debian/watch
--- pyosmium-2.11.0/debian/watch	2016-10-26 21:36:51.000000000 +0200
+++ pyosmium-2.11.1/debian/watch	2017-05-05 09:48:33.000000000 +0200
@@ -4,4 +4,4 @@
 uversionmangle=s/(\d)[_\.\-\+]?((RC|rc|pre|dev|beta|alpha)\d*)$/$1~$2/,\
 filenamemangle=s/(?:.*\/)?(?:rel|v|pyosmium)[\-\_]?(\d[\d\-\.]+)\.(tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))/pyosmium-$1.$2/ \
 https://github.com/osmcode/pyosmium/releases \
-(?:.*/)?(?:rel|v|pyosmium)[\-\_]?(\d[\d\-\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
+(?:.*/)?(?:rel|v|pyosmium)[\-\_]?(2\.11\.\d[\d\-\.]*)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
diff -Nru pyosmium-2.11.0/lib/generic_handler.hpp pyosmium-2.11.1/lib/generic_handler.hpp
--- pyosmium-2.11.0/lib/generic_handler.hpp	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/lib/generic_handler.hpp	2017-05-04 23:36:03.000000000 +0200
@@ -104,45 +104,46 @@
 struct SimpleHandlerWrap: BaseHandler, wrapper<BaseHandler> {
 
     void node(const osmium::Node& node) const {
-        if (override f = this->get_override("node"))
-            f(boost::ref(node));
-    }
+        if (!(m_callbacks & osmium::osm_entity_bits::node))
+            return;
 
-    void default_node(const osmium::Node&) const {
+        if (override f = this->get_override("node")) {
+            f(boost::ref(node));
+        }
     }
 
     void way(const osmium::Way& way) const {
+        if (!(m_callbacks & osmium::osm_entity_bits::way))
+            return;
+
         if (override f = this->get_override("way"))
             f(boost::ref(way));
     }
 
-    void default_way(const osmium::Way&) const {
-    }
-
     void relation(const osmium::Relation& rel) const {
+        if (!(m_callbacks & osmium::osm_entity_bits::relation))
+            return;
+
         if (override f = this->get_override("relation"))
             f(boost::ref(rel));
     }
 
-    void default_relation(const osmium::Relation&) const {
-    }
-
     void changeset(const osmium::Changeset& cs) const {
+        if (!(m_callbacks & osmium::osm_entity_bits::changeset))
+            return;
+
         if (override f = this->get_override("changeset"))
             f(boost::ref(cs));
     }
 
-    void default_changeset(const osmium::Changeset&) const {
-    }
-
     void area(const osmium::Area& area) const {
+        if (!(m_callbacks & osmium::osm_entity_bits::area))
+            return;
+
         if (override f = this->get_override("area"))
             f(boost::ref(area));
     }
 
-    void default_area(const osmium::Area&) const {
-    }
-
     void apply_file(const std::string &filename, bool locations = false,
                     const std::string &idx = "sparse_mem_array")
     {
@@ -155,7 +156,7 @@
     {
         Py_buffer pybuf;
         PyObject_GetBuffer(buf.ptr(), &pybuf, PyBUF_C_CONTIGUOUS);
-        size_t len = pybuf.len;
+        size_t len = (size_t) pybuf.len;
         const char *cbuf = reinterpret_cast<const char *>(pybuf.buf);
         const char *cfmt = boost::python::extract<const char *>(format);
 
@@ -170,24 +171,50 @@
                                             BaseHandler::location_handler
                                             :BaseHandler::no_handler;
 
-        if (this->get_override("area"))
+        m_callbacks = osmium::osm_entity_bits::nothing;
+        if (hasfunc("node"))
+            m_callbacks |= osmium::osm_entity_bits::node;
+        if (hasfunc("way"))
+            m_callbacks |= osmium::osm_entity_bits::way;
+        if (hasfunc("relation"))
+            m_callbacks |= osmium::osm_entity_bits::relation;
+        if (hasfunc("area"))
+            m_callbacks |= osmium::osm_entity_bits::area;
+        if (hasfunc("changeset"))
+            m_callbacks |= osmium::osm_entity_bits::changeset;
+
+        if (m_callbacks & osmium::osm_entity_bits::area)
         {
             entities = osmium::osm_entity_bits::object;
             handler = BaseHandler::area_handler;
         } else {
-            if (locations || this->get_override("node"))
+            if (locations || m_callbacks & osmium::osm_entity_bits::node)
                 entities |= osmium::osm_entity_bits::node;
-            if (this->get_override("way"))
+            if (m_callbacks & osmium::osm_entity_bits::way)
                 entities |= osmium::osm_entity_bits::way;
-            if (this->get_override("relation"))
+            if (m_callbacks & osmium::osm_entity_bits::relation)
                 entities |= osmium::osm_entity_bits::relation;
         }
 
-        if (this->get_override("changeset"))
+        if (m_callbacks & osmium::osm_entity_bits::changeset)
             entities |= osmium::osm_entity_bits::changeset;
 
         apply(file, entities, handler, idx);
     }
+
+    bool hasfunc(char const *name) {
+        reference_existing_object::apply<SimpleHandlerWrap*>::type converter;
+        PyObject* obj = converter( this );
+
+        if (PyObject_HasAttrString(obj, name)) {
+            auto o = boost::python::object(handle<>(obj));
+            return o.attr(name) != boost::python::object();
+        }
+
+        return false;
+    }
+
+    osmium::osm_entity_bits::type m_callbacks;
 };
 
 #endif
diff -Nru pyosmium-2.11.0/lib/generic_writer.hpp pyosmium-2.11.1/lib/generic_writer.hpp
--- pyosmium-2.11.0/lib/generic_writer.hpp	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/lib/generic_writer.hpp	2017-05-04 23:36:03.000000000 +0200
@@ -16,7 +16,9 @@
 public:
     SimpleWriterWrap(const char* filename, size_t bufsz=4096*1024)
     : writer(filename),
-      buffer(bufsz < 2*BUFFER_WRAP ? 2*BUFFER_WRAP : bufsz, osmium::memory::Buffer::auto_grow::yes)
+      buffer(bufsz < 2 * BUFFER_WRAP ? 2 * BUFFER_WRAP : bufsz,
+             osmium::memory::Buffer::auto_grow::yes),
+      buffer_size(buffer.capacity()) // same rounding to BUFFER_WRAP
     {}
 
     virtual ~SimpleWriterWrap()
@@ -261,8 +263,8 @@
     void flush_buffer() {
         buffer.commit();
 
-        if (buffer.committed() > buffer.capacity() - BUFFER_WRAP) {
-            osmium::memory::Buffer new_buffer(buffer.capacity(), osmium::memory::Buffer::auto_grow::yes);
+        if (buffer.committed() > buffer_size - BUFFER_WRAP) {
+            osmium::memory::Buffer new_buffer(buffer_size, osmium::memory::Buffer::auto_grow::yes);
             using std::swap;
             swap(buffer, new_buffer);
             writer(std::move(new_buffer));
@@ -271,6 +273,7 @@
 
     osmium::io::Writer writer;
     osmium::memory::Buffer buffer;
+    size_t buffer_size;
 };
 
 #endif // PYOSMIUM_GENERIC_WRITER_HPP
diff -Nru pyosmium-2.11.0/lib/index.cc pyosmium-2.11.1/lib/index.cc
--- pyosmium-2.11.0/lib/index.cc	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/lib/index.cc	2017-05-04 23:36:03.000000000 +0200
@@ -12,9 +12,14 @@
     return map_factory.create_map(config_string).release();
 }
 
-std::vector<std::string> map_types() {
+PyObject *map_types() {
     const auto& map_factory = osmium::index::MapFactory<osmium::unsigned_object_id_type, osmium::Location>::instance();
-    return map_factory.map_types();
+
+    boost::python::list* l = new boost::python::list();
+    for(auto const &e : map_factory.map_types())
+        (*l).append(e);
+
+    return l->ptr();
 }
 
 BOOST_PYTHON_MODULE(index)
diff -Nru pyosmium-2.11.0/lib/osm.cc pyosmium-2.11.1/lib/osm.cc
--- pyosmium-2.11.0/lib/osm.cc	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/lib/osm.cc	2017-05-04 23:36:03.000000000 +0200
@@ -9,11 +9,18 @@
 #include "std_pair.hpp"
 
 
-inline const char *get_tag_by_key(osmium::TagList const& obj, const char *value)
+inline const char *get_tag_by_key(osmium::TagList const& obj, const char *key)
 {
-    const char* v = obj.get_value_by_key(value);
-    if (!v)
+    if (!key) {
+        PyErr_SetString(PyExc_KeyError, "Key 'None' not allowed.");
+        boost::python::throw_error_already_set();
+    }
+
+    const char* v = obj.get_value_by_key(key);
+    if (!v) {
         PyErr_SetString(PyExc_KeyError, "No tag with that key.");
+        boost::python::throw_error_already_set();
+    }
     return v;
 }
 
diff -Nru pyosmium-2.11.0/lib/osmium.cc pyosmium-2.11.1/lib/osmium.cc
--- pyosmium-2.11.0/lib/osmium.cc	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/lib/osmium.cc	2017-05-04 23:36:03.000000000 +0200
@@ -66,28 +66,14 @@
     ;
 
     class_<SimpleHandlerWrap, boost::noncopyable>("SimpleHandler",
-        "The most generic of OSM data handlers. For each data type "
-        "a callback can be implemented where the object is processed. Note that "
+        "The most generic of OSM data handlers. Derive your data processor "
+        "from this class and implement callbacks for each object type you are "
+        "interested in. The following data types are recognised: \n"
+        " `node`, `way`, `relation`, `area` and `changeset`.\n "
+        "A callback takes exactly one parameter which is the object. Note that "
         "all objects that are handed into the handler are only readable and are "
         "only valid until the end of the callback is reached. Any data that "
         "should be retained must be copied into other data structures.")
-        .def("node", &BaseHandler::node, &SimpleHandlerWrap::default_node,
-             (arg("self"), arg("node")),
-             "Handler called for node objects.")
-        .def("way", &BaseHandler::way, &SimpleHandlerWrap::default_way,
-             (arg("self"), arg("way")),
-             "Handler called for way objects. If the geometry of the way is "
-             "needed then ``locations`` must be set to true when calling "
-             "apply_file.")
-        .def("relation", &BaseHandler::relation, &SimpleHandlerWrap::default_relation,
-             (arg("self"), arg("relation")),
-             "Handler called for relation objects.")
-        .def("changeset", &BaseHandler::changeset, &SimpleHandlerWrap::default_changeset,
-             (arg("self"), arg("changeset")),
-             "Handler called for changeset objects.")
-        .def("area", &BaseHandler::area, &SimpleHandlerWrap::default_area,
-             (arg("self"), arg("area")),
-             "Handler called for area objects.")
         .def("apply_file", &SimpleHandlerWrap::apply_file,
               (arg("self"), arg("filename"),
                arg("locations")=false, arg("idx")="sparse_mem_array"),
diff -Nru pyosmium-2.11.0/osmium/version.py pyosmium-2.11.1/osmium/version.py
--- pyosmium-2.11.0/osmium/version.py	2017-01-15 15:39:17.000000000 +0100
+++ pyosmium-2.11.1/osmium/version.py	2017-05-04 23:36:03.000000000 +0200
@@ -5,7 +5,7 @@
 # the major version
 pyosmium_major = '2.11'
 # current release (Pip version)
-pyosmium_release = '2.11.0'
+pyosmium_release = '2.11.1'
 
 # libosmium version shipped with the Pip release
-libosmium_version = '2.11.0'
+libosmium_version = '2.11.3'


More information about the Pkg-grass-devel mailing list