[pyshp] 01/06: New upstream version 1.2.12+ds

Bas Couwenberg sebastic at debian.org
Thu Aug 24 21:10:10 UTC 2017


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

sebastic pushed a commit to branch master
in repository pyshp.

commit d004ac68b0134ec3a83607cff59d284066ca189f
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Thu Aug 24 22:57:23 2017 +0200

    New upstream version 1.2.12+ds
---
 PKG-INFO                    |   2 +-
 changelog.txt               |   6 ++++++
 setup.cfg                   |   4 ++--
 setup.py                    |   2 +-
 shapefile.py                |  49 ++++++++++++++++++++++++++++++++++++--------
 shapefiles/test/dtype.dbf   | Bin 77 -> 77 bytes
 shapefiles/test/line.dbf    | Bin 2122 -> 2122 bytes
 shapefiles/test/point.dbf   | Bin 299 -> 299 bytes
 shapefiles/test/polygon.dbf | Bin 198 -> 198 bytes
 9 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 66dc8fc..85f9094 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pyshp
-Version: 1.2.11
+Version: 1.2.12
 Summary: Pure Python read/write support for ESRI Shapefile format
 Home-page: https://github.com/GeospatialPython/pyshp
 Author: Joel Lawhead
diff --git a/changelog.txt b/changelog.txt
index 9ff0a00..f7785ee 100644
--- a/changelog.txt
+++ b/changelog.txt
@@ -1,3 +1,9 @@
+VERSION 1.2.12
+
+2017-08-24 Karim Bahgat <karim.bahgat.norway at gmail.com> 
+	* Fixed errors caused by strict value type checking, as introduced in v1.2.11. Now more lenient by attempting force conversion of values to match the field type. 
+	* Allow reading file-like objects without seek method (such as ZipFile or urllib.urlopen). 
+
 VERSION 1.2.11
 
 2017-04-29 Karim Bahgat <karim.bahgat.norway at gmail.com>
diff --git a/setup.cfg b/setup.cfg
index 861a9f5..72f9d44 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
 [egg_info]
-tag_build = 
-tag_date = 0
 tag_svn_revision = 0
+tag_date = 0
+tag_build = 
 
diff --git a/setup.py b/setup.py
index 9acd4f7..09a667b 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup
 
 setup(name='pyshp',
-      version='1.2.11',
+      version='1.2.12',
       description='Pure Python read/write support for ESRI Shapefile format',
       long_description=open('README.md').read(),
       author='Joel Lawhead',
diff --git a/shapefile.py b/shapefile.py
index c3eb89e..dbf846a 100644
--- a/shapefile.py
+++ b/shapefile.py
@@ -2,12 +2,12 @@
 shapefile.py
 Provides read and write support for ESRI Shapefiles.
 author: jlawhead<at>geospatialpython.com
-date: 2017/04/29
-version: 1.2.11
+date: 2017/08/24
+version: 1.2.12
 Compatible with Python versions 2.7-3.x
 """
 
-__version__ = "1.2.11"
+__version__ = "1.2.12"
 
 from struct import pack, unpack, calcsize, error, Struct
 import os
@@ -16,6 +16,7 @@ import time
 import array
 import tempfile
 import itertools
+import io
 from datetime import date
 
 #
@@ -238,23 +239,35 @@ class Reader:
         if "shp" in kwargs.keys():
             if hasattr(kwargs["shp"], "read"):
                 self.shp = kwargs["shp"]
-                if hasattr(self.shp, "seek"):
+                # Copy if required
+                try:
                     self.shp.seek(0)
+                except (NameError, io.UnsupportedOperation):
+                    self.shp = io.BytesIO(self.shp.read())
             if "shx" in kwargs.keys():
                 if hasattr(kwargs["shx"], "read"):
                     self.shx = kwargs["shx"]
-                    if hasattr(self.shx, "seek"):
+                    # Copy if required
+                    try:
                         self.shx.seek(0)
+                    except (NameError, io.UnsupportedOperation):
+                        self.shx = io.BytesIO(self.shx.read())
         if "dbf" in kwargs.keys():
             if hasattr(kwargs["dbf"], "read"):
                 self.dbf = kwargs["dbf"]
-                if hasattr(self.dbf, "seek"):
+                # Copy if required
+                try:
                     self.dbf.seek(0)
+                except (NameError, io.UnsupportedOperation):
+                    self.dbf = io.BytesIO(self.dbf.read())
         if self.shp or self.dbf:        
             self.load()
         else:
             raise ShapefileException("Shapefile Reader requires a shapefile or file-like object.")
 
+
+
+
     def load(self, shapefile=None):
         """Opens a shapefile from a filename or file-like
         object. Normally this method would be called by the
@@ -509,11 +522,19 @@ class Reader:
                         #not parseable as float, set to None
                         value = None
                 else:
+                    # force to int
                     try:
-                        value = int(value)
+                        # first try to force directly to int.
+                        # forcing a large int to float and back to int
+                        # will lose information and result in wrong nr.
+                        value = int(value) 
                     except ValueError:
-                        #not parseable as int, set to None
-                        value = None
+                        # forcing directly to int failed, so was probably a float.
+                        try:
+                            value = int(float(value))
+                        except ValueError:
+                            #not parseable as int, set to None
+                            value = None
             elif typ == 'D':
                 # date: 8 bytes - date stored as a string in the format YYYYMMDD.
                 if value.count(b('0')) == len(value):  # QGIS NULL is all '0' chars
@@ -932,8 +953,18 @@ class Writer:
                     if value in MISSING:
                         value = str("*"*size) # QGIS NULL
                     elif not deci:
+                        # force to int
+                        try:
+                            # first try to force directly to int.
+                            # forcing a large int to float and back to int
+                            # will lose information and result in wrong nr.
+                            value = int(value) 
+                        except ValueError:
+                            # forcing directly to int failed, so was probably a float.
+                            value = int(float(value))
                         value = format(value, "d")[:size].rjust(size) # caps the size if exceeds the field size
                     else:
+                        value = float(value)
                         value = format(value, ".%sf"%deci)[:size].rjust(size) # caps the size if exceeds the field size
                 elif fieldType == "D":
                     # date: 8 bytes - date stored as a string in the format YYYYMMDD.
diff --git a/shapefiles/test/dtype.dbf b/shapefiles/test/dtype.dbf
index 8226836..e3e9e9f 100644
Binary files a/shapefiles/test/dtype.dbf and b/shapefiles/test/dtype.dbf differ
diff --git a/shapefiles/test/line.dbf b/shapefiles/test/line.dbf
index 72ac67f..27b0618 100644
Binary files a/shapefiles/test/line.dbf and b/shapefiles/test/line.dbf differ
diff --git a/shapefiles/test/point.dbf b/shapefiles/test/point.dbf
index c77d097..726e40d 100644
Binary files a/shapefiles/test/point.dbf and b/shapefiles/test/point.dbf differ
diff --git a/shapefiles/test/polygon.dbf b/shapefiles/test/polygon.dbf
index 184088d..c1ed498 100644
Binary files a/shapefiles/test/polygon.dbf and b/shapefiles/test/polygon.dbf differ

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



More information about the Pkg-grass-devel mailing list