From c990ea7c38eaed78ec11842c236d440eda292f1e Mon Sep 17 00:00:00 2001 From: Étienne Loks Date: Fri, 18 Nov 2016 18:59:03 +0100 Subject: Many fix for python3 --- chimere/admin.py | 2 +- chimere/tests.py | 14 +++++++------- chimere/utils.py | 38 +++++++++++++++++++++----------------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/chimere/admin.py b/chimere/admin.py index 41ca53a..ddaf7a1 100644 --- a/chimere/admin.py +++ b/chimere/admin.py @@ -133,7 +133,7 @@ def managed_modified(modeladmin, request, queryset): updated.pop(k) for idx, cpl in enumerate(couple): it, it_ref = cpl - updated_keys = updated.keys() + updated_keys = list(updated.keys()) if it.status == 'I': updated_keys.append('import_version') for k in updated_keys: diff --git a/chimere/tests.py b/chimere/tests.py index 90e6143..e9f8e1f 100644 --- a/chimere/tests.py +++ b/chimere/tests.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- @@ -6,7 +6,7 @@ import datetime import lxml.etree import os from shutil import copyfile -import simplejson as json +import json test_path = os.path.abspath(__file__) test_dir_path = os.path.dirname(test_path) + os.sep @@ -428,17 +428,17 @@ class AdminTest(AdministratorsTest): m_nok = self.markers[2] self.client.login(username='mod_1', password='pass') response = self.client.get('/admin/chimere/marker/') - self.assertTrue(str(self.subcategories[1]) in response.content) + self.assertTrue(str(self.subcategories[1]) in str(response.content)) response = self.client.get('/admin/chimere/marker/{}/'.format(m_ok.pk)) self.assertEqual(200, response.status_code) - self.assertTrue(str(self.subcategories[1]) in response.content) + self.assertTrue(str(self.subcategories[1]) in str(response.content)) response = self.client.get( '/admin/chimere/marker/{}/'.format(m_nok.pk)) self.assertEqual(200, response.status_code) self.client.logout() self.client.login(username='mod_2', password='pass') response = self.client.get('/admin/chimere/marker/') - self.assertFalse(str(self.subcategories[1]) in response.content) + self.assertFalse(str(self.subcategories[1]) in str(response.content)) response = self.client.get('/admin/chimere/marker/{}/'.format(m_ok.pk)) self.assertEqual(200, response.status_code) # functionnality currently disabled @@ -562,7 +562,7 @@ class DynamicCategoryTest(TestCase): url = reverse('chimere:get_all_categories') response = self.client.get(url) self.assertEqual(200, response.status_code) - cats = json.loads(response.content)['categories'] + cats = json.loads(str(response.content, 'utf-8'))['categories'] self.assertEqual(len(cats), 5) @@ -639,7 +639,7 @@ class RapprochementTest(TestCase): ref_marker = Marker.objects.get(pk=ref_marker.pk) self.assertEqual(Marker.objects.filter(ref_item=ref_marker, status='I').count(), 0) - for k in new_vals.keys() + ['import_version']: + for k in list(new_vals.keys()) + ['import_version']: self.assertEqual(getattr(ref_marker, k), values[k]) def test_managed_modified_routes(self): 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"
{}".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') -- cgit v1.2.3