Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

13 лет назад
14 лет назад
11 лет назад
14 лет назад
11 лет назад
11 лет назад
11 лет назад
14 лет назад
11 лет назад
11 лет назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import webnotes, os
  5. import webnotes.model.doc
  6. from webnotes.modules import scrub, get_module_path, lower_case_files_for, scrub_dt_dn
  7. def export_doc(doc):
  8. export_to_files([[doc.doctype, doc.name]])
  9. def export_to_files(record_list=None, record_module=None, verbose=0, create_init=None):
  10. """
  11. Export record_list to files. record_list is a list of lists ([doctype],[docname] ) ,
  12. """
  13. if webnotes.flags.in_import:
  14. return
  15. module_doclist =[]
  16. if record_list:
  17. for record in record_list:
  18. write_document_file(webnotes.model.doc.get(record[0], record[1]),
  19. record_module, create_init=create_init)
  20. def write_document_file(doclist, record_module=None, create_init=None):
  21. from webnotes.modules.utils import pprint_doclist
  22. doclist = [filter_fields(d.fields) for d in doclist]
  23. module = record_module or get_module_name(doclist)
  24. if create_init is None:
  25. create_init = doclist[0]['doctype'] in lower_case_files_for
  26. # create folder
  27. folder = create_folder(module, doclist[0]['doctype'], doclist[0]['name'], create_init)
  28. # write the data file
  29. fname = (doclist[0]['doctype'] in lower_case_files_for and scrub(doclist[0]['name'])) or doclist[0]['name']
  30. with open(os.path.join(folder, fname +'.txt'),'w+') as txtfile:
  31. txtfile.write(pprint_doclist(doclist))
  32. def filter_fields(doc):
  33. from webnotes.model.doctype import get
  34. from webnotes.model import default_fields
  35. doctypelist = get(doc.doctype, False)
  36. valid_fields = [d.fieldname for d in doctypelist.get({"parent":doc.doctype,
  37. "doctype":"DocField"})]
  38. to_remove = []
  39. for key in doc:
  40. if (not key in default_fields) and (not key in valid_fields):
  41. to_remove.append(key)
  42. elif doc[key]==None:
  43. to_remove.append(key)
  44. for key in to_remove:
  45. del doc[key]
  46. return doc
  47. def get_module_name(doclist):
  48. if doclist[0]['doctype'] == 'Module Def':
  49. module = doclist[0]['name']
  50. elif doclist[0]['doctype']=='Control Panel':
  51. module = 'Core'
  52. elif doclist[0]['doctype']=="Workflow":
  53. module = webnotes.conn.get_value("DocType", doclist[0]["document_type"], "module")
  54. else:
  55. module = doclist[0]['module']
  56. return module
  57. def create_folder(module, dt, dn, create_init):
  58. module_path = get_module_path(module)
  59. dt, dn = scrub_dt_dn(dt, dn)
  60. # create folder
  61. folder = os.path.join(module_path, dt, dn)
  62. webnotes.create_folder(folder)
  63. # create init_py_files
  64. if create_init:
  65. create_init_py(module_path, dt, dn)
  66. return folder
  67. def create_init_py(module_path, dt, dn):
  68. def create_if_not_exists(path):
  69. initpy = os.path.join(path, '__init__.py')
  70. if not os.path.exists(initpy):
  71. open(initpy, 'w').close()
  72. create_if_not_exists(os.path.join(module_path))
  73. create_if_not_exists(os.path.join(module_path, dt))
  74. create_if_not_exists(os.path.join(module_path, dt, dn))