[pyosmium] 03/06: Imported Upstream version 2.11.1
Bas Couwenberg
sebastic at debian.org
Fri May 5 08:02:49 UTC 2017
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch stretch
in repository pyosmium.
commit e18970cbf3e5ac798c3f6e3f4a45503bdbd1345c
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Fri May 5 09:49:41 2017 +0200
Imported Upstream version 2.11.1
---
CHANGELOG.md | 16 ++++++++++-
lib/generic_handler.hpp | 71 ++++++++++++++++++++++++++++++++++---------------
lib/generic_writer.hpp | 9 ++++---
lib/index.cc | 9 +++++--
lib/osm.cc | 13 ++++++---
lib/osmium.cc | 24 ++++-------------
osmium/version.py | 4 +--
7 files changed, 94 insertions(+), 52 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ddc9423..0a3fffe 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,19 @@ This project adheres to [Semantic Versioning](http://semver.org/).
### 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 @@ This project adheres to [Semantic Versioning](http://semver.org/).
- 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 --git a/lib/generic_handler.hpp b/lib/generic_handler.hpp
index 46a2958..778d87f 100644
--- a/lib/generic_handler.hpp
+++ b/lib/generic_handler.hpp
@@ -104,45 +104,46 @@ using namespace boost::python;
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 @@ struct SimpleHandlerWrap: BaseHandler, wrapper<BaseHandler> {
{
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 @@ private:
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 --git a/lib/generic_writer.hpp b/lib/generic_writer.hpp
index 1dc7c4f..5840283 100644
--- a/lib/generic_writer.hpp
+++ b/lib/generic_writer.hpp
@@ -16,7 +16,9 @@ class SimpleWriterWrap {
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 @@ private:
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 @@ private:
osmium::io::Writer writer;
osmium::memory::Buffer buffer;
+ size_t buffer_size;
};
#endif // PYOSMIUM_GENERIC_WRITER_HPP
diff --git a/lib/index.cc b/lib/index.cc
index 981feeb..81b9f4f 100644
--- a/lib/index.cc
+++ b/lib/index.cc
@@ -12,9 +12,14 @@ LocationTable *create_map(const std::string& config_string) {
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 --git a/lib/osm.cc b/lib/osm.cc
index f9b8425..7ffef27 100644
--- a/lib/osm.cc
+++ b/lib/osm.cc
@@ -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 --git a/lib/osmium.cc b/lib/osmium.cc
index b1299f0..c598424 100644
--- a/lib/osmium.cc
+++ b/lib/osmium.cc
@@ -66,28 +66,14 @@ BOOST_PYTHON_MODULE(_osmium)
;
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 --git a/osmium/version.py b/osmium/version.py
index 92b5eb9..7644885 100644
--- a/osmium/version.py
+++ b/osmium/version.py
@@ -5,7 +5,7 @@ Version information.
# 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'
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pyosmium.git
More information about the Pkg-grass-devel
mailing list