"""
Create a database from scratch (wip)
"""
[docs]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()
[docs] 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)
[docs] 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()
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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
# ------------------------------------------------------
[docs] 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;""")
[docs] 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")
[docs] 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")