[python-mapnik] 01/04: Imported Upstream version 0.0~20151010-b223124

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Sat Oct 10 15:45:00 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository python-mapnik.

commit e03ba5efb0b511001d4d5d2f8a7acb94696aee53
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sat Oct 10 14:51:31 2015 +0200

    Imported Upstream version 0.0~20151010-b223124
---
 CONTRIBUTING.md                                | 125 +------------------------
 mapnik/__init__.py                             |  10 +-
 mapnik/printing.py                             |   4 +-
 test/python_tests/image_encoding_speed_test.py |   2 +-
 test/python_tests/postgis_test.py              |  49 ++++++++--
 5 files changed, 52 insertions(+), 138 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5dfb3ce..7f82239 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,130 +4,7 @@ General guidelines for contributing to python-mapnik
 
 ## Coding Conventions
 
-Much of python Mapnik is written in C++, and we try to follow general coding guidelines.
-
-If you see bits of code around that do not follow these please don't hesitate to flag the issue or correct it yourself.
-
-### C++ Style Guide
-
-#### Prefix cmath functions with std::
-
-The avoids ambiguity and potential bugs of using old C library math directly.
-
-So always do `std::abs()` instead of `abs()`. Here is a script to fix your code in one fell swoop:
-
-
-```sh
-DIR=./bindings
-for i in {abs,fabs,tan,sin,cos,floor,ceil,atan2,acos,asin}; do
-    find $DIR -type f -name '*.cpp' -or -name '*.h' -or -name '*.hpp' | xargs perl -i -p -e "s/ $i\(/ std::$i\(/g;"
-    find $DIR -type f -name '*.cpp' -or -name '*.h' -or -name '*.hpp' | xargs perl -i -p -e "s/\($i\(/\(std::$i\(/g;"
-done
-```
-
-#### Avoid boost::lexical_cast
-
-It's slow both to compile and at runtime.
-
-#### Avoid sstream objects if possible
-
-They should never be used in performance critical code because they trigger std::locale usage
-which triggers locks
-
-#### Spaces not tabs, and avoid trailing whitespace
-
-#### Indentation is four spaces
-
-#### Use C++ style casts
-
-    static_cast<int>(value); // yes
-
-    (int)value; // no
-
-
-#### Use const keyword after the type
-
-    std::string const& variable_name // preferred, for consistency
-
-    const std::string & variable_name // no
-
-
-#### Pass built-in types by value, all others by const&
-
-    void my_function(int double val); // if int, char, double, etc pass by value
-
-    void my_function(std::string const& val); // if std::string or user type, pass by const&
-
-#### Use unique_ptr instead of new/delete
-
-#### Use std::copy instead of memcpy
-
-#### When to use shared_ptr and unique_ptr
-
-Sparingly, always prefer passing objects as const& except where using share_ptr or unique_ptr express more clearly your intent. See http://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/ for more details.
-
-#### Shared pointers should be created with std::make_shared.
-
-#### Use assignment operator for zero initialized numbers
-
-    double num = 0; // please
-
-    double num(0); // no
-
-
-#### Function definitions should not be separated from their arguments:
-
-    void foo(int a) // please
-
-    void foo (int a) // no
-
-
-#### Separate arguments by a single space:
-
-    void foo(int a, float b) // please
-
-    void foo(int a,float b) // no
-
-
-#### Space between operators:
-
-    if (a == b) // please
-
-    if(a==b) // no
-
-
-#### Braces should always be used:
-
-    if (!file)
-    {
-        throw mapnik::datasource_exception("not found"); // please    
-    }
-
-    if (!file)
-        throw mapnik::datasource_exception("not found"); // no
-
-
-#### Braces should be on a separate line:
-
-    if (a == b)
-    {
-        int z = 5;
-        // more...
-    }
-
-
-#### Prefer `empty()` over `size() == 0` if container supports it
-
-This avoids implicit conversions to bool and reduces compiler warnings.
-
-    if (container.empty()) // please
-
-    if (container.size() == 0) // no
-
-
-### Other C++ style resources
-
-Many also follow the useful [Google style guide](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml) which mostly fits our style. However, Google obviously has to maintain a lot of aging codebases. Mapnik can move faster, so we don't follow all of those style recommendations.
+See the [Mapnik guide](https://github.com/mapnik/mapnik/blob/master/docs/contributing.md#coding-conventions).
 
 ### Python Style Guide
 
diff --git a/mapnik/__init__.py b/mapnik/__init__.py
index 25414c0..8c18496 100644
--- a/mapnik/__init__.py
+++ b/mapnik/__init__.py
@@ -193,7 +193,7 @@ class _Box2d(Box2d, _injector):
     Following operators are defined for Box2d:
 
     Addition:
-    e1 + e2 is equvalent to e1.expand_to_include(e2) but yields
+    e1 + e2 is equivalent to e1.expand_to_include(e2) but yields
     a new envelope instead of modifying e1
 
     Subtraction:
@@ -433,7 +433,7 @@ def PostGIS(**keywords):
     Optional db connection keyword arguments:
       user -- database user to connect as (default: see postgres docs)
       password -- password for database user (default: see postgres docs)
-      host -- portgres hostname (default: see postgres docs)
+      host -- postgres hostname (default: see postgres docs)
       port -- postgres port (default: see postgres docs)
       initial_size -- integer size of connection pool (default: 1)
       max_size -- integer max of connection pool (default: 10)
@@ -476,7 +476,7 @@ def PgRaster(**keywords):
     Optional db connection keyword arguments:
       user -- database user to connect as (default: see postgres docs)
       password -- password for database user (default: see postgres docs)
-      host -- portgres hostname (default: see postgres docs)
+      host -- postgres hostname (default: see postgres docs)
       port -- postgres port (default: see postgres docs)
       initial_size -- integer size of connection pool (default: 1)
       max_size -- integer max of connection pool (default: 10)
@@ -630,7 +630,7 @@ def SQLite(**keywords):
       base -- path prefix (default None)
       encoding -- file encoding (default 'utf-8')
       extent -- manually specified data extent (comma delimited string, default None)
-      metadata -- name of auxillary table containing record for table with xmin, ymin, xmax, ymax, and f_table_name
+      metadata -- name of auxiliary table containing record for table with xmin, ymin, xmax, ymax, and f_table_name
       geometry_field -- name of geometry field (default 'the_geom')
       key_field -- name of primary key field (default 'OGC_FID')
       row_offset -- specify a custom integer row offset (default 0)
@@ -738,7 +738,7 @@ class PythonDatasource(object):
         return None
 
     def features_at_point(self, point):
-        """Rarely uses. Return an iterable which yields instances of Feature for the specified point."""
+        """Rarely used. Return an iterable which yields instances of Feature for the specified point."""
         return None
 
     @classmethod
diff --git a/mapnik/printing.py b/mapnik/printing.py
index 4519e79..e2f975d 100644
--- a/mapnik/printing.py
+++ b/mapnik/printing.py
@@ -1023,8 +1023,8 @@ class PDFPrinter:
         ctx: A cairo context to render the legend to. If this is None (the default) then
             automatically create a context and choose the best location for the legend.
         width: Width of area available to render legend in (in m)
-        page_break: move to next page if legen over flows this one
-        collumns: number of collumns available in legend box
+        page_break: move to next page if legend overflows this one
+        collumns: number of columns available in legend box
         attribution: additional text that will be rendered in gray under the layer name. keyed by layer name
         legend_item_box_size:  two tuple with width and height of legend item box size in meters
 
diff --git a/test/python_tests/image_encoding_speed_test.py b/test/python_tests/image_encoding_speed_test.py
index 58f0785..13b824b 100644
--- a/test/python_tests/image_encoding_speed_test.py
+++ b/test/python_tests/image_encoding_speed_test.py
@@ -113,7 +113,7 @@ def do_encoding():
             t = Timer(aerial_24)
             run(aerial_24, aerial_24_im, c, t)
 
-    for key, value in sorted(sortable.iteritems(), key=lambda k, v: (v, k)):
+    for key, value in sorted(sortable.items(), key=lambda i: (i[1], i[0])):
         s = results[key]
         min_ = str(s[0])[:6]
         avg = str(s[1])[:6]
diff --git a/test/python_tests/postgis_test.py b/test/python_tests/postgis_test.py
index d9a6f10..08dd5f7 100644
--- a/test/python_tests/postgis_test.py
+++ b/test/python_tests/postgis_test.py
@@ -433,7 +433,9 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                             geometry_field='geom',
                             autodetect_key_field=True)
         fs = ds.featureset()
