Exemplo n.º 1
0
	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
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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")
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
	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")
Exemplo n.º 7
0
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()