Skip to content

Commit

Permalink
Merge 01d559b into cf005f3
Browse files Browse the repository at this point in the history
  • Loading branch information
sourcery-ai[bot] committed Jul 15, 2020
2 parents cf005f3 + 01d559b commit 969a3fd
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 65 deletions.
8 changes: 4 additions & 4 deletions README.rst
Expand Up @@ -34,11 +34,11 @@ Fastkml is continually tested with *Travis CI*:

Is Maintained and documented:

.. image:: https://pypip.in/v/fastkml/badge.png
.. image:: https://img.shields.io/pypi/v/fastkml.svg
:target: https://pypi.python.org/pypi/fastkml
:alt: Latest PyPI version

.. image:: https://pypip.in/status/fastkml/badge.svg
.. image:: https://img.shields.io/pypi/status/fastkml.svg
:target: https://pypi.python.org/pypi/fastkml/
:alt: Development Status

Expand All @@ -56,11 +56,11 @@ Is Maintained and documented:

Supports python 2 and 3:

.. image:: https://pypip.in/py_versions/fastkml/badge.svg
.. image:: https://img.shields.io/pypi/pyversions/fastkml.svg
:target: https://pypi.python.org/pypi/fastkml/
:alt: Supported Python versions

.. image:: https://pypip.in/implementation/fastkml/badge.svg
.. image:: https://img.shields.io/pypi/implementation/fastkml.svg
:target: https://pypi.python.org/pypi/fastkml/
:alt: Supported Python implementations

Expand Down
10 changes: 8 additions & 2 deletions docs/usage_guide.rst
Expand Up @@ -93,7 +93,7 @@ Example how to build a simple KML file from the Python interpreter.
Read a KML File
Read a KML File/String
---------------

You can create a KML object by reading a KML file as a string
Expand All @@ -102,7 +102,13 @@ You can create a KML object by reading a KML file as a string
# Start by importing the kml module
>>> from fastkml import kml
#Read file into string and convert to UTF-8 (Python3 style)
>>> with open(kml_file, 'rt', encoding="utf-8") as myfile:
... doc=myfile.read()
# OR
# Setup the string which contains the KML file we want to read
>>> doc = """<?xml version="1.0" encoding="UTF-8"?>
... <kml xmlns="http://www.opengis.net/kml/2.2">
Expand Down
12 changes: 7 additions & 5 deletions fastkml/geometry.py
Expand Up @@ -132,10 +132,12 @@ def __init__(
def _set_altitude_mode(self, element):
if self.altitude_mode:
# XXX add 'relativeToSeaFloor', 'clampToSeaFloor',
assert(self.altitude_mode in [
'clampToGround',
'relativeToGround', 'absolute'
])
if self.altitude_mode not in ['clampToGround', 'relativeToGround',
'absolute']:
raise AssertionError("Altitude mode not in "
" not in clampToGround,"
"'relativeToGround' or"
"'absolute' mode")
if self.altitude_mode != 'clampToGround':
am_element = etree.SubElement(
element, "%saltitudeMode" % self.ns
Expand Down Expand Up @@ -393,7 +395,7 @@ def _get_multigeometry(self, element):
for lr in linearings:
self._get_geometry_spec(lr)
geoms.append(LinearRing(self._get_coordinates(lr)))
if len(geoms) > 0:
if geoms:
geom_types = []
for geom in geoms:
geom_types.append(geom.geom_type)
Expand Down
101 changes: 47 additions & 54 deletions fastkml/kml.py
Expand Up @@ -78,10 +78,7 @@ def __init__(self, ns=None):
"""
self._features = []

if ns is None:
self.ns = config.KMLNS
else:
self.ns = ns
self.ns = config.KMLNS if ns is None else ns

def from_string(self, xml_string):
""" create a KML object from a xml string"""
Expand Down Expand Up @@ -309,10 +306,7 @@ def timeStamp(self):

@timeStamp.setter
def timeStamp(self, dt):
if dt is None:
self._time_stamp = None
else:
self._time_stamp = TimeStamp(timestamp=dt)
self._time_stamp = None if dt is None else TimeStamp(timestamp=dt)
if self._time_span is not None:
logger.warn('Setting a TimeStamp, TimeSpan deleted')
self._time_span = None
Expand Down Expand Up @@ -404,24 +398,27 @@ def styles(self):

@property
def snippet(self):
if self._snippet:
if isinstance(self._snippet, dict):
text = self._snippet.get('text')
if text:
assert (isinstance(text, basestring))
max_lines = self._snippet.get('maxLines', None)
if max_lines is None:
return {'text': text}
elif int(max_lines) > 0:
# if maxLines <=0 ignore it
return {'text': text, 'maxLines': max_lines}
elif isinstance(self._snippet, basestring):
return self._snippet
else:
raise ValueError(
"Snippet must be dict of "
"{'text':t, 'maxLines':i} or string"
)
if not self._snippet:
return
if isinstance(self._snippet, dict):
text = self._snippet.get('text')
if text:
if not (isinstance(text, basestring)):
raise TypeError("text should be of"
"type basestring")
max_lines = self._snippet.get('maxLines', None)
if max_lines is None:
return {'text': text}
elif int(max_lines) > 0:
# if maxLines <=0 ignore it
return {'text': text, 'maxLines': max_lines}
elif isinstance(self._snippet, basestring):
return self._snippet
else:
raise ValueError(
"Snippet must be dict of "
"{'text':t, 'maxLines':i} or string"
)