-        eq_(fs.next()['manual_id'], 0)
+        f = fs.next()
+        eq_(len(ds.fields()),len(f.attributes))
+        eq_(f['manual_id'], 0)
         eq_(fs.next()['manual_id'], 1)
         eq_(fs.next()['manual_id'], 1000)
         eq_(fs.next()['manual_id'], -1000)
@@ -452,6 +454,27 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
         eq_(meta.get('key_field'), u'manual_id')
         eq_(meta['geometry_type'], mapnik.DataGeometryType.Point)
 
+    def test_auto_detection_of_unique_feature_id_32_bit_no_attribute():
+        ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME, table='test2',
+                            geometry_field='geom',
+                            autodetect_key_field=True,
+                            key_field_as_attribute=False)
+        fs = ds.featureset()
+        f = fs.next()
+        eq_(len(ds.fields()),len(f.attributes))
+        eq_(len(ds.fields()),0)
+        eq_(len(f.attributes),0)
+        eq_(f.id(), 0)
+        eq_(fs.next().id(), 1)
+        eq_(fs.next().id(), 1000)
+        eq_(fs.next().id(), -1000)
+        eq_(fs.next().id(), 2147483647)
+        eq_(fs.next().id(), -2147483648)
+        meta = ds.describe()
+        eq_(meta['srid'], 4326)
+        eq_(meta.get('key_field'), u'manual_id')
+        eq_(meta['geometry_type'], mapnik.DataGeometryType.Point)
+
     def test_auto_detection_will_fail_since_no_primary_key():
         ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME, table='test3',
                             geometry_field='geom',
