""" Create a database from scratch (wip) """ class DatabaseInstance: def __init__(self, conn = None,db_name = None): self.conn = conn self.db_name = db_name # def setup(self): # self.create_db_and_user() # self.create_base_tables() # self.import_system_module() # self.setup_users() def create_db_and_user(self): import webnotes.defs # create user and db self.conn.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s'" % (self.db_name, webnotes.defs.db_password)) self.conn.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % self.db_name) self.conn.sql("GRANT ALL PRIVILEGES ON `%s` . * TO '%s'@'localhost';" % (self.db_name, self.db_name)) self.conn.sql("FLUSH PRIVILEGES") self.conn.sql("SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;") self.conn.sql("USE %s"%self.db_name) def create_base_tables(self): self.create_singles() self.create_sessions() self.create_doctypecache() self.create_role() self.create_docfield() self.create_docperm() self.create_docformat() self.create_doctype() def import_system_module(self): docs = [ ['DocType','Role'] ,['Role','Administrator'] ,['Role','Guest'] ,['Role','All'] ,['DocType','DocPerm'] ,['DocType','DocFormat'] ,['DocType','DocField'] ,['DocType','DocType'] ,['DocType','DefaultValue'] ,['DocType','Profile'] ,['DocType','UserRole'] ] # import in sequence for d in docs: import_module.import_from_files(record_list=[['System',d[0],d[1]]]) # import all import_module.import_from_files([['System']]) # singles # ------------------------------------------------------ def create_singles(self): self.conn.sql("DROP TABLE IF EXISTS `tabSingles`") self.conn.sql("""CREATE TABLE `tabSingles` ( `doctype` varchar(40) default NULL, `field` varchar(40) default NULL, `value` text, KEY `doctype` (`doctype`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") # sessions # ------------------------------------------------------ def create_sessions(self): self.conn.sql("DROP TABLE IF EXISTS `tabSessions`;") self.conn.sql("""CREATE TABLE `tabSessions` ( `user` varchar(40) default NULL, `sid` varchar(120) default NULL, `sessiondata` longtext, `ipaddress` varchar(16) default NULL, `lastupdate` datetime default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;""") # doc type cache # ------------------------------------------------------ def create_doctypecache(self): self.conn.sql("DROP TABLE IF EXISTS `__DocTypeCache`") self.conn.sql("create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)") # Role # ------------------------------------------------------ def create_role(self): self.conn.sql("DROP TABLE IF EXISTS `tabRole`") self.conn.sql("""CREATE TABLE `tabRole` ( `name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL, `modified_by` varchar(40) default NULL, `owner` varchar(40) default NULL, `docstatus` int(1) default '0', `parent` varchar(120) default NULL, `parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL, `role_name` varchar(180) default NULL, `module` varchar(180) default NULL, PRIMARY KEY (`name`), KEY `parent` (`parent`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") # DocField # ------------------------------------------------------ def create_docfield(self): self.conn.sql("DROP TABLE IF EXISTS `tabDocField`") self.conn.sql("""CREATE TABLE `tabDocField` ( `name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL, `modified_by` varchar(40) default NULL, `owner` varchar(40) default NULL, `docstatus` int(1) default '0', `parent` varchar(120) default NULL, `parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL, `fieldname` varchar(180) default NULL, `label` varchar(180) default NULL, `oldfieldname` varchar(180) default NULL, `fieldtype` varchar(180) default NULL, `oldfieldtype` varchar(180) default NULL, `options` text, `search_index` int(3) default NULL, `hidden` int(3) default NULL, `print_hide` int(3) default NULL, `report_hide` int(3) default NULL, `reqd` int(3) default NULL, `no_copy` int(3) default NULL, `allow_on_submit` int(3) default NULL, `trigger` varchar(180) default NULL, `depends_on` varchar(180) default NULL, `permlevel` int(3) default NULL, `width` varchar(180) default NULL, `default` text, `description` text, `colour` varchar(180) default NULL, `icon` varchar(180) default NULL, `in_filter` int(3) default NULL, PRIMARY KEY (`name`), KEY `parent` (`parent`), KEY `label` (`label`), KEY `fieldtype` (`fieldtype`), KEY `fieldname` (`fieldname`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") # DocPerm # ------------------------------------------------------ def create_docperm(self): self.conn.sql("DROP TABLE IF EXISTS `tabDocPerm`") self.conn.sql("""CREATE TABLE `tabDocPerm` ( `name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL, `modified_by` varchar(40) default NULL, `owner` varchar(40) default NULL, `docstatus` int(1) default '0', `parent` varchar(120) default NULL, `parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL, `permlevel` int(11) default NULL, `role` varchar(180) default NULL, `match` varchar(180) default NULL, `read` int(3) default NULL, `write` int(3) default NULL, `create` int(3) default NULL, `submit` int(3) default NULL, `cancel` int(3) default NULL, `amend` int(3) default NULL, `execute` int(3) default NULL, PRIMARY KEY (`name`), KEY `parent` (`parent`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") # DocFormat # ------------------------------------------------------ def create_docformat(self): self.conn.sql("DROP TABLE IF EXISTS `tabDocFormat`") self.conn.sql("""CREATE TABLE `tabDocFormat` ( `name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL, `modified_by` varchar(40) default NULL, `owner` varchar(40) default NULL, `docstatus` int(1) default '0', `parent` varchar(120) default NULL, `parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL, `format` varchar(180) default NULL, PRIMARY KEY (`name`), KEY `parent` (`parent`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") # DocType # ------------------------------------------------------ def create_doctype(self): self.conn.sql("DROP TABLE IF EXISTS `tabDocType`") self.conn.sql("""CREATE TABLE `tabDocType` ( `name` varchar(180) NOT NULL default '', `creation` datetime default NULL, `modified` datetime default NULL, `modified_by` varchar(40) default NULL, `owner` varchar(180) default NULL, `docstatus` int(1) default '0', `parent` varchar(120) default NULL, `parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL, `search_fields` varchar(180) default NULL, `issingle` int(1) default NULL, `istable` int(1) default NULL, `version` int(11) default NULL, `module` varchar(180) default NULL, `autoname` varchar(180) default NULL, `name_case` varchar(180) default NULL, `description` text, `colour` varchar(180) default NULL, `read_only` int(1) default NULL, `in_create` int(1) default NULL, `show_in_menu` int(3) default NULL, `menu_index` int(11) default NULL, `parent_node` varchar(180) default NULL, `smallicon` varchar(180) default NULL, `allow_print` int(1) default NULL, `allow_email` int(1) default NULL, `allow_copy` int(1) default NULL, `allow_rename` int(1) default NULL, `hide_toolbar` int(1) default NULL, `hide_heading` int(1) default NULL, `allow_attach` int(1) default NULL, `use_template` int(1) default NULL, `max_attachments` int(11) default NULL, `section_style` varchar(180) default NULL, `client_script` text, `client_script_core` text, `server_code` text, `server_code_core` text, `server_code_compiled` text, `client_string` text, `server_code_error` varchar(180) default NULL, `print_outline` varchar(180) default NULL, `dt_template` text, `is_transaction_doc` int(1) default NULL, `change_log` text, `read_only_onload` int(1) default NULL, PRIMARY KEY (`name`), KEY `parent` (`parent`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""") def create_module_def(self): self.conn.sql("DROP TABLE IF EXISTS `tabModule Def`") self.conn.sql("CREATE TABLE `tabModule Def` (`name` varchar(120) NOT NULL, `creation` datetime default NULL, `modified` datetime default NULL,`modified_by` varchar(40) default NULL,`owner` varchar(40) default NULL,`docstatus` int(1) default '0', `parent` varchar(120) default NULL,`parentfield` varchar(120) default NULL, `parenttype` varchar(120) default NULL, `idx` int(8) default NULL,`module_name` varchar(180) default NULL,`doctype_list` text, PRIMARY KEY (`name`), KEY `parent` (`parent`)) ENGINE=InnoDB") def post_cleanup(self): self.conn.sql("use %s;" % self.db_name) self.conn.sql("update tabProfile set password = password('admin') where name='Administrator'") self.conn.sql("update tabDocType set server_code_compiled = NULL")