Permalink
Browse files

Merge pull request #1331 from rjw57/rjw57-janitor

python bindings: export Query.resolution property as a tuple
  • Loading branch information...
2 parents 516f7c7 + 7b3baee commit ffbbdff764f178a539ad8874311af9c12e23b0f7 @artemp artemp committed Jul 20, 2012
Showing with 51 additions and 0 deletions.
  1. +18 −0 bindings/python/mapnik_query.cpp
  2. +33 −0 tests/python_tests/query_test.py
@@ -30,6 +30,8 @@
using mapnik::query;
using mapnik::box2d;
+namespace python = boost::python;
+
struct query_pickle_suite : boost::python::pickle_suite
{
static boost::python::tuple
@@ -39,10 +41,26 @@ struct query_pickle_suite : boost::python::pickle_suite
}
};
+struct resolution_to_tuple
+{
+ static PyObject* convert(query::resolution_type const& x)
+ {
+ python::object tuple(python::make_tuple(x.get<0>(), x.get<1>()));
+ return python::incref(tuple.ptr());
+ }
+
+ static PyTypeObject const* get_pytype()
+ {
+ return &PyTuple_Type;
+ }
+};
+
void export_query()
{
using namespace boost::python;
+ to_python_converter<query::resolution_type, resolution_to_tuple> ();
+
class_<query>("Query", "a spatial query data object",
init<box2d<double>,query::resolution_type const&,double>() )
.def(init<box2d<double> >())
@@ -0,0 +1,33 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os, mapnik
+
+from nose.tools import *
+from utilities import execution_path
+
+def setup():
+ # All of the paths used are relative, if we run the tests
+ # from another directory we need to chdir()
+ os.chdir(execution_path('.'))
+
+def test_query_init():
+ bbox = (-180, -90, 180, 90)
+ query = mapnik.Query(mapnik.Box2d(*bbox))
+ r = query.resolution
+ assert_almost_equal(r[0], 1.0, places=7)
+ assert_almost_equal(r[1], 1.0, places=7)
+
+# Converting *from* tuples *to* resolutions is not yet supported
+@raises(TypeError)
+def test_query_resolution():
+ bbox = (-180, -90, 180, 90)
+ init_res = (4.5, 6.7)
+ query = mapnik.Query(mapnik.Box2d(*bbox), init_res)
+ r = query.resolution
+ assert_almost_equal(r[0], init_res[0], places=7)
+ assert_almost_equal(r[1], init_res[1], places=7)
+
+if __name__ == "__main__":
+ setup()
+ [eval(run)() for run in dir() if 'test_' in run]

0 comments on commit ffbbdff

Please sign in to comment.