rpms/python-sqlobject/FC-5 python-sqlobject-0.7.0-ordered-deps.patch, NONE, 1.1 python-sqlobject.spec, 1.4, 1.5
Luke Macken (lmacken)
fedora-extras-commits at redhat.com
Tue Sep 12 02:44:52 UTC 2006
Author: lmacken
Update of /cvs/extras/rpms/python-sqlobject/FC-5
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv5973
Modified Files:
python-sqlobject.spec
Added Files:
python-sqlobject-0.7.0-ordered-deps.patch
Log Message:
* Mon Sep 11 2006 Luke Macken <lmacken at redhat.com> 0.7.0-7
- python-sqlobject-0.7.0-ordered-deps.patch from upstream ticket
http://trac.turbogears.org/turbogears/ticket/279 (Bug #205894)
- Include .pyo files instead of ghosting them
python-sqlobject-0.7.0-ordered-deps.patch:
--- NEW FILE python-sqlobject-0.7.0-ordered-deps.patch ---
--- SQLObject-0.7.0/sqlobject/manager/command.py.orig 2006-09-09 09:40:56.000000000 -0700
+++ SQLObject-0.7.0/sqlobject/manager/command.py 2006-09-09 09:43:00.000000000 -0700
@@ -18,6 +18,7 @@
from sqlobject import col
from sqlobject.util import moduleloader
from sqlobject.declarative import DeclarativeMeta
+from sqlobject.classregistry import findClass
# It's not very unsafe to use tempnam like we are doing:
warnings.filterwarnings(
@@ -183,6 +184,81 @@
help = ''
+ def orderClassesByDependencyLevel(self, classes):
+ """
+ Return classes ordered by their depth in the class dependency
+ tree (this is *not* the inheritance tree), from the
+ top level (independant) classes to the deepest level.
+ The dependency tree is defined by the foreign key relations.
+ """
+ # @@: written as a self-contained function for now, to prevent
+ # having to modify any core SQLObject component and namespace
+ # contamination.
+ # yemartin - 2006-08-08
+
+ class SQLObjectCircularReferenceError(Exception): pass
+
+ def findReverseDependencies(cls):
+ """
+ Return a list of classes that cls depends on. Note that
+ "depends on" here mean "has a foreign key pointing to".
+ """
+ depended = []
+ for col in cls.sqlmeta.columnList:
+ if col.foreignKey:
+ other = findClass(col.foreignKey,
+ col.soClass.sqlmeta.registry)
+ if other not in depended:
+ depended.append(other)
+ return depended
+
+ # Cache to save already calculated dependency levels.
+ dependency_levels = {}
+ def calculateDependencyLevel(cls, dependency_stack=[]):
+ """
+ Recursively calculate the dependency level of cls, while
+ using the dependency_stack to detect any circular reference.
+ """
+ # Return value from the cache if already calculated
+ if dependency_levels.has_key(cls):
+ return dependency_levels[cls]
+ # Check for circular references
+ if cls in dependency_stack:
+ dependency_stack.append(cls)
+ raise SQLObjectCircularReferenceError, (
+ "Found a circular reference: %s " %
+ (' --> '.join([x.__name__
+ for x in dependency_stack])))
+ dependency_stack.append(cls)
+ # Recursively inspect dependent classes.
+ depended = findReverseDependencies(cls)
+ if depended:
+ level = max([calculateDependencyLevel(x, dependency_stack)
+ for x in depended]) + 1
+ else:
+ level = 0
+ dependency_levels[cls] = level
+ return level
+
+ # Now simply calculate and sort by dependency levels:
+ try:
+ sorter = []
+ for cls in classes:
+ level = calculateDependencyLevel(cls)
+ sorter.append((level, cls))
+ sorter.sort()
+ ordered_classes = [cls for level, cls in sorter]
+ except SQLObjectCircularReferenceError, msg:
+ # Failsafe: return the classes as-is if a circular reference
+ # prevented the dependency levels to be calculated.
+ print ("Warning: a circular reference was detected in the "
+ "model. Unable to sort the classes by dependency: they "
+ "will be treated in alphabetic order. This may or may "
+ "not work depending on your database backend. "
+ "The error was:\n%s" % msg)
+ return classes
+ return ordered_classes
+
def __classinit__(cls, new_args):
if cls.__bases__ == (object,):
# This abstract base class
@@ -287,7 +363,7 @@
else:
print 'No eggs specified'
sys.exit(1)
- return all
+ return self.orderClassesByDependencyLevel(all)
def classes_from_module(self, module):
all = []
@@ -584,7 +660,7 @@
v = self.options.verbose
dropped = 0
not_existing = 0
- for soClass in self.classes():
+ for soClass in self.classes().__reversed__():
exists = soClass._connection.tableExists(soClass.sqlmeta.table)
if v >= 1:
if exists:
Index: python-sqlobject.spec
===================================================================
RCS file: /cvs/extras/rpms/python-sqlobject/FC-5/python-sqlobject.spec,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- python-sqlobject.spec 9 Jul 2006 16:30:58 -0000 1.4
+++ python-sqlobject.spec 12 Sep 2006 02:44:52 -0000 1.5
@@ -2,7 +2,7 @@
Name: python-sqlobject
Version: 0.7.0
-Release: 6%{?dist}
+Release: 7%{?dist}
Summary: SQLObject -Object-Relational Manager, aka database wrapper
Group: Development/Libraries
@@ -11,6 +11,7 @@
Source0: http://cheeseshop.python.org/packages/source/S/SQLObject/SQLObject-%{version}.tar.gz
Patch0: python-sqlobject-admin.patch
Patch1: python-sqlobject-0.7.0-pkg_resources.patch
+Patch2: python-sqlobject-0.7.0-ordered-deps.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildArch: noarch
@@ -31,6 +32,7 @@
rm -rf ez_setup
%patch0 -p1
%patch1
+%patch2 -p1
%build
%{__python} setup.py build
@@ -50,58 +52,43 @@
%doc PKG-INFO README.txt docs
%dir %{python_sitelib}/sqlobject
-%{python_sitelib}/sqlobject/*.py
-%{python_sitelib}/sqlobject/*.pyc
-%ghost %{python_sitelib}/sqlobject/*.pyo
+%{python_sitelib}/sqlobject/*.py*
%dir %{python_sitelib}/sqlobject/firebird
-%{python_sitelib}/sqlobject/firebird/*.py
-%{python_sitelib}/sqlobject/firebird/*.pyc
-%ghost %{python_sitelib}/sqlobject/firebird/*.pyo
+%{python_sitelib}/sqlobject/firebird/*.py*
%dir %{python_sitelib}/sqlobject/inheritance
-%{python_sitelib}/sqlobject/inheritance/*.py
-%{python_sitelib}/sqlobject/inheritance/*.pyc
-%ghost %{python_sitelib}/sqlobject/inheritance/*.pyo
+%{python_sitelib}/sqlobject/inheritance/*.py*
%dir %{python_sitelib}/sqlobject/manager
-%{python_sitelib}/sqlobject/manager/*.py
-%{python_sitelib}/sqlobject/manager/*.pyc
-%ghost %{python_sitelib}/sqlobject/manager/*.pyo
+%{python_sitelib}/sqlobject/manager/*.py*
%dir %{python_sitelib}/sqlobject/maxdb
-%{python_sitelib}/sqlobject/maxdb/*.py
-%{python_sitelib}/sqlobject/maxdb/*.pyc
-%ghost %{python_sitelib}/sqlobject/maxdb/*.pyo
+%{python_sitelib}/sqlobject/maxdb/*.py*
%dir %{python_sitelib}/sqlobject/mysql
-%{python_sitelib}/sqlobject/mysql/*.py
-%{python_sitelib}/sqlobject/mysql/*.pyc
-%ghost %{python_sitelib}/sqlobject/mysql/*.pyo
+%{python_sitelib}/sqlobject/mysql/*.py*
%dir %{python_sitelib}/sqlobject/postgres
-%{python_sitelib}/sqlobject/postgres/*.py
-%{python_sitelib}/sqlobject/postgres/*.pyc
-%ghost %{python_sitelib}/sqlobject/postgres/*.pyo
+%{python_sitelib}/sqlobject/postgres/*.py*
%dir %{python_sitelib}/sqlobject/sqlite
-%{python_sitelib}/sqlobject/sqlite/*.py
-%{python_sitelib}/sqlobject/sqlite/*.pyc
-%ghost %{python_sitelib}/sqlobject/sqlite/*.pyo
+%{python_sitelib}/sqlobject/sqlite/*.py*
%dir %{python_sitelib}/sqlobject/sybase
-%{python_sitelib}/sqlobject/sybase/*.py
-%{python_sitelib}/sqlobject/sybase/*.pyc
-%ghost %{python_sitelib}/sqlobject/sybase/*.pyo
+%{python_sitelib}/sqlobject/sybase/*.py*
%dir %{python_sitelib}/sqlobject/util
-%{python_sitelib}/sqlobject/util/*.py
-%{python_sitelib}/sqlobject/util/*.pyc
-%ghost %{python_sitelib}/sqlobject/util/*.pyo
+%{python_sitelib}/sqlobject/util/*.py*
%{_bindir}/*
%changelog
+* Mon Sep 11 2006 Luke Macken <lmacken at redhat.com> 0.7.0-7
+- python-sqlobject-0.7.0-ordered-deps.patch from upstream ticket
+ http://trac.turbogears.org/turbogears/ticket/279 (Bug #205894)
+- Include .pyo files instead of ghosting them
+
* Sun Jun 9 2006 Luke Macken <lmacken at redhat.com> 0.7.0-6
- Add python-sqlobject-0.7.0-pkg_resources.patch (Bug #195548)
- Remove unnecessary python-abi requirement
More information about the fedora-extras-commits
mailing list