diff options
Diffstat (limited to 'chimere/utils.py')
-rw-r--r-- | chimere/utils.py | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/chimere/utils.py b/chimere/utils.py index 37c580f..f8b7bf5 100644 --- a/chimere/utils.py +++ b/chimere/utils.py @@ -78,7 +78,7 @@ class ImportManager(object): def create_or_update_item(self, cls, values, import_key, version=None, key='', pk=None, category=None): - from models import PropertyModel + from chimere.models import PropertyModel updated, created, item = False, False, None import_key = str(import_key).replace(':', '^') if not values.get('name'): @@ -189,7 +189,9 @@ class ImportManager(object): def get_source_file(self, suffixes, dest_dir=None, extra_url=None): source = self.importer_instance.source_file - if not hasattr(source, 'read'): + try: + source.read + except ValueError: if not source: source = self.importer_instance.source \ if self.importer_instance.source else self.default_source @@ -207,13 +209,13 @@ class ImportManager(object): except IOError as msg: return (None, msg) except (urllib.error.URLError, AttributeError) as error: - return (None, error.message) + return (None, str(error)) if self.importer_instance.zipped: try: files = self.get_files_inside_zip(source, suffixes, dest_dir) except zipfile.BadZipfile: return (None, _(u"Bad zip file")) - if not files or None in files: + if not files or None in files or [] in files: return (None, _(u"Missing file(s) inside the zip file")) source = files[0] if len(suffixes) == 1 else files @@ -242,7 +244,7 @@ class KMLManager(ImportManager): - number of item updated ; - error detail on error """ - from models import Marker, Route + from chimere.models import Marker, Route new_item, updated_item, msg = 0, 0, '' source, msg = self.get_source_file(['.kml']) if msg: @@ -342,9 +344,11 @@ class ShapefileManager(ImportManager): The filtr argument allow to specify match between the shapefile cols and the db. JSON format is used. """ - from models import Marker, Route, Polygon + from chimere.models import Marker, Route, Polygon new_item, updated_item, msg = 0, 0, '' tmpdir = tempfile.mkdtemp() + res = self.get_source_file(['.shp', '.dbf', '.prj', '.shx'], + dest_dir=tmpdir) sources, msg = self.get_source_file(['.shp', '.dbf', '.prj', '.shx'], dest_dir=tmpdir) if msg: @@ -534,7 +538,7 @@ class ShapefileManager(ImportManager): # writing to a zip file filename = unicode_normalize(settings.PROJECT_NAME) + '-' + date - buff = io.StringIO() + buff = io.BytesIO() zip_file = zipfile.ZipFile(buff, 'w', zipfile.ZIP_DEFLATED) suffixes = ['shp', 'shx', 'prj', 'dbf'] for suffix in suffixes: @@ -573,7 +577,7 @@ class CSVManager(ImportManager): - number of item updated ; - error detail on error """ - from models import Marker, Route + from chimere.models import Marker, Route new_item, updated_item, msg = 0, 0, '' source, msg = self.get_source_file(['.csv']) if msg: @@ -666,7 +670,7 @@ class GeoRSSManager(ImportManager): - number of item updated ; - error detail on error """ - from models import Marker, Route + from chimere.models import Marker, Route new_item, updated_item, msg = 0, 0, '' feed = feedparser.parse(self.importer_instance.source) if feed['bozo'] and not isinstance( @@ -750,19 +754,19 @@ class JsonManager(ImportManager): - number of item updated ; - error detail on error """ - from models import Marker + from chimere.models import Marker new_item, updated_item, msg = 0, 0, '' source, msg = self.get_source_file(['.json']) if msg: return (0, 0, msg) - vals = source.read().replace('\n', ' ') + vals = str(source.read()).replace('\n', ' ') try: values = json.JSONDecoder( object_pairs_hook=collections.OrderedDict).decode(vals) except ValueError as e: return (new_item, updated_item, - _(u"JSON file is not well formed: " + e.message)) + _(u"JSON file is not well formed: ") + str(e)) # configuration in filtr try: filtr = json.JSONDecoder().decode(self.importer_instance.filtr) @@ -946,7 +950,7 @@ class OSMManager(ImportManager): def put(self, extra_args={}): # first of all: reimport in order to verify that no changes has been # made since the last import - from models import Marker + from chimere.models import Marker new_item, updated_item, msg = self.get() # check if import is possible if msg: @@ -1115,7 +1119,7 @@ class HtmlXsltManager(ImportManager): - updated items; - error detail on error. """ - from models import Marker + from chimere.models import Marker self.marker_cls = Marker try: main_page = urllib.request.urlopen(self.importer_instance.source) @@ -1307,7 +1311,7 @@ class IcalManager(ImportManager): u""" Get data from an icalendar source """ - from models import Marker + from chimere.models import Marker new_item, updated_item, msg = 0, 0, '' source, msg = self.get_source_file([]) if msg: @@ -1318,7 +1322,7 @@ class IcalManager(ImportManager): cal = icalendar.Calendar.from_ical(data) except ValueError as e: return (new_item, updated_item, - _(u"Error on icalendar parsing: " + e.message)) + _(u"Error on icalendar parsing: ") + str(e)) default_dct = {'origin': self.importer_instance.origin, 'license': self.importer_instance.license} @@ -1339,7 +1343,7 @@ class IcalManager(ImportManager): url = event.get('URL', None) if url: dct['description'] += u"<br/><a href='{}'>{}</a>".format( - str(url), unicode(_('Link'))) + str(url), str(_('Link'))) dct['start_date'] = event.get('DTSTART', None) if dct['start_date']: dct['start_date'] = event.decoded('DTSTART') |