allow export/import of db models, issue 1316 (experimental), thanks Alan
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.4.1-alpha.2+timestamp.2013.02.03.09.08.28
|
Version 2.4.1-alpha.2+timestamp.2013.02.03.09.10.34
|
||||||
|
|||||||
+22
-6
@@ -7124,8 +7124,12 @@ class DAL(object):
|
|||||||
:attempts (defaults to 5). Number of times to attempt connecting
|
:attempts (defaults to 5). Number of times to attempt connecting
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
dbdict = None
|
||||||
if uri == '<zombie>' and db_uid is not None: return
|
if uri == '<zombie>' and db_uid is not None: return
|
||||||
|
elif isinstance(uri, dict):
|
||||||
|
dbdict = uri
|
||||||
|
uri = dbdict["uri"]
|
||||||
|
codec = dbdict["codec"] or codec
|
||||||
if not decode_credentials:
|
if not decode_credentials:
|
||||||
credential_decoder = lambda cred: cred
|
credential_decoder = lambda cred: cred
|
||||||
else:
|
else:
|
||||||
@@ -7207,15 +7211,26 @@ class DAL(object):
|
|||||||
self._fake_migrate = fake_migrate
|
self._fake_migrate = fake_migrate
|
||||||
self._migrate_enabled = migrate_enabled
|
self._migrate_enabled = migrate_enabled
|
||||||
self._fake_migrate_all = fake_migrate_all
|
self._fake_migrate_all = fake_migrate_all
|
||||||
if auto_import:
|
if auto_import or dbdict:
|
||||||
self.import_table_definitions(adapter.folder)
|
self.import_table_definitions(adapter.folder,
|
||||||
|
items=dbdict["items"])
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def tables(self):
|
def tables(self):
|
||||||
return self._tables
|
return self._tables
|
||||||
|
|
||||||
def import_table_definitions(self,path,migrate=False,fake_migrate=False):
|
def import_table_definitions(self, path, migrate=False,
|
||||||
|
fake_migrate=False, items=None):
|
||||||
pattern = pjoin(path,self._uri_hash+'_*.table')
|
pattern = pjoin(path,self._uri_hash+'_*.table')
|
||||||
|
if items:
|
||||||
|
for tablename, table in items.iteritems():
|
||||||
|
# TODO: read all field/table options
|
||||||
|
fields = []
|
||||||
|
for fieldname, field in table["items"].iteritems():
|
||||||
|
type = field["type"]
|
||||||
|
fields.append(Field(fieldname, type))
|
||||||
|
self.define_table(tablename, *fields)
|
||||||
|
else:
|
||||||
for filename in glob.glob(pattern):
|
for filename in glob.glob(pattern):
|
||||||
tfile = self._adapter.file_open(filename, 'r')
|
tfile = self._adapter.file_open(filename, 'r')
|
||||||
try:
|
try:
|
||||||
@@ -7230,7 +7245,8 @@ class DAL(object):
|
|||||||
for key, value in sql_fields.iteritems()]
|
for key, value in sql_fields.iteritems()]
|
||||||
mf.sort(lambda a,b: cmp(a[0],b[0]))
|
mf.sort(lambda a,b: cmp(a[0],b[0]))
|
||||||
self.define_table(name,*[item[1] for item in mf],
|
self.define_table(name,*[item[1] for item in mf],
|
||||||
**dict(migrate=migrate,fake_migrate=fake_migrate))
|
**dict(migrate=migrate,
|
||||||
|
fake_migrate=fake_migrate))
|
||||||
finally:
|
finally:
|
||||||
self._adapter.file_close(tfile)
|
self._adapter.file_close(tfile)
|
||||||
|
|
||||||
@@ -7571,7 +7587,7 @@ def index():
|
|||||||
def as_dict(self, flat=False, sanitize=True):
|
def as_dict(self, flat=False, sanitize=True):
|
||||||
dbname = codec = uid = uri = None
|
dbname = codec = uid = uri = None
|
||||||
if not sanitize:
|
if not sanitize:
|
||||||
uri, dbname, codec, uid = (str(self), self._dbname,
|
uri, dbname, codec, uid = (self._uri, self._dbname,
|
||||||
self._db_codec, self._db_uid)
|
self._db_codec, self._db_uid)
|
||||||
db_as_dict = dict(items={}, tables=[], uri=uri, dbname=dbname,
|
db_as_dict = dict(items={}, tables=[], uri=uri, dbname=dbname,
|
||||||
codec=codec, uid=uid)
|
codec=codec, uid=uid)
|
||||||
|
|||||||
Reference in New Issue
Block a user