diff --git a/py/webnotes/db.py b/py/webnotes/db.py index 158405a62f..b8dd0d7e0d 100644 --- a/py/webnotes/db.py +++ b/py/webnotes/db.py @@ -343,14 +343,25 @@ class Database: """ return self.sql("select name from tabDocField where fieldname=%s and parent=%s", (dt, fn)) - def exists(self, dt, dn): + def exists(self, dt, dn=None): """ Returns true if the record exists """ - try: - return self.sql('select name from `tab%s` where name=%s' % (dt, '%s'), dn) - except: - return None + if isinstance(dt, basestring): + try: + return self.sql('select name from `tab%s` where name=%s' % (dt, '%s'), dn) + except: + return None + elif isinstance(dt, dict) and dt.get('doctype'): + try: + conditions = [] + for d in dt: + if d == 'doctype': continue + conditions.append('`%s` = "%s"' % (d, dt[d].replace('"', '\"'))) + return self.sql('select name from `tab%s` where %s' % \ + (dt['doctype'], " and ".join(conditions))) + except: + return None # ====================================================================================== def close(self): diff --git a/py/webnotes/model/sync.py b/py/webnotes/model/sync.py index d6da04199a..22e0af6319 100644 --- a/py/webnotes/model/sync.py +++ b/py/webnotes/model/sync.py @@ -126,23 +126,29 @@ def save_perms_if_none_exist(doclist): def load_install_docs(modules): import os - from webnotes.model.doc import Document - if isinstance(modules, basestring): modules = [modules] for module_name in modules: module = __import__(module_name) if hasattr(module, 'install_docs'): webnotes.conn.begin() + for data in module.install_docs: if data.get('name'): if not webnotes.conn.exists(data['doctype'], data.get('name')): - d = Document(data['doctype']) - d.fields.update(data) - d.save() - print 'Created %(doctype)s %(name)s' % d.fields + create_doc(data) + elif not webnotes.conn.exists(data): + create_doc(data) + webnotes.conn.commit() +def create_doc(data): + from webnotes.model.doc import Document + d = Document(data['doctype']) + d.fields.update(data) + d.save() + print 'Created %(doctype)s %(name)s' % d.fields + import unittest class TestSync(unittest.TestCase): def setUp(self):