Fix errors from make test

One Python 2.7 error in the test (didn’t work for points)

Also fixed all the formatting errors raised by flake8
This commit is contained in:
Henry Walshaw 2019-07-29 10:24:02 +10:00
parent 9586e7bcf1
commit 66f8bdb45e
2 changed files with 48 additions and 30 deletions

View file

@ -30,8 +30,9 @@ class GeoRSSPolygonInteriorWarning(Warning):
def __str__(self): def __str__(self):
return '{:d} interiors of polygon ignored'.format( return '{:d} interiors of polygon ignored'.format(
len(self.geom.__geo_interface__['coordinates']) - 1 # ignore exterior in count len(self.geom.__geo_interface__['coordinates']) - 1
) ) # ignore exterior in count
class GeoRSSGeometryError(ValueError): class GeoRSSGeometryError(ValueError):
""" """
@ -39,7 +40,6 @@ class GeoRSSGeometryError(ValueError):
Only some geometries are supported in Simple GeoRSS, so if not raise an Only some geometries are supported in Simple GeoRSS, so if not raise an
error. Offending geometry is stored on the ``geom`` attribute. error. Offending geometry is stored on the ``geom`` attribute.
""" """
def __init__(self, geom, *args, **kwargs): def __init__(self, geom, *args, **kwargs):
@ -47,7 +47,8 @@ class GeoRSSGeometryError(ValueError):
super(GeoRSSGeometryError, self).__init__(*args, **kwargs) super(GeoRSSGeometryError, self).__init__(*args, **kwargs)
def __str__(self): def __str__(self):
return "Geometry of type '{}' not in Point, Linestring or Polygon".format( msg = "Geometry of type '{}' not in Point, Linestring or Polygon"
return msg.format(
self.geom.__geo_interface__['type'] self.geom.__geo_interface__['type']
) )
@ -101,11 +102,17 @@ class GeoEntryExtension(BaseEntryExtension):
box.text = self.__box box.text = self.__box
if self.__featuretypetag: if self.__featuretypetag:
featuretypetag = etree.SubElement(entry, '{%s}featuretypetag' % GEO_NS) featuretypetag = etree.SubElement(
entry,
'{%s}featuretypetag' % GEO_NS
)
featuretypetag.text = self.__featuretypetag featuretypetag.text = self.__featuretypetag
if self.__relationshiptag: if self.__relationshiptag:
relationshiptag = etree.SubElement(entry, '{%s}relationshiptag' % GEO_NS) relationshiptag = etree.SubElement(
entry,
'{%s}relationshiptag' % GEO_NS
)
relationshiptag.text = self.__relationshiptag relationshiptag.text = self.__relationshiptag
if self.__featurename: if self.__featurename:
@ -147,7 +154,8 @@ class GeoEntryExtension(BaseEntryExtension):
def line(self, line=None): def line(self, line=None):
'''Get or set the georss:line of the entry '''Get or set the georss:line of the entry
:param point: The GeoRSS formatted line (i.e. "45.256 -110.45 46.46 -109.48 43.84 -109.86") :param point: The GeoRSS formatted line (i.e. "45.256 -110.45 46.46
-109.48 43.84 -109.86")
:return: The current georss:line of the entry :return: The current georss:line of the entry
''' '''
if line is not None: if line is not None:
@ -158,7 +166,8 @@ class GeoEntryExtension(BaseEntryExtension):
def polygon(self, polygon=None): def polygon(self, polygon=None):
'''Get or set the georss:polygon of the entry '''Get or set the georss:polygon of the entry
:param polygon: The GeoRSS formatted polygon (i.e. "45.256 -110.45 46.46 -109.48 43.84 -109.86 45.256 -110.45") :param polygon: The GeoRSS formatted polygon (i.e. "45.256 -110.45
46.46 -109.48 43.84 -109.86 45.256 -110.45")
:return: The current georss:polygon of the entry :return: The current georss:polygon of the entry
''' '''
if polygon is not None: if polygon is not None:
@ -170,7 +179,8 @@ class GeoEntryExtension(BaseEntryExtension):
''' '''
Get or set the georss:box of the entry Get or set the georss:box of the entry
:param box: The GeoRSS formatted box (i.e. "42.943 -71.032 43.039 -69.856") :param box: The GeoRSS formatted box (i.e. "42.943 -71.032 43.039
-69.856")
:return: The current georss:box of the entry :return: The current georss:box of the entry
''' '''
if box is not None: if box is not None:
@ -194,7 +204,8 @@ class GeoEntryExtension(BaseEntryExtension):
''' '''
Get or set the georss:relationshiptag of the entry Get or set the georss:relationshiptag of the entry
:param relationshiptag: The GeoRSS relationshiptag (e.g. "is-centred-at") :param relationshiptag: The GeoRSS relationshiptag (e.g.
"is-centred-at")
:return: the current georss:relationshiptag :return: the current georss:relationshiptag
''' '''
if relationshiptag is not None: if relationshiptag is not None:
@ -256,7 +267,9 @@ class GeoEntryExtension(BaseEntryExtension):
''' '''
if radius is not None: if radius is not None:
if not isinstance(radius, numbers.Number): if not isinstance(radius, numbers.Number):
raise ValueError("radius tag must be numeric: {}".format(radius)) raise ValueError(
"radius tag must be numeric: {}".format(radius)
)
self.__radius = radius self.__radius = radius
@ -268,13 +281,13 @@ class GeoEntryExtension(BaseEntryExtension):
``__geo_interface__`` property (see the `geo_interface specification by ``__geo_interface__`` property (see the `geo_interface specification by
Sean Gillies`_geointerface ) Sean Gillies`_geointerface )
Note only a subset of GeoJSON (see `geojson.org`_geojson ) can be easily Note only a subset of GeoJSON (see `geojson.org`_geojson ) can be
converted to GeoRSS: easily converted to GeoRSS:
- Point - Point
- LineString - LineString
- Polygon (if there are holes / donuts in the polygons a warning will be - Polygon (if there are holes / donuts in the polygons a warning will
generaated be generaated
Other GeoJson types will raise a ``ValueError``. Other GeoJson types will raise a ``ValueError``.

View file

@ -5,7 +5,7 @@ import warnings
from lxml import etree from lxml import etree
from feedgen.feed import FeedGenerator from feedgen.feed import FeedGenerator
from feedgen.ext.geo_entry import GeoRSSPolygonInteriorWarning, GeoRSSGeometryError from feedgen.ext.geo_entry import GeoRSSPolygonInteriorWarning, GeoRSSGeometryError # noqa: E501
class Geom(object): class Geom(object):
@ -78,19 +78,22 @@ class TestExtensionGeo(unittest.TestCase):
def setUpClass(cls): def setUpClass(cls):
cls.point = Geom('Point', [-71.05, 42.36]) cls.point = Geom('Point', [-71.05, 42.36])
cls.line = Geom('LineString', [[-71.05, 42.36], [-71.15, 42.46]]) cls.line = Geom('LineString', [[-71.05, 42.36], [-71.15, 42.46]])
cls.polygon = Geom('Polygon', [[[-71.05, 42.36], [-71.15, 42.46], [-71.15, 42.36]]]) cls.polygon = Geom(
'Polygon',
[[[-71.05, 42.36], [-71.15, 42.46], [-71.15, 42.36]]]
)
cls.box = Geom('Box', [[-71.05, 42.36], [-71.15, 42.46]]) cls.box = Geom('Box', [[-71.05, 42.36], [-71.15, 42.46]])
cls.polygon_with_interior = Geom( cls.polygon_with_interior = Geom(
'Polygon', 'Polygon',
[ [
[ # exterior [ # exterior
[0, 0], [0, 0],
[0, 1], [0, 1],
[1, 1], [1, 1],
[1, 0], [1, 0],
[0, 0] [0, 0]
], ],
[ # interior [ # interior
[0.25, 0.25], [0.25, 0.25],
[0.25, 0.75], [0.25, 0.75],
[0.75, 0.75], [0.75, 0.75],
@ -131,8 +134,10 @@ class TestExtensionGeo(unittest.TestCase):
# Check that we have the item in the resulting XML # Check that we have the item in the resulting XML
ns = {'georss': 'http://www.georss.org/georss'} ns = {'georss': 'http://www.georss.org/georss'}
root = etree.fromstring(self.fg.rss_str()) root = etree.fromstring(self.fg.rss_str())
line = root.xpath('/rss/channel/item/georss:line/text()', line = root.xpath(
namespaces=ns) '/rss/channel/item/georss:line/text()',
namespaces=ns
)
self.assertEqual(line, [str(self.line)]) self.assertEqual(line, [str(self.line)])
def test_polygon(self): def test_polygon(self):
@ -145,8 +150,10 @@ class TestExtensionGeo(unittest.TestCase):
# Check that we have the item in the resulting XML # Check that we have the item in the resulting XML
ns = {'georss': 'http://www.georss.org/georss'} ns = {'georss': 'http://www.georss.org/georss'}
root = etree.fromstring(self.fg.rss_str()) root = etree.fromstring(self.fg.rss_str())
poly = root.xpath('/rss/channel/item/georss:polygon/text()', poly = root.xpath(
namespaces=ns) '/rss/channel/item/georss:polygon/text()',
namespaces=ns
)
self.assertEqual(poly, [str(self.polygon)]) self.assertEqual(poly, [str(self.polygon)])
def test_box(self): def test_box(self):
@ -159,8 +166,10 @@ class TestExtensionGeo(unittest.TestCase):
# Check that we have the item in the resulting XML # Check that we have the item in the resulting XML
ns = {'georss': 'http://www.georss.org/georss'} ns = {'georss': 'http://www.georss.org/georss'}
root = etree.fromstring(self.fg.rss_str()) root = etree.fromstring(self.fg.rss_str())
box = root.xpath('/rss/channel/item/georss:box/text()', box = root.xpath(
namespaces=ns) '/rss/channel/item/georss:box/text()',
namespaces=ns
)
self.assertEqual(box, [str(self.box)]) self.assertEqual(box, [str(self.box)])
def test_featuretypetag(self): def test_featuretypetag(self):
@ -307,11 +316,9 @@ class TestExtensionGeo(unittest.TestCase):
except AttributeError: # was assertItemsEqual in Python 2.7 except AttributeError: # was assertItemsEqual in Python 2.7
self.assertItemsEqual( self.assertItemsEqual(
coords, coords,
list(chain.from_iterable(self.point.coords)) self.point.coords
) )
def test_geom_from_geointerface_line(self): def test_geom_from_geointerface_line(self):
fe = self.fg.add_item() fe = self.fg.add_item()
fe.title('y') fe.title('y')
@ -339,7 +346,6 @@ class TestExtensionGeo(unittest.TestCase):
list(chain.from_iterable(self.line.coords)) list(chain.from_iterable(self.line.coords))
) )
def test_geom_from_geointerface_poly(self): def test_geom_from_geointerface_poly(self):
fe = self.fg.add_item() fe = self.fg.add_item()
fe.title('y') fe.title('y')
@ -381,7 +387,6 @@ class TestExtensionGeo(unittest.TestCase):
with self.assertRaises(AttributeError): with self.assertRaises(AttributeError):
fe.geo.geom_from_geo_interface(str(self.box)) fe.geo.geom_from_geo_interface(str(self.box))
def test_geom_from_geointerface_warn_poly_interior(self): def test_geom_from_geointerface_warn_poly_interior(self):
""" """
Test complex polygons warn as expected. Taken from Test complex polygons warn as expected. Taken from