diff options
| -rw-r--r-- | chimere/admin.py | 2 | ||||
| -rw-r--r-- | chimere/tests.py | 14 | ||||
| -rw-r--r-- | 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"<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')  | 
