summaryrefslogtreecommitdiff
path: root/migrate/versioning/template.py
diff options
context:
space:
mode:
authorjan.dittberner <unknown>2008-02-06 18:39:07 +0000
committerjan.dittberner <unknown>2008-02-06 18:39:07 +0000
commit2cfe1fc31c0dfa8241200f635d8e7f6cfce2b507 (patch)
tree69541da758ab44652badc59ec0ce659364bdfe7f /migrate/versioning/template.py
downloadsqlalchemy-migrate-2cfe1fc31c0dfa8241200f635d8e7f6cfce2b507.tar.gz
moved trunk, branches and tags to project root
fixes Issue #5
Diffstat (limited to 'migrate/versioning/template.py')
-rw-r--r--migrate/versioning/template.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/migrate/versioning/template.py b/migrate/versioning/template.py
new file mode 100644
index 0000000..bab7752
--- /dev/null
+++ b/migrate/versioning/template.py
@@ -0,0 +1,67 @@
+from pkg_resources import resource_filename
+import os,shutil
+import sys
+from migrate.versioning.base import *
+from migrate.versioning import pathed
+
+class Packaged(pathed.Pathed):
+ """An object assoc'ed with a Python package"""
+ def __init__(self,pkg):
+ self.pkg = pkg
+ path = self._find_path(pkg)
+ super(Packaged,self).__init__(path)
+
+ @classmethod
+ def _find_path(cls,pkg):
+ pkg_name, resource_name = pkg.rsplit('.',1)
+ ret = resource_filename(pkg_name,resource_name)
+ return ret
+
+class Collection(Packaged):
+ """A collection of templates of a specific type"""
+ _default=None
+ def get_path(self,file):
+ return os.path.join(self.path,str(file))
+ def get_pkg(self,file):
+ return (self.pkg,str(file))
+
+class RepositoryCollection(Collection):
+ _default='default'
+
+class ScriptCollection(Collection):
+ _default='default.py_tmpl'
+
+class Template(Packaged):
+ """Finds the paths/packages of various Migrate templates"""
+ _repository='repository'
+ _script='script'
+ _manage='manage.py_tmpl'
+
+ def __init__(self,pkg):
+ super(Template,self).__init__(pkg)
+ self.repository=RepositoryCollection('.'.join((self.pkg,self._repository)))
+ self.script=ScriptCollection('.'.join((self.pkg,self._script)))
+
+ def get_item(self,attr,filename=None,as_pkg=None,as_str=None):
+ item = getattr(self,attr)
+ if filename is None:
+ filename = getattr(item,'_default')
+ if as_pkg:
+ ret = item.get_pkg(filename)
+ if as_str:
+ ret = '.'.join(ret)
+ else:
+ ret = item.get_path(filename)
+ return ret
+
+ def get_repository(self,filename=None,as_pkg=None,as_str=None):
+ return self.get_item('repository',filename,as_pkg,as_str)
+
+ def get_script(self,filename=None,as_pkg=None,as_str=None):
+ return self.get_item('script',filename,as_pkg,as_str)
+
+ def manage(self,**k):
+ return (self.pkg,self._manage)
+
+template_pkg='migrate.versioning.templates'
+template=Template(template_pkg)