You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

287 lines
9.7 KiB

  1. """
  2. Create a database from scratch (wip)
  3. """
  4. class DatabaseInstance:
  5. def __init__(self, conn = None,db_name = None):
  6. self.conn = conn
  7. self.db_name = db_name
  8. # def setup(self):
  9. # self.create_db_and_user()
  10. # self.create_base_tables()
  11. # self.import_system_module()
  12. # self.setup_users()
  13. def create_db_and_user(self):
  14. import webnotes.defs
  15. # create user and db
  16. self.conn.sql("CREATE USER '%s'@'localhost' IDENTIFIED BY '%s'" % (self.db_name, webnotes.defs.db_password))
  17. self.conn.sql("CREATE DATABASE IF NOT EXISTS `%s` ;" % self.db_name)
  18. self.conn.sql("GRANT ALL PRIVILEGES ON `%s` . * TO '%s'@'localhost';" % (self.db_name, self.db_name))
  19. self.conn.sql("FLUSH PRIVILEGES")
  20. self.conn.sql("SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;")
  21. self.conn.sql("USE %s"%self.db_name)
  22. def create_base_tables(self):
  23. self.create_singles()
  24. self.create_sessions()
  25. self.create_doctypecache()
  26. self.create_role()
  27. self.create_docfield()
  28. self.create_docperm()
  29. self.create_docformat()
  30. self.create_doctype()
  31. def import_system_module(self):
  32. docs = [
  33. ['DocType','Role']
  34. ,['Role','Administrator']
  35. ,['Role','Guest']
  36. ,['Role','All']
  37. ,['DocType','DocPerm']
  38. ,['DocType','DocFormat']
  39. ,['DocType','DocField']
  40. ,['DocType','DocType']
  41. ,['DocType','DefaultValue']
  42. ,['DocType','Profile']
  43. ,['DocType','UserRole']
  44. ]
  45. # import in sequence
  46. for d in docs:
  47. import_module.import_from_files(record_list=[['System',d[0],d[1]]])
  48. # import all
  49. import_module.import_from_files([['System']])
  50. # singles
  51. # ------------------------------------------------------
  52. def create_singles(self):
  53. self.conn.sql("DROP TABLE IF EXISTS `tabSingles`")
  54. self.conn.sql("""CREATE TABLE `tabSingles` (
  55. `doctype` varchar(40) default NULL,
  56. `field` varchar(40) default NULL,
  57. `value` text,
  58. KEY `doctype` (`doctype`)
  59. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  60. # sessions
  61. # ------------------------------------------------------
  62. def create_sessions(self):
  63. self.conn.sql("DROP TABLE IF EXISTS `tabSessions`;")
  64. self.conn.sql("""CREATE TABLE `tabSessions` (
  65. `user` varchar(40) default NULL,
  66. `sid` varchar(120) default NULL,
  67. `sessiondata` longtext,
  68. `ipaddress` varchar(16) default NULL,
  69. `lastupdate` datetime default NULL
  70. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;""")
  71. # doc type cache
  72. # ------------------------------------------------------
  73. def create_doctypecache(self):
  74. self.conn.sql("DROP TABLE IF EXISTS `__DocTypeCache`")
  75. self.conn.sql("create table `__DocTypeCache` (name VARCHAR(120), modified DATETIME, content TEXT, server_code_compiled TEXT)")
  76. self.conn.sql("""
  77. create table `__SessionCache` (user VARCHAR(120), country VARCHAR(120), cache LONGTEXT)
  78. """)
  79. # Role
  80. # ------------------------------------------------------
  81. def create_role(self):
  82. self.conn.sql("DROP TABLE IF EXISTS `tabRole`")
  83. self.conn.sql("""CREATE TABLE `tabRole` (
  84. `name` varchar(120) NOT NULL,
  85. `creation` datetime default NULL,
  86. `modified` datetime default NULL,
  87. `modified_by` varchar(40) default NULL,
  88. `owner` varchar(40) default NULL,
  89. `docstatus` int(1) default '0',
  90. `parent` varchar(120) default NULL,
  91. `parentfield` varchar(120) default NULL,
  92. `parenttype` varchar(120) default NULL,
  93. `idx` int(8) default NULL,
  94. `role_name` varchar(180) default NULL,
  95. `module` varchar(180) default NULL,
  96. PRIMARY KEY (`name`),
  97. KEY `parent` (`parent`)
  98. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  99. # DocField
  100. # ------------------------------------------------------
  101. def create_docfield(self):
  102. self.conn.sql("DROP TABLE IF EXISTS `tabDocField`")
  103. self.conn.sql("""CREATE TABLE `tabDocField` (
  104. `name` varchar(120) NOT NULL,
  105. `creation` datetime default NULL,
  106. `modified` datetime default NULL,
  107. `modified_by` varchar(40) default NULL,
  108. `owner` varchar(40) default NULL,
  109. `docstatus` int(1) default '0',
  110. `parent` varchar(120) default NULL,
  111. `parentfield` varchar(120) default NULL,
  112. `parenttype` varchar(120) default NULL,
  113. `idx` int(8) default NULL,
  114. `fieldname` varchar(180) default NULL,
  115. `label` varchar(180) default NULL,
  116. `oldfieldname` varchar(180) default NULL,
  117. `fieldtype` varchar(180) default NULL,
  118. `oldfieldtype` varchar(180) default NULL,
  119. `options` text,
  120. `search_index` int(3) default NULL,
  121. `hidden` int(3) default NULL,
  122. `print_hide` int(3) default NULL,
  123. `report_hide` int(3) default NULL,
  124. `reqd` int(3) default NULL,
  125. `no_copy` int(3) default NULL,
  126. `allow_on_submit` int(3) default NULL,
  127. `trigger` varchar(180) default NULL,
  128. `depends_on` varchar(180) default NULL,
  129. `permlevel` int(3) default NULL,
  130. `width` varchar(180) default NULL,
  131. `default` text,
  132. `description` text,
  133. `colour` varchar(180) default NULL,
  134. `icon` varchar(180) default NULL,
  135. `in_filter` int(3) default NULL,
  136. PRIMARY KEY (`name`),
  137. KEY `parent` (`parent`),
  138. KEY `label` (`label`),
  139. KEY `fieldtype` (`fieldtype`),
  140. KEY `fieldname` (`fieldname`)
  141. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  142. # DocPerm
  143. # ------------------------------------------------------
  144. def create_docperm(self):
  145. self.conn.sql("DROP TABLE IF EXISTS `tabDocPerm`")
  146. self.conn.sql("""CREATE TABLE `tabDocPerm` (
  147. `name` varchar(120) NOT NULL,
  148. `creation` datetime default NULL,
  149. `modified` datetime default NULL,
  150. `modified_by` varchar(40) default NULL,
  151. `owner` varchar(40) default NULL,
  152. `docstatus` int(1) default '0',
  153. `parent` varchar(120) default NULL,
  154. `parentfield` varchar(120) default NULL,
  155. `parenttype` varchar(120) default NULL,
  156. `idx` int(8) default NULL,
  157. `permlevel` int(11) default NULL,
  158. `role` varchar(180) default NULL,
  159. `match` varchar(180) default NULL,
  160. `read` int(3) default NULL,
  161. `write` int(3) default NULL,
  162. `create` int(3) default NULL,
  163. `submit` int(3) default NULL,
  164. `cancel` int(3) default NULL,
  165. `amend` int(3) default NULL,
  166. `execute` int(3) default NULL,
  167. PRIMARY KEY (`name`),
  168. KEY `parent` (`parent`)
  169. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  170. # DocFormat
  171. # ------------------------------------------------------
  172. def create_docformat(self):
  173. self.conn.sql("DROP TABLE IF EXISTS `tabDocFormat`")
  174. self.conn.sql("""CREATE TABLE `tabDocFormat` (
  175. `name` varchar(120) NOT NULL,
  176. `creation` datetime default NULL,
  177. `modified` datetime default NULL,
  178. `modified_by` varchar(40) default NULL,
  179. `owner` varchar(40) default NULL,
  180. `docstatus` int(1) default '0',
  181. `parent` varchar(120) default NULL,
  182. `parentfield` varchar(120) default NULL,
  183. `parenttype` varchar(120) default NULL,
  184. `idx` int(8) default NULL,
  185. `format` varchar(180) default NULL,
  186. PRIMARY KEY (`name`),
  187. KEY `parent` (`parent`)
  188. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  189. # DocType
  190. # ------------------------------------------------------
  191. def create_doctype(self):
  192. self.conn.sql("DROP TABLE IF EXISTS `tabDocType`")
  193. self.conn.sql("""CREATE TABLE `tabDocType` (
  194. `name` varchar(180) NOT NULL default '',
  195. `creation` datetime default NULL,
  196. `modified` datetime default NULL,
  197. `modified_by` varchar(40) default NULL,
  198. `owner` varchar(180) default NULL,
  199. `docstatus` int(1) default '0',
  200. `parent` varchar(120) default NULL,
  201. `parentfield` varchar(120) default NULL,
  202. `parenttype` varchar(120) default NULL,
  203. `idx` int(8) default NULL,
  204. `search_fields` varchar(180) default NULL,
  205. `issingle` int(1) default NULL,
  206. `istable` int(1) default NULL,
  207. `version` int(11) default NULL,
  208. `module` varchar(180) default NULL,
  209. `autoname` varchar(180) default NULL,
  210. `name_case` varchar(180) default NULL,
  211. `description` text,
  212. `colour` varchar(180) default NULL,
  213. `read_only` int(1) default NULL,
  214. `in_create` int(1) default NULL,
  215. `show_in_menu` int(3) default NULL,
  216. `menu_index` int(11) default NULL,
  217. `parent_node` varchar(180) default NULL,
  218. `smallicon` varchar(180) default NULL,
  219. `allow_print` int(1) default NULL,
  220. `allow_email` int(1) default NULL,
  221. `allow_copy` int(1) default NULL,
  222. `allow_rename` int(1) default NULL,
  223. `hide_toolbar` int(1) default NULL,
  224. `hide_heading` int(1) default NULL,
  225. `allow_attach` int(1) default NULL,
  226. `use_template` int(1) default NULL,
  227. `max_attachments` int(11) default NULL,
  228. `section_style` varchar(180) default NULL,
  229. `client_script` text,
  230. `client_script_core` text,
  231. `server_code` text,
  232. `server_code_core` text,
  233. `server_code_compiled` text,
  234. `client_string` text,
  235. `server_code_error` varchar(180) default NULL,
  236. `print_outline` varchar(180) default NULL,
  237. `dt_template` text,
  238. `is_transaction_doc` int(1) default NULL,
  239. `change_log` text,
  240. `read_only_onload` int(1) default NULL,
  241. PRIMARY KEY (`name`),
  242. KEY `parent` (`parent`)
  243. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  244. def create_module_def(self):
  245. self.conn.sql("DROP TABLE IF EXISTS `tabModule Def`")
  246. 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")
  247. def post_cleanup(self):
  248. self.conn.sql("use %s;" % self.db_name)
  249. self.conn.sql("update tabProfile set password = password('admin') where name='Administrator'")
  250. self.conn.sql("update tabDocType set server_code_compiled = NULL")