您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

285 行
9.5 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. # Role
  77. # ------------------------------------------------------
  78. def create_role(self):
  79. self.conn.sql("DROP TABLE IF EXISTS `tabRole`")
  80. self.conn.sql("""CREATE TABLE `tabRole` (
  81. `name` varchar(120) NOT NULL,
  82. `creation` datetime default NULL,
  83. `modified` datetime default NULL,
  84. `modified_by` varchar(40) default NULL,
  85. `owner` varchar(40) default NULL,
  86. `docstatus` int(1) default '0',
  87. `parent` varchar(120) default NULL,
  88. `parentfield` varchar(120) default NULL,
  89. `parenttype` varchar(120) default NULL,
  90. `idx` int(8) default NULL,
  91. `role_name` varchar(180) default NULL,
  92. `module` varchar(180) default NULL,
  93. PRIMARY KEY (`name`),
  94. KEY `parent` (`parent`)
  95. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  96. # DocField
  97. # ------------------------------------------------------
  98. def create_docfield(self):
  99. self.conn.sql("DROP TABLE IF EXISTS `tabDocField`")
  100. self.conn.sql("""CREATE TABLE `tabDocField` (
  101. `name` varchar(120) NOT NULL,
  102. `creation` datetime default NULL,
  103. `modified` datetime default NULL,
  104. `modified_by` varchar(40) default NULL,
  105. `owner` varchar(40) default NULL,
  106. `docstatus` int(1) default '0',
  107. `parent` varchar(120) default NULL,
  108. `parentfield` varchar(120) default NULL,
  109. `parenttype` varchar(120) default NULL,
  110. `idx` int(8) default NULL,
  111. `fieldname` varchar(180) default NULL,
  112. `label` varchar(180) default NULL,
  113. `oldfieldname` varchar(180) default NULL,
  114. `fieldtype` varchar(180) default NULL,
  115. `oldfieldtype` varchar(180) default NULL,
  116. `options` text,
  117. `search_index` int(3) default NULL,
  118. `hidden` int(3) default NULL,
  119. `print_hide` int(3) default NULL,
  120. `report_hide` int(3) default NULL,
  121. `reqd` int(3) default NULL,
  122. `no_copy` int(3) default NULL,
  123. `allow_on_submit` int(3) default NULL,
  124. `trigger` varchar(180) default NULL,
  125. `depends_on` varchar(180) default NULL,
  126. `permlevel` int(3) default NULL,
  127. `width` varchar(180) default NULL,
  128. `default` text,
  129. `description` text,
  130. `colour` varchar(180) default NULL,
  131. `icon` varchar(180) default NULL,
  132. `in_filter` int(3) default NULL,
  133. PRIMARY KEY (`name`),
  134. KEY `parent` (`parent`),
  135. KEY `label` (`label`),
  136. KEY `fieldtype` (`fieldtype`),
  137. KEY `fieldname` (`fieldname`)
  138. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  139. # DocPerm
  140. # ------------------------------------------------------
  141. def create_docperm(self):
  142. self.conn.sql("DROP TABLE IF EXISTS `tabDocPerm`")
  143. self.conn.sql("""CREATE TABLE `tabDocPerm` (
  144. `name` varchar(120) NOT NULL,
  145. `creation` datetime default NULL,
  146. `modified` datetime default NULL,
  147. `modified_by` varchar(40) default NULL,
  148. `owner` varchar(40) default NULL,
  149. `docstatus` int(1) default '0',
  150. `parent` varchar(120) default NULL,
  151. `parentfield` varchar(120) default NULL,
  152. `parenttype` varchar(120) default NULL,
  153. `idx` int(8) default NULL,
  154. `permlevel` int(11) default NULL,
  155. `role` varchar(180) default NULL,
  156. `match` varchar(180) default NULL,
  157. `read` int(3) default NULL,
  158. `write` int(3) default NULL,
  159. `create` int(3) default NULL,
  160. `submit` int(3) default NULL,
  161. `cancel` int(3) default NULL,
  162. `amend` int(3) default NULL,
  163. `execute` int(3) default NULL,
  164. PRIMARY KEY (`name`),
  165. KEY `parent` (`parent`)
  166. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  167. # DocFormat
  168. # ------------------------------------------------------
  169. def create_docformat(self):
  170. self.conn.sql("DROP TABLE IF EXISTS `tabDocFormat`")
  171. self.conn.sql("""CREATE TABLE `tabDocFormat` (
  172. `name` varchar(120) NOT NULL,
  173. `creation` datetime default NULL,
  174. `modified` datetime default NULL,
  175. `modified_by` varchar(40) default NULL,
  176. `owner` varchar(40) default NULL,
  177. `docstatus` int(1) default '0',
  178. `parent` varchar(120) default NULL,
  179. `parentfield` varchar(120) default NULL,
  180. `parenttype` varchar(120) default NULL,
  181. `idx` int(8) default NULL,
  182. `format` varchar(180) default NULL,
  183. PRIMARY KEY (`name`),
  184. KEY `parent` (`parent`)
  185. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  186. # DocType
  187. # ------------------------------------------------------
  188. def create_doctype(self):
  189. self.conn.sql("DROP TABLE IF EXISTS `tabDocType`")
  190. self.conn.sql("""CREATE TABLE `tabDocType` (
  191. `name` varchar(180) NOT NULL default '',
  192. `creation` datetime default NULL,
  193. `modified` datetime default NULL,
  194. `modified_by` varchar(40) default NULL,
  195. `owner` varchar(180) default NULL,
  196. `docstatus` int(1) default '0',
  197. `parent` varchar(120) default NULL,
  198. `parentfield` varchar(120) default NULL,
  199. `parenttype` varchar(120) default NULL,
  200. `idx` int(8) default NULL,
  201. `search_fields` varchar(180) default NULL,
  202. `issingle` int(1) default NULL,
  203. `istable` int(1) default NULL,
  204. `version` int(11) default NULL,
  205. `module` varchar(180) default NULL,
  206. `autoname` varchar(180) default NULL,
  207. `name_case` varchar(180) default NULL,
  208. `description` text,
  209. `colour` varchar(180) default NULL,
  210. `read_only` int(1) default NULL,
  211. `in_create` int(1) default NULL,
  212. `show_in_menu` int(3) default NULL,
  213. `menu_index` int(11) default NULL,
  214. `parent_node` varchar(180) default NULL,
  215. `smallicon` varchar(180) default NULL,
  216. `allow_print` int(1) default NULL,
  217. `allow_email` int(1) default NULL,
  218. `allow_copy` int(1) default NULL,
  219. `allow_rename` int(1) default NULL,
  220. `hide_toolbar` int(1) default NULL,
  221. `hide_heading` int(1) default NULL,
  222. `allow_attach` int(1) default NULL,
  223. `use_template` int(1) default NULL,
  224. `max_attachments` int(11) default NULL,
  225. `section_style` varchar(180) default NULL,
  226. `client_script` text,
  227. `client_script_core` text,
  228. `server_code` text,
  229. `server_code_core` text,
  230. `server_code_compiled` text,
  231. `client_string` text,
  232. `server_code_error` varchar(180) default NULL,
  233. `print_outline` varchar(180) default NULL,
  234. `dt_template` text,
  235. `is_transaction_doc` int(1) default NULL,
  236. `change_log` text,
  237. `read_only_onload` int(1) default NULL,
  238. PRIMARY KEY (`name`),
  239. KEY `parent` (`parent`)
  240. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;""")
  241. def create_module_def(self):
  242. self.conn.sql("DROP TABLE IF EXISTS `tabModule Def`")
  243. 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")
  244. def post_cleanup(self):
  245. self.conn.sql("use %s;" % self.db_name)
  246. self.conn.sql("update tabProfile set password = password('admin') where name='Administrator'")
  247. self.conn.sql("update tabDocType set server_code_compiled = NULL")