def run_sql(my, sql): ''' run an sql statement. my is an instance of the dynamically created <project_type>Upgrade class. If SqlException arise, it will record the error, and the user is advised to check if the error is a result of syntax error or the upgrade function is doing redundant work''' project = Project.get_by_code(my.project_code) db_resource = project.get_project_db_resource() db = DbContainer.get(db_resource) #if not my.quiet: # print sql try: db.do_update(sql, quiet=my.quiet) except SqlException, e: print "Error: ", e # TEST for Sqlite if str(e).startswith("duplicate column name:"): pass elif str(e).startswith("table") and str(e).endswith( "already exists"): pass elif not my.quiet: print print "WARNING: Skipping due to SqlException..." print "Message: ", e print members = inspect.getmembers(my, predicate=inspect.ismethod) key = '%s|%s' % (my.project_code, my.upgrade_class) Container.append_seq(key, (my.upgrade_method, str(e))) """ for name, member in members: # there should only be 1 upgrade method if name.startswith('upgrade_v'): Container.append_seq(key, (my.upgrade_method, str(e))) break """ # to prevent sql error affecting query that follows the Upgrade #DbContainer.abort_thread_sql() DbContainer.release_thread_sql()
def run_sql(my, sql): ''' run an sql statement. my is an instance of the dynamically created <project_type>Upgrade class. If SqlException arise, it will record the error, and the user is advised to check if the error is a result of syntax error or the upgrade function is doing redundant work''' project = Project.get_by_code(my.project_code) db_resource = project.get_project_db_resource() db = DbContainer.get(db_resource) #if not my.quiet: # print sql try: db.do_update(sql, quiet=my.quiet) except SqlException, e: print "Error: ", e # TEST for Sqlite if str(e).startswith("duplicate column name:"): pass elif str(e).startswith("table") and str(e).endswith("already exists"): pass elif not my.quiet: print print "WARNING: Skipping due to SqlException..." print "Message: ", e print members = inspect.getmembers(my, predicate=inspect.ismethod) key = '%s|%s' %(my.project_code, my.upgrade_class) Container.append_seq(key, (my.upgrade_method, str(e))) """ for name, member in members: # there should only be 1 upgrade method if name.startswith('upgrade_v'): Container.append_seq(key, (my.upgrade_method, str(e))) break """ # to prevent sql error affecting query that follows the Upgrade #DbContainer.abort_thread_sql() DbContainer.release_thread_sql()
def execute(self): from pyasm.search import DbContainer from pyasm.security import Security delete_group = "admin" security = Environment.get_security() if not security.is_in_group(delete_group): raise Exception("Only users in [%s] can delete projects"%delete_group) project_code = self.kwargs.get("project_code") if project_code: project = Project.get_by_code(project_code) else: search_key = self.kwargs.get("search_key") project = Search.get_by_search_key(search_key) project_code = project.get_code() assert project_code assert project # dump the database # remove all dependencies the sthpw database related_types = self.kwargs.get("related_types") if related_types: for related_type in related_types: search = Search(related_type) if related_type == "sthpw/schema": search.add_filter("code", project_code) else: search.add_filter("project_code", project_code) count = search.get_count() sobjects = search.get_sobjects() for sobject in sobjects: if related_type == 'sthpw/snapshot': self.delete_snapshot(sobject) else: sobject.delete() sthpw_project = Project.get_by_code('sthpw') # delete the database sthpw_db_resource = sthpw_project.get_project_db_resource() db_resource = project.get_project_db_resource() impl = sthpw_db_resource.get_database_impl() deleted_impl = db_resource.get_database_impl() if not impl.database_exists(db_resource): # remove the project entry project.delete() return # close this connection to the project to be deleted sql = DbContainer.get(db_resource) sql.close() if sql.get_database_type() == 'Sqlite': DbContainer.release_thread_sql() result = impl.drop_database(db_resource) # this is just extra check if result and "failed" in result: raise TacticException(result) Container.put("Sql:database_exists:%s"%db_resource.get_key(), None) sql = DbContainer.get(db_resource, connect=True) if sql: try: if sql.get_database_type() != 'Sqlite': if sql.get_connection() and sql.connect(): raise TacticException("Database [%s] still exists. There could still be connections to it."%project_code) except SqlException as e: pass # remove the project entry project.delete(triggers=False) schema = Schema.get_by_code(project_code) if schema: schema.delete() # Delete project specific login group and login in group entries expr = "@SOBJECT(sthpw/login_group['project_code','%s'])"%project_code expr2 = "@SOBJECT(sthpw/login_group['project_code','%s'].sthpw/login_in_group)"%project_code sobjs = Search.eval(expr2) for sobj in sobjs: sobj.delete() sobjs = Search.eval(expr) for sobj in sobjs: sobj.delete() return
def execute(my): from pyasm.search import DbContainer project_code = my.kwargs.get("project_code") if project_code: project = Project.get_by_code(project_code) else: search_key = my.kwargs.get("search_key") project = Search.get_by_search_key(search_key) project_code = project.get_code() assert project_code assert project # dump the database # remove all dependencies the sthpw database related_types = my.kwargs.get("related_types") if related_types: for related_type in related_types: search = Search(related_type) if related_type == "sthpw/schema": search.add_filter("code", project_code) else: search.add_filter("project_code", project_code) count = search.get_count() sobjects = search.get_sobjects() for sobject in sobjects: if related_type == 'sthpw/snapshot': my.delete_snapshot(sobject) else: sobject.delete() sthpw_project = Project.get_by_code('sthpw') # delete the database sthpw_db_resource = sthpw_project.get_project_db_resource() db_resource = project.get_project_db_resource() impl = sthpw_db_resource.get_database_impl() deleted_impl = db_resource.get_database_impl() if not impl.database_exists(db_resource): # remove the project entry project.delete() return # close this connection to the project to be deleted sql = DbContainer.get(db_resource) sql.close() if sql.get_database_type() == 'Sqlite': DbContainer.release_thread_sql() result = impl.drop_database(db_resource) # this is just extra check if result and "failed" in result: raise TacticException(result) Container.put("Sql:database_exists:%s" % db_resource.get_key(), None) sql = DbContainer.get(db_resource, connect=True) if sql: try: if sql.get_database_type() != 'Sqlite': if sql.get_connection() and sql.connect(): raise TacticException( "Database [%s] still exists. There could still be connections to it." % project_code) except SqlException, e: pass
def execute(my): from pyasm.search import DbContainer project_code = my.kwargs.get("project_code") if project_code: project = Project.get_by_code(project_code) else: search_key = my.kwargs.get("search_key") project = Search.get_by_search_key(search_key) project_code = project.get_code() assert project_code assert project # dump the database # remove all dependencies the sthpw database related_types = my.kwargs.get("related_types") if related_types: for related_type in related_types: search = Search(related_type) if related_type == "sthpw/schema": search.add_filter("code", project_code) else: search.add_filter("project_code", project_code) count = search.get_count() sobjects = search.get_sobjects() for sobject in sobjects: if related_type == 'sthpw/snapshot': my.delete_snapshot(sobject) else: sobject.delete() sthpw_project = Project.get_by_code('sthpw') # delete the database sthpw_db_resource = sthpw_project.get_project_db_resource() db_resource = project.get_project_db_resource() impl = sthpw_db_resource.get_database_impl() deleted_impl = db_resource.get_database_impl() if not impl.database_exists(db_resource): # remove the project entry project.delete() return # close this connection to the project to be deleted sql = DbContainer.get(db_resource) sql.close() if sql.get_database_type() == 'Sqlite': DbContainer.release_thread_sql() result = impl.drop_database(db_resource) # this is just extra check if result and "failed" in result: raise TacticException(result) Container.put("Sql:database_exists:%s"%db_resource.get_key(), None) sql = DbContainer.get(db_resource, connect=True) if sql: try: if sql.get_database_type() != 'Sqlite': if sql.get_connection() and sql.connect(): raise TacticException("Database [%s] still exists. There could still be connections to it."%project_code) except SqlException, e: pass
def execute(self): from pyasm.search import DbContainer from pyasm.security import Security delete_group = "admin" security = Environment.get_security() if not security.is_in_group(delete_group): raise Exception("Only users in [%s] can delete projects" % delete_group) project_code = self.kwargs.get("project_code") if project_code: project = Project.get_by_code(project_code) else: search_key = self.kwargs.get("search_key") project = Search.get_by_search_key(search_key) project_code = project.get_code() assert project_code assert project # dump the database # remove all dependencies the sthpw database related_types = self.kwargs.get("related_types") if related_types: for related_type in related_types: search = Search(related_type) if related_type == "sthpw/schema": search.add_filter("code", project_code) else: search.add_filter("project_code", project_code) count = search.get_count() sobjects = search.get_sobjects() for sobject in sobjects: if related_type == 'sthpw/snapshot': self.delete_snapshot(sobject) else: sobject.delete() sthpw_project = Project.get_by_code('sthpw') # delete the database sthpw_db_resource = sthpw_project.get_project_db_resource() db_resource = project.get_project_db_resource() impl = sthpw_db_resource.get_database_impl() deleted_impl = db_resource.get_database_impl() if not impl.database_exists(db_resource): # remove the project entry project.delete() return # close this connection to the project to be deleted sql = DbContainer.get(db_resource) sql.close() if sql.get_database_type() == 'Sqlite': DbContainer.release_thread_sql() result = impl.drop_database(db_resource) # this is just extra check if result and "failed" in result: raise TacticException(result) Container.put("Sql:database_exists:%s" % db_resource.get_key(), None) sql = DbContainer.get(db_resource, connect=True) if sql: try: if sql.get_database_type() != 'Sqlite': if sql.get_connection() and sql.connect(): raise TacticException( "Database [%s] still exists. There could still be connections to it." % project_code) except SqlException as e: pass # remove the project entry project.delete(triggers=False) schema = Schema.get_by_code(project_code) if schema: schema.delete() # Delete project specific login group and login in group entries expr = "@SOBJECT(sthpw/login_group['project_code','%s'])" % project_code expr2 = "@SOBJECT(sthpw/login_group['project_code','%s'].sthpw/login_in_group)" % project_code sobjs = Search.eval(expr2) for sobj in sobjs: sobj.delete() sobjs = Search.eval(expr) for sobj in sobjs: sobj.delete() return