|
/
Zope
/
gocept svn checkins
/
Archive
/
2008
/
2008-11
/
SVN: r7100 - in gocept.infrastructure/feature_systemupgrade/util/fixes: . lib lib/tests lib/tests/db lib/tests/db_empty
[
SVN: r7099 - in gocept.infrastructure/testing: . ... ]
[
SVN: r7106 - pycountry/trunk/src/pycountry / ... ]
SVN: r7100 - in gocept.infrastructure/feature_systemupgrade/util/fixes: . lib lib/tests lib/tests/db lib/tests/db_empty
Christian Kauhaus <kc(at)gocept.com> |
2008-11-28 13:16:10 |
[ FULL ]
|
Author: ckauhaus
Date: Fri Nov 28 13:16:08 2008
New Revision: 7100
Log:
Basic list functionality; infer fix name from file name.
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_empty/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
(contents, props changed)
- copied, changed from r7097,
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/test_fix.py
Removed:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/test_fix.py
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/fix
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
Modified: gocept.infrastructure/feature_systemupgrade/util/fixes/fix
==============================================================================
--- gocept.infrastructure/feature_systemupgrade/util/fixes/fix (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/fix Fri Nov 28
13:16:08 2008
(at)(at) -1,5 +1,4 (at)(at)
-#!/usr/bin/env python
+#!/bin/env python
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
-print "fertig"
Modified: gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py Fri Nov
28 13:16:08 2008
(at)(at) -1,11 +1,28 (at)(at)
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
+import os
+import glob
+
+
+DEFAULT_DBDIR = os.path.join(os.path.dirname(__file__), '..', 'db')
+
+
class Fixer(object):
"""Fixer allows to list pending fixes and to apply them."""
+ def __init__(self, dir=DEFAULT_DBDIR):
+ self.dir = dir
+ self.fixes = {}
+ for file in glob.glob(os.path.join(self.dir, '*.py')):
+ locals = {}
+ execfile(file, {}, locals)
+ assert 'Fix' in locals
+ fixname = os.path.splitext(os.path.basename(file))[0]
+ self.fixes[fixname] = locals['Fix']
+
def list(self):
- pass
+ return self.fixes.keys()
def apply(self):
pass
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
==============================================================================
--- (empty file)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py Fri
Nov 28 13:16:08 2008
(at)(at) -0,0 +1,6 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+class Fix(object):
+
+ pass
Copied:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
(from r7097,
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/test_fix.py)
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/test_fix.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py Fri
Nov 28 13:16:08 2008
(at)(at) -1,6 +1,7 (at)(at)
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
+import os.path
import unittest
import fix
(at)(at) -8,9 +9,15 (at)(at)
class TestFixer(unittest.TestCase):
- def test_list(self):
- fixer = fix.Fixer()
- self.assertEquals(None, fixer.list())
+ base = os.path.dirname(__file__)
+
+ def test_list_empty_db(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db_empty'))
+ self.assertEquals([], fixer.list())
+
+ def test_list_db(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db'))
+ self.assertEquals(['one'], fixer.list())
unittest.main()
|
SVN: r7101 - in gocept.infrastructure/feature_systemupgrade/util/fixes/lib: . tests tests/db tests/db_broken
Christian Kauhaus <kc(at)gocept.com> |
2008-11-28 13:58:03 |
[ FULL ]
|
Author: ckauhaus
Date: Fri Nov 28 13:58:01 2008
New Revision: 7101
Log:
Multiple fixes per file; added test with defective database containing empty
files.
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fixapi.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_broken/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_broken/empty.py
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
Modified: gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py Fri Nov
28 13:58:01 2008
(at)(at) -1,8 +1,11 (at)(at)
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
-import os
import glob
+import inspect
+import os
+
+import fixapi
DEFAULT_DBDIR = os.path.join(os.path.dirname(__file__), '..', 'db')
(at)(at) -13,16 +16,28 (at)(at)
def __init__(self, dir=DEFAULT_DBDIR):
self.dir = dir
+ self.load_fixes()
+
+ def load_fixes(self):
self.fixes = {}
for file in glob.glob(os.path.join(self.dir, '*.py')):
locals = {}
execfile(file, {}, locals)
- assert 'Fix' in locals
- fixname = os.path.splitext(os.path.basename(file))[0]
- self.fixes[fixname] = locals['Fix']
+ for fixname, fix in locals.items():
+ if inspect.isclass(fix) and issubclass(fix, fixapi.Fix):
+ locals[fixname] = fix()
+ else:
+ del locals[fixname]
+ if not locals:
+ raise RuntimeError("no fix found in file '%s'" % file)
+ filename = os.path.splitext(os.path.basename(file))[0]
+ for fixname, fix in locals.items():
+ if not fix.is_pending():
+ continue
+ self.fixes['%s.%s' % (filename, fixname)] = fix
def list(self):
- return self.fixes.keys()
+ return sorted(self.fixes.keys())
def apply(self):
pass
Added: gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fixapi.py
==============================================================================
--- (empty file)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fixapi.py Fri
Nov 28 13:58:01 2008
(at)(at) -0,0 +1,5 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+class Fix(object):
+ """Abstract base class of all fixes."""
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py Fri
Nov 28 13:58:01 2008
(at)(at) -1,6 +1,10 (at)(at)
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
-class Fix(object):
+import fixapi
- pass
+
+class One(fixapi.Fix):
+
+ def is_pending(self):
+ return True
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
==============================================================================
--- (empty file)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py Fri
Nov 28 13:58:01 2008
(at)(at) -0,0 +1,16 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import fixapi
+
+
+class Two_ignored(fixapi.Fix):
+
+ def is_pending(self):
+ return False
+
+
+class Two(fixapi.Fix):
+
+ def is_pending(self):
+ return True
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_broken/empty.py
==============================================================================
--- (empty file)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_broken/empty.py Fri
Nov 28 13:58:01 2008
(at)(at) -0,0 +1,6 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import fixapi
+
+# intentionally left blank
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py Fri
Nov 28 13:58:01 2008
(at)(at) -7,17 +7,22 (at)(at)
import fix
-class TestFixer(unittest.TestCase):
+class FixerTest(unittest.TestCase):
base = os.path.dirname(__file__)
+ def test_list_db(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db'))
+ self.assertEquals(['one.One', 'two.Two'], fixer.list())
+
def test_list_empty_db(self):
fixer = fix.Fixer(os.path.join(self.base, 'db_empty'))
self.assertEquals([], fixer.list())
- def test_list_db(self):
- fixer = fix.Fixer(os.path.join(self.base, 'db'))
- self.assertEquals(['one'], fixer.list())
+ def test_list_broken_db(self):
+ self.assertRaises(
+ RuntimeError,
+ lambda: fix.Fixer(os.path.join(self.base, 'db_broken')))
unittest.main()
|
SVN: r7104 - in gocept.infrastructure/feature_systemupgrade/util/fixes: . db lib lib/tests lib/tests/db lib/tests/db_failing lib/tests/db_non_converging
Christian Kauhaus <kc(at)gocept.com> |
2008-11-28 14:59:55 |
[ FULL ]
|
Author: ckauhaus
Date: Fri Nov 28 14:59:53 2008
New Revision: 7104
Log:
Apply fixes. apply() re-runs until there are no pending fixes left or no
progress is being made.
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/check (contents,
props changed)
gocept.infrastructure/feature_systemupgrade/util/fixes/db/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_failing/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_failing/fix.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_non_converging/
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_non_converging/fix.py
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
Added: gocept.infrastructure/feature_systemupgrade/util/fixes/check
==============================================================================
--- (empty file)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/check Fri Nov 28
14:59:53 2008
(at)(at) -0,0 +1,20 (at)(at)
+#!/bin/env python
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import sys
+import os.path
+
+base = os.path.dirname(__file__)
+sys.path.append(os.path.join(base, 'lib'))
+import fix
+
+
+fixer = fix.Fixer(os.path.join(base, 'db'))
+fixes = fixer.list()
+
+for fix in fixes:
+ print fix
+
+if fixes:
+ sys.exit(2)
Modified: gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py Fri Nov
28 14:59:53 2008
(at)(at) -8,18 +8,29 (at)(at)
import fixapi
-DEFAULT_DBDIR = os.path.join(os.path.dirname(__file__), '..', 'db')
-
-
class Fixer(object):
"""Fixer allows to list pending fixes and to apply them."""
- def __init__(self, dir=DEFAULT_DBDIR):
- self.dir = dir
- self.load_fixes()
+ def __init__(self, dbdir):
+ self.dir = dbdir
+ self._load_fixes()
- def load_fixes(self):
- self.fixes = {}
+ def list(self):
+ return sorted(fix.__name__ for fix in self._list_pending())
+
+ def apply(self):
+ pending = self._list_pending()
+ while pending:
+ for fix in pending:
+ fix.apply()
+ new_pending = self._list_pending()
+ if new_pending == pending:
+ # no progress
+ break
+ pending = new_pending
+
+ def _load_fixes(self):
+ self.fixes = set()
for file in glob.glob(os.path.join(self.dir, '*.py')):
locals = {}
execfile(file, {}, locals)
(at)(at) -32,12 +43,8 (at)(at)
raise RuntimeError("no fix found in file '%s'" % file)
filename = os.path.splitext(os.path.basename(file))[0]
for fixname, fix in locals.items():
- if not fix.is_pending():
- continue
- self.fixes['%s.%s' % (filename, fixname)] = fix
-
- def list(self):
- return sorted(self.fixes.keys())
+ fix.__name__ = '%s.%s' % (filename, fixname)
+ self.fixes.add(fix)
- def apply(self):
- pass
+ def _list_pending(self):
+ return set(fix for fix in self.fixes if fix.is_pending())
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/one.py Fri
Nov 28 14:59:53 2008
(at)(at) -4,7 +4,12 (at)(at)
import fixapi
-class One(fixapi.Fix):
+class RunTwice(fixapi.Fix):
+
+ counter = 2
def is_pending(self):
- return True
+ return bool(self.counter)
+
+ def apply(self):
+ self.counter -= 1
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py Fri
Nov 28 14:59:53 2008
(at)(at) -4,13 +4,18 (at)(at)
import fixapi
-class Two_ignored(fixapi.Fix):
+class IgnoreMe(fixapi.Fix):
def is_pending(self):
return False
-class Two(fixapi.Fix):
+class RunOnce(fixapi.Fix):
+
+ pending = True
def is_pending(self):
- return True
+ return self.pending
+
+ def apply(self):
+ self.pending = False
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_failing/fix.py
==============================================================================
--- (empty file)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_failing/fix.py Fri
Nov 28 14:59:53 2008
(at)(at) -0,0 +1,13 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import fixapi
+
+
+class Failing(fixapi.Fix):
+
+ def is_pending(self):
+ return True
+
+ def apply(self):
+ raise RuntimeError('cannot apply failing fix')
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_non_converging/fix.py
==============================================================================
--- (empty file)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db_non_converging/fix.py Fri
Nov 28 14:59:53 2008
(at)(at) -0,0 +1,13 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import fixapi
+
+
+class NonConverging(fixapi.Fix):
+
+ def is_pending(self):
+ return True
+
+ def apply(self):
+ pass
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/test_fix.py Fri
Nov 28 14:59:53 2008
(at)(at) -13,7 +13,7 (at)(at)
def test_list_db(self):
fixer = fix.Fixer(os.path.join(self.base, 'db'))
- self.assertEquals(['one.One', 'two.Two'], fixer.list())
+ self.assertEquals(['one.RunTwice', 'two.RunOnce'], fixer.list())
def test_list_empty_db(self):
fixer = fix.Fixer(os.path.join(self.base, 'db_empty'))
(at)(at) -24,5 +24,22 (at)(at)
RuntimeError,
lambda: fix.Fixer(os.path.join(self.base, 'db_broken')))
+ def test_apply_converges(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db'))
+ fixer.apply()
+ self.assertEquals([], fixer.list())
+
+ def test_apply_failing(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db_failing'))
+ self.assertRaises(RuntimeError, fixer.apply)
+
+ def test_apply_not_converging(self):
+ fixer = fix.Fixer(os.path.join(self.base, 'db_non_converging'))
+ self.assertEquals(['fix.NonConverging'], fixer.list())
+ fixer.apply()
+ self.assertEquals(['fix.NonConverging'], fixer.list())
+ fixer.apply()
+ self.assertEquals(['fix.NonConverging'], fixer.list())
+
unittest.main()
|
SVN: r7105 - in gocept.infrastructure/feature_systemupgrade/util/fixes: . lib lib/tests/db
Christian Kauhaus <kc(at)gocept.com> |
2008-11-28 15:44:03 |
[ FULL ]
|
Author: ckauhaus
Date: Fri Nov 28 15:44:01 2008
New Revision: 7105
Log:
Create wrapper script for fix command; solve global symbol problem for fix
scripts.
Added:
gocept.infrastructure/feature_systemupgrade/util/fixes/check (contents,
props changed)
gocept.infrastructure/feature_systemupgrade/util/fixes/fix (contents,
props changed)
- copied, changed from r7104,
gocept.infrastructure/feature_systemupgrade/util/fixes/check
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
Added: gocept.infrastructure/feature_systemupgrade/util/fixes/check
==============================================================================
--- (empty file)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/check Fri Nov 28
15:44:01 2008
(at)(at) -0,0 +1 (at)(at)
+link fix
\ No newline at end of file
Copied: gocept.infrastructure/feature_systemupgrade/util/fixes/fix (from r7104,
gocept.infrastructure/feature_systemupgrade/util/fixes/check)
==============================================================================
--- gocept.infrastructure/feature_systemupgrade/util/fixes/check (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/fix Fri Nov 28
15:44:01 2008
(at)(at) -11,10 +11,15 (at)(at)
fixer = fix.Fixer(os.path.join(base, 'db'))
-fixes = fixer.list()
-for fix in fixes:
- print fix
-
-if fixes:
- sys.exit(2)
+command = os.path.basename(sys.argv[0])
+if command == 'check':
+ fixes = fixer.list()
+ for fix in fixes:
+ print fix
+ if fixes:
+ sys.exit(2)
+elif command == 'fix':
+ fixer.apply()
+else:
+ raise RuntimeError("%s: invalid command name '%s'" % (sys.argv[0],
command))
Modified: gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py (original)
+++ gocept.infrastructure/feature_systemupgrade/util/fixes/lib/fix.py Fri Nov
28 15:44:01 2008
(at)(at) -4,6 +4,7 (at)(at)
import glob
import inspect
import os
+import types
import fixapi
(at)(at) -32,19 +33,24 (at)(at)
def _load_fixes(self):
self.fixes = set()
for file in glob.glob(os.path.join(self.dir, '*.py')):
- locals = {}
- execfile(file, {}, locals)
- for fixname, fix in locals.items():
+ module = self._import(file)
+ module_fixes = {}
+ for fixname, fix in module.__dict__.items():
if inspect.isclass(fix) and issubclass(fix, fixapi.Fix):
- locals[fixname] = fix()
- else:
- del locals[fixname]
- if not locals:
+ module_fixes[fixname] = fix()
+ if not module_fixes:
raise RuntimeError("no fix found in file '%s'" % file)
filename = os.path.splitext(os.path.basename(file))[0]
- for fixname, fix in locals.items():
+ for fixname, fix in module_fixes.items():
fix.__name__ = '%s.%s' % (filename, fixname)
self.fixes.add(fix)
+ def _import(self, file):
+ locals = {}
+ execfile(file, locals)
+ module = types.ModuleType(os.path.basename(file))
+ module.__dict__.update(locals)
+ return module
+
def _list_pending(self):
return set(fix for fix in self.fixes if fix.is_pending())
Modified:
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py
==============================================================================
---
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py (original)
+++
gocept.infrastructure/feature_systemupgrade/util/fixes/lib/tests/db/two.py Fri
Nov 28 15:44:01 2008
(at)(at) -1,6 +1,8 (at)(at)
# Copyright (c) 2008 gocept gmbh & co. kg
# See also LICENSE.txt
+import time
+
import fixapi
(at)(at) -19,3 +21,10 (at)(at)
def apply(self):
self.pending = False
+
+
+class UsesImports(fixapi.Fix):
+
+ def is_pending(self):
+ time.time()
+ return False
|
|