From 7fc8ba2840c744e05c8f89615b957d4bd11e0e4d Mon Sep 17 00:00:00 2001 From: David Read Date: Fri, 15 Nov 2019 17:16:01 +0000 Subject: [PATCH] Fix some circular imports, ready for py3. --- ckan/model/__init__.py | 4 +++- ckan/model/core.py | 20 -------------------- ckan/model/package.py | 9 +++++++++ ckan/model/system.py | 18 ++++++++++++++++++ ckan/model/tag.py | 22 ++++++++-------------- ckan/model/vocabulary.py | 3 ++- ckan/plugins/__init__.py | 2 +- ckan/plugins/core.py | 2 +- 8 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 ckan/model/system.py diff --git a/ckan/model/__init__.py b/ckan/model/__init__.py index 0ed5d97d04e..e69a413be8e 100644 --- a/ckan/model/__init__.py +++ b/ckan/model/__init__.py @@ -27,9 +27,11 @@ engine_is_pg, ) from ckan.model.core import ( - System, State, ) +from ckan.model.system import ( + System, +) from ckan.model.package import ( Package, PACKAGE_NAME_MIN_LENGTH, diff --git a/ckan/model/core.py b/ckan/model/core.py index ab7f1f694fd..b5c1b1b4ad3 100644 --- a/ckan/model/core.py +++ b/ckan/model/core.py @@ -1,28 +1,8 @@ # encoding: utf-8 -from ckan.model import domain_object - - -__all__ = ['System', 'State', 'StatefulObjectMixin'] log = __import__('logging').getLogger(__name__) -class System(domain_object.DomainObject): - - name = 'system' - - def __unicode__(self): - return u'<%s>' % self.__class__.__name__ - - def purge(self): - pass - - @classmethod - def by_name(cls, name): - return System() - - -# VDM-specific domain objects class State(object): ACTIVE = u'active' DELETED = u'deleted' diff --git a/ckan/model/package.py b/ckan/model/package.py index 6bd5cd7ae7c..d7e0a1a6616 100644 --- a/ckan/model/package.py +++ b/ckan/model/package.py @@ -553,3 +553,12 @@ class RatingValueException(Exception): order_by=package_table.c.name, extension=[extension.PluginMapperExtension()], ) + +meta.mapper(tag.PackageTag, tag.package_tag_table, properties={ + 'pkg':orm.relation(Package, backref='package_tag_all', + cascade='none', + ) + }, + order_by=tag.package_tag_table.c.id, + extension=[extension.PluginMapperExtension()], + ) diff --git a/ckan/model/system.py b/ckan/model/system.py new file mode 100644 index 00000000000..3edfcd8221f --- /dev/null +++ b/ckan/model/system.py @@ -0,0 +1,18 @@ +# encoding: utf-8 + +from ckan.model import domain_object + + +class System(domain_object.DomainObject): + + name = u'system' + + def __unicode__(self): + return u'<%s>' % self.__class__.__name__ + + def purge(self): + pass + + @classmethod + def by_name(cls, name): + return System() diff --git a/ckan/model/tag.py b/ckan/model/tag.py index be076473df1..6355b07a766 100644 --- a/ckan/model/tag.py +++ b/ckan/model/tag.py @@ -9,10 +9,10 @@ types as _types, domain_object, vocabulary, - package as _package, extension as _extension, ) import ckan # this import is needed +import ckan.model import ckan.lib.dictization import ckan.lib.maintain as maintain @@ -207,11 +207,11 @@ def packages(self): :rtype: list of ckan.model.package.Package objects ''' - q = meta.Session.query(_package.Package) + q = meta.Session.query(ckan.model.package.Package) q = q.join(PackageTag) q = q.filter_by(tag_id=self.id) q = q.filter_by(state='active') - q = q.order_by(_package.Package.name) + q = q.order_by(ckan.model.package.Package.name) packages = q.all() return packages @@ -262,13 +262,13 @@ def by_name(self, package_name, tag_name, vocab_id_or_name=None, if vocab is None: # The user specified an invalid vocab. return None - query = (meta.Session.query(PackageTag, Tag, _package.Package) + query = (meta.Session.query(PackageTag, Tag, ckan.model.Package) .filter(Tag.vocabulary_id == vocab.id) - .filter(_package.Package.name==package_name) + .filter(ckan.model.Package.name==package_name) .filter(Tag.name==tag_name)) else: query = (meta.Session.query(PackageTag) - .filter(_package.Package.name==package_name) + .filter(ckan.model.Package.name==package_name) .filter(Tag.name==tag_name)) query = query.autoflush(autoflush) return query.one()[0] @@ -286,11 +286,5 @@ def related_packages(self): order_by=tag_table.c.name, ) -meta.mapper(PackageTag, package_tag_table, properties={ - 'pkg':relation(_package.Package, backref='package_tag_all', - cascade='none', - ) - }, - order_by=package_tag_table.c.id, - extension=[_extension.PluginMapperExtension()], - ) +# NB meta.mapper(tag.PackageTag... is found in package.py, because if it was +# here it we'd get circular references diff --git a/ckan/model/vocabulary.py b/ckan/model/vocabulary.py index e3266169385..b8b47504e8f 100644 --- a/ckan/model/vocabulary.py +++ b/ckan/model/vocabulary.py @@ -2,7 +2,7 @@ from sqlalchemy import types, Column, Table -from ckan.model import meta, types as _types, tag, domain_object +from ckan.model import meta, types as _types, domain_object VOCABULARY_NAME_MIN_LENGTH = 2 VOCABULARY_NAME_MAX_LENGTH = 100 @@ -35,6 +35,7 @@ def get(cls, id_or_name): @property def tags(self): + from ckan.model import tag query = meta.Session.query(tag.Tag) return query.filter(tag.Tag.vocabulary_id == self.id) diff --git a/ckan/plugins/__init__.py b/ckan/plugins/__init__.py index 88770d90f90..ad46a46b4bd 100644 --- a/ckan/plugins/__init__.py +++ b/ckan/plugins/__init__.py @@ -3,4 +3,4 @@ from ckan.plugins.core import * from ckan.plugins.interfaces import * -import toolkit +from ckan.plugins import toolkit diff --git a/ckan/plugins/core.py b/ckan/plugins/core.py index 127eff231ee..bda10fc3a3b 100644 --- a/ckan/plugins/core.py +++ b/ckan/plugins/core.py @@ -14,7 +14,7 @@ from ckan.common import asbool from six import string_types -import interfaces +from ckan.plugins import interfaces from ckan.common import config