@snippet.setter
def snippet(self, snip=None):
Expand Down Expand Up @@ -490,7 +487,9 @@ def etree_element(self):
if isinstance(self.snippet, basestring):
snippet.text = self.snippet
else:
assert (isinstance(self.snippet['text'], basestring))
if not (isinstance(self.snippet['text'], basestring)):
raise TypeError("text snippet should be of"
"type basestring")
snippet.text = self.snippet['text']
if self.snippet.get('maxLines'):
snippet.set('maxLines', str(self.snippet['maxLines']))
Expand Down Expand Up @@ -526,16 +525,10 @@ def from_element(self, element):
self.description = description.text
visibility = element.find('%svisibility' % self.ns)
if visibility is not None:
if visibility.text in ['1', 'true']:
self.visibility = 1
else:
self.visibility = 0
self.visibility = 1 if visibility.text in ['1', 'true'] else 0
isopen = element.find('%sopen' % self.ns)
if isopen is not None:
if isopen.text in ['1', 'true']:
self.isopen = 1
else:
self.isopen = 0
self.isopen = 1 if isopen.text in ['1', 'true'] else 0
styles = element.findall('%sStyle' % self.ns)
for style in styles:
s = Style(self.ns)
Expand Down Expand Up @@ -641,7 +634,9 @@ def append(self, kmlobj):
"Features must be instances of "
"(Folder, Placemark, Document)"
)
assert(kmlobj != self)
if kmlobj == self:
raise AssertionError(" kml object should not be instance of class"
"(self)")


class _Overlay(_Feature):
Expand All @@ -656,7 +651,7 @@ class _Overlay(_Feature):

_color = None
# Color values expressed in hexadecimal notation, including opacity (alpha)
# values. The order of expression is alpOverlayha, blue, green, red
# values. The order of expression is alphaOverlay, blue, green, red
# (AABBGGRR). The range of values for any one color is 0 to 255 (00 to ff).
# For opacity, 00 is fully transparent and ff is fully opaque.

Expand Down Expand Up @@ -830,7 +825,7 @@ def altitudeMode(self):
@altitudeMode.setter
def altitudeMode(self, mode):
if mode in ('clampToGround', 'absolute'):
self._altitudeMode = str(mode)
self._altitudeMode = str(mode)
else:
self._altitudeMode = 'clampToGround'

Expand Down Expand Up @@ -971,8 +966,7 @@ class Document(_Container):

def schemata(self):
if self._schemata:
for schema in self._schemata:
yield schema
yield from self._schemata

def append_schema(self, schema):
if self._schemata is None:
Expand Down Expand Up @@ -1098,7 +1092,7 @@ def from_element(self, element):

logger.warn('No geometries found')
logger.debug(u'Problem with element: {}'.format(etree.tostring(element)))
#raise ValueError('No geometries found')
# raise ValueError('No geometries found')

def etree_element(self):
element = super(Placemark, self).etree_element()
Expand Down Expand Up @@ -1161,7 +1155,7 @@ def parse_str(self, datestr):
year = int(datestr.split('-')[0])
month = int(datestr.split('-')[1])
dt = datetime(year, month, day)
elif len(datestr) == 8 or len(datestr) == 10:
elif len(datestr) in [8, 10]:
resolution = 'date'
dt = dateutil.parser.parse(datestr)
elif len(datestr) > 10:
Expand Down Expand Up @@ -1280,14 +1274,16 @@ def __init__(self, ns=None, id=None, name=None, fields=None):

@property
def simple_fields(self):
sfs = []
for simple_field in self._simple_fields:
if simple_field.get('type') and simple_field.get('name'):
sfs.append({
'type': simple_field['type'],
'name': simple_field['name'],
'displayName': simple_field.get('displayName')
})
sfs = [
{
'type': simple_field['type'],
'name': simple_field['name'],
'displayName': simple_field.get('displayName'),
}
for simple_field in self._simple_fields
if simple_field.get('type') and simple_field.get('name')
]

return tuple(sfs)

@simple_fields.setter
Expand Down Expand Up @@ -1352,10 +1348,7 @@ def from_element(self, element):
sfname = simple_field.get('name')
sftype = simple_field.get('type')
display_name = simple_field.find('%sdisplayName' % self.ns)
if display_name is not None:
sfdisplay_name = display_name.text
else:
sfdisplay_name = None
sfdisplay_name = display_name.text if display_name is not None else None
self.append(sftype, sfname, sfdisplay_name)

def etree_element(self):
Expand Down
1 change: 1 addition & 0 deletions setup.py
Expand Up @@ -25,6 +25,7 @@ def run_tests(self):
open("README.rst").read() + "\n" +
open(os.path.join("docs", "HISTORY.txt")).read()
),
long_description_content_type="text/x-rst",
classifiers=[
"Topic :: Scientific/Engineering :: GIS",
"Programming Language :: Python",
Expand Down

0 comments on commit 969a3fd

Please sign in to comment.