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.
 
 
 
 
 
 

106 line
3.7 KiB

  1. from __future__ import unicode_literals
  2. import frappe
  3. from frappe.exceptions import DataError
  4. from frappe.utils.password import get_decrypted_password
  5. app_list = [
  6. {"app_name": "razorpay_integration", "service_name": "Razorpay", "doctype": "Razorpay Settings", "remove": True},
  7. {"app_name": "paypal_integration", "service_name": "PayPal", "doctype": "PayPal Settings", "remove": True},
  8. {"app_name": "frappe", "service_name": "Dropbox", "doctype": "Dropbox Backup", "remove": False}
  9. ]
  10. def execute():
  11. frappe.reload_doc("integration_broker", "doctype", "integration_service")
  12. installed_apps = frappe.get_installed_apps()
  13. for app_details in app_list:
  14. if app_details["app_name"] in installed_apps:
  15. settings = get_app_settings(app_details)
  16. if app_details["remove"]:
  17. uninstall_app(app_details["app_name"])
  18. try:
  19. setup_integration_service(app_details, settings)
  20. except DataError:
  21. pass
  22. frappe.delete_doc("DocType", "Dropbox Backup")
  23. def setup_integration_service(app_details, settings=None):
  24. if not settings:
  25. return
  26. setup_service_settings(app_details["service_name"], settings)
  27. if frappe.db.exists("Integration Service", app_details["service_name"]):
  28. integration_service = frappe.get_doc("Integration Service", app_details["service_name"])
  29. else:
  30. integration_service = frappe.new_doc("Integration Service")
  31. integration_service.service = app_details["service_name"]
  32. integration_service.enabled = 1
  33. integration_service.flags.ignore_mandatory = True
  34. integration_service.save(ignore_permissions=True)
  35. def get_app_settings(app_details):
  36. parameters = {}
  37. doctype = docname = app_details["doctype"]
  38. app_settings = get_parameters(app_details)
  39. if app_settings:
  40. settings = app_settings["settings"]
  41. frappe.reload_doc("integrations", "doctype", "{0}_settings".format(app_details["service_name"].lower()))
  42. controller = frappe.get_meta("{0} Settings".format(app_details["service_name"]))
  43. for d in controller.fields:
  44. if settings.get(d.fieldname):
  45. if ''.join(set(settings.get(d.fieldname))) == '*':
  46. setattr(settings, d.fieldname, get_decrypted_password(doctype, docname, d.fieldname, raise_exception=True))
  47. parameters.update({d.fieldname : settings.get(d.fieldname)})
  48. return parameters
  49. def uninstall_app(app_name):
  50. from frappe.installer import remove_from_installed_apps
  51. remove_from_installed_apps(app_name)
  52. def get_parameters(app_details):
  53. if app_details["service_name"] == "Razorpay":
  54. return {"settings": frappe.get_doc(app_details["doctype"])}
  55. elif app_details["service_name"] == "PayPal":
  56. if frappe.conf.paypal_username and frappe.conf.paypal_password and frappe.conf.paypal_signature:
  57. return {
  58. "settings": {
  59. "api_username": frappe.conf.paypal_username,
  60. "api_password": frappe.conf.paypal_password,
  61. "signature": frappe.conf.paypal_signature
  62. }
  63. }
  64. else:
  65. return {"settings": frappe.get_doc(app_details["doctype"])}
  66. elif app_details["service_name"] == "Dropbox":
  67. doc = frappe.db.get_value(app_details["doctype"], None,
  68. ["dropbox_access_key", "dropbox_access_secret", "upload_backups_to_dropbox"], as_dict=1)
  69. if not (frappe.conf.dropbox_access_key and frappe.conf.dropbox_secret_key):
  70. return
  71. return {
  72. "settings": {
  73. "app_access_key": frappe.conf.dropbox_access_key,
  74. "app_secret_key": frappe.conf.dropbox_secret_key,
  75. "dropbox_access_key": doc.dropbox_access_key,
  76. "dropbox_access_secret": doc.dropbox_access_secret,
  77. "backup_frequency": doc.upload_backups_to_dropbox
  78. }
  79. }
  80. def setup_service_settings(service_name, settings):
  81. service_doc = frappe.get_doc("{0} Settings".format(service_name))
  82. service_doc.update(settings)
  83. service_doc.flags.ignore_mandatory = True
  84. service_doc.save(ignore_permissions=True)