def update_in_reference(self): if not (self.reference_type and self.reference_name): return try: assignments = [d[0] for d in frappe.get_all("ToDo", filters={ "reference_type": self.reference_type, "reference_name": self.reference_name, "status": ("!=", "Cancelled") }, fields=["owner"], as_list=True)] assignments.reverse() frappe.db.set_value(self.reference_type, self.reference_name, "_assign", json.dumps(assignments), update_modified=False) except Exception as e: if frappe.db.is_table_missing(e) and frappe.flags.in_install: # no table return elif frappe.db.is_column_missing(e): from frappe.database.schema import add_column add_column(self.reference_type, "_assign", "Text") self.update_in_reference() else: raise
def update_comments_in_parent_after_request(): """update _comments in parent if _comments column is missing""" if hasattr(frappe.local, "_comments"): for (reference_doctype, reference_name, _comments) in frappe.local._comments: add_column(reference_doctype, "_comments", "Text") update_comments_in_parent(reference_doctype, reference_name, _comments) frappe.db.commit()
def execute(): frappe.db.sql( """update `tabSingles` set field='_liked_by' where field='_starred_by'""" ) frappe.db.commit() for table in frappe.db.get_tables(): columns = [r[0] for r in frappe.db.sql("DESC `{0}`".format(table))] if "_starred_by" in columns and '_liked_by' not in columns: frappe.db.sql_ddl( """alter table `{0}` change `_starred_by` `_liked_by` Text """. format(table)) if not frappe.db.has_column("Communication", "_liked_by"): add_column("Communication", "_liked_by", "Text")
def _toggle_like(doctype, name, add, user=None): """Same as toggle_like but hides param `user` from API""" if not user: user = frappe.session.user try: liked_by = frappe.db.get_value(doctype, name, "_liked_by") # CHANGED: Allow someone to like their own documents as it also works as a bookmark # if owner==frappe.session.user and add=="Yes": # frappe.throw(_("You cannot like something that you created")) if liked_by: liked_by = json.loads(liked_by) else: liked_by = [] if add == "Yes": if user not in liked_by: liked_by.append(user) add_comment(doctype, name) else: if user in liked_by: liked_by.remove(user) remove_like(doctype, name) frappe.db.set_value(doctype, name, "_liked_by", json.dumps(liked_by), update_modified=False) except frappe.db.ProgrammingError as e: if frappe.db.is_column_missing(e): add_column(doctype, "_liked_by", "Text") _toggle_like(doctype, name, add, user) else: raise
def _toggle_like(doctype, name, add, user=None): """Same as toggle_like but hides param `user` from API""" if not user: user = frappe.session.user try: liked_by = frappe.db.get_value(doctype, name, "_liked_by") if liked_by: liked_by = json.loads(liked_by) else: liked_by = [] if add == "Yes": if user not in liked_by: liked_by.append(user) add_comment(doctype, name) follow_document(doctype, name, user) else: if user in liked_by: liked_by.remove(user) remove_like(doctype, name) frappe.db.set_value(doctype, name, "_liked_by", json.dumps(liked_by), update_modified=False) except frappe.db.ProgrammingError as e: if frappe.db.is_column_missing(e): add_column(doctype, "_liked_by", "Text") _toggle_like(doctype, name, add, user) else: raise
def setup(self): """adds the _user_tags column if not exists""" from frappe.database.schema import add_column add_column(self.dt, "_user_tags", "Data")
def migrate(verbose=True, skip_failing=False, skip_search_index=False): '''Migrate all apps to the current version, will: - run before migrate hooks - run patches - sync doctypes (schema) - sync dashboards - sync jobs - sync fixtures - sync customizations - sync languages - sync web pages (from /www) - run after migrate hooks ''' service_status = check_connection(redis_services=["redis_cache"]) if False in service_status.values(): for service in service_status: if not service_status.get(service, True): print("{} service is not running.".format(service)) print("""Cannot run bench migrate without the services running. If you are running bench in development mode, make sure that bench is running: $ bench start Otherwise, check the server logs and ensure that all the required services are running.""") sys.exit(1) touched_tables_file = frappe.get_site_path('touched_tables.json') if os.path.exists(touched_tables_file): os.remove(touched_tables_file) try: add_column(doctype="DocType", column_name="migration_hash", fieldtype="Data") frappe.flags.touched_tables = set() frappe.flags.in_migrate = True clear_global_cache() #run before_migrate hooks for app in frappe.get_installed_apps(): for fn in frappe.get_hooks('before_migrate', app_name=app): frappe.get_attr(fn)() # run patches frappe.modules.patch_handler.run_all(skip_failing) # sync frappe.model.sync.sync_all() frappe.translate.clear_cache() sync_jobs() sync_fixtures() sync_dashboards() sync_customizations() sync_languages() frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu() # syncs statics clear_website_cache() # updating installed applications data frappe.get_single('Installed Applications').update_versions() #run after_migrate hooks for app in frappe.get_installed_apps(): for fn in frappe.get_hooks('after_migrate', app_name=app): frappe.get_attr(fn)() # build web_routes index if not skip_search_index: # Run this last as it updates the current session print('Building search index for {}'.format(frappe.local.site)) build_index_for_all_routes() frappe.db.commit() clear_notifications() frappe.publish_realtime("version-update") frappe.flags.in_migrate = False finally: with open(touched_tables_file, 'w') as f: json.dump(list(frappe.flags.touched_tables), f, sort_keys=True, indent=4) frappe.flags.touched_tables.clear()