@@ -459,8 +482,7 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
         fs = ds.featureset()
         feat = fs.next()
         eq_(feat['manual_id'], 0)
-        # will fail: https://github.com/mapnik/mapnik/issues/895
-        # eq_(feat['non_id'],9223372036854775807)
+        eq_(feat['non_id'],9223372036854775807)
         eq_(fs.next()['manual_id'], 1)
         eq_(fs.next()['manual_id'], 1000)
         eq_(fs.next()['manual_id'], -1000)
@@ -494,7 +516,9 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                             geometry_field='geom',
                             autodetect_key_field=True)
         fs = ds.featureset()
-        eq_(fs.next()['manual_id'], 0)
+        f = fs.next()
+        eq_(len(ds.fields()),len(f.attributes))
+        eq_(f['manual_id'], 0)
         eq_(fs.next()['manual_id'], 1)
         eq_(fs.next()['manual_id'], 1000)
         eq_(fs.next()['manual_id'], -1000)
@@ -548,7 +572,9 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                             geometry_field='geom',
                             autodetect_key_field=True)
         fs = ds.featureset()
-        eq_(fs.next()['manual_id'], 0)
+        f = fs.next()
+        eq_(len(ds.fields()),len(f.attributes))
+        eq_(f['manual_id'], 0)
         eq_(fs.next()['manual_id'], 1)
         eq_(fs.next()['manual_id'], 1000)
         eq_(fs.next()['manual_id'], -1000)
@@ -592,7 +618,9 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
                             key_field='manual_id',
                             autodetect_key_field=True)
         fs = ds.featureset()
-        eq_(fs.next()['manual_id'], 0)
+        f = fs.next()
+        eq_(len(ds.fields()),len(f.attributes))
+        eq_(f['manual_id'], 0)
         eq_(fs.next()['manual_id'], 1)
         eq_(fs.next()['manual_id'], 1000)
         eq_(fs.next()['manual_id'], -1000)
@@ -1211,6 +1239,15 @@ if 'postgis' in mapnik.DatasourceCache.plugin_names() \
         eq_(feat.geometry.to_wkt(),
             'MULTIPOLYGON(((0 0,1 1,2 2,0 0)),((0 0,1 1,2 2,0 0)))')
 
+    def test_handling_of_discarded_key_field():
+        ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME,
+                            table='(select * from test12) as tmp',
+                            key_field='gid',
+                            key_field_as_attribute=False)
+        fs = ds.featureset()
+        feat = fs.next()
+        eq_(feat['name'],'Point')
+
     def test_variable_in_subquery1():
         ds = mapnik.PostGIS(dbname=MAPNIK_TEST_DBNAME, table='''
            (select * from test where @zoom = 30 ) as tmp''',

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/python-mapnik.git



More information about the Pkg-grass-devel mailing list