Pārlūkot izejas kodu

Merge branch 'develop' into daterange-fix

version-14
Shariq Ansari pirms 3 gadiem
committed by GitHub
vecāks
revīzija
590d511618
Šim parakstam datu bāzē netika atrasta zināma atslēga GPG atslēgas ID: 4AEE18F83AFDEB23
12 mainītis faili ar 46 papildinājumiem un 147 dzēšanām
  1. +1
    -1
      frappe/event_streaming/doctype/document_type_mapping/document_type_mapping.js
  2. +3
    -8
      frappe/event_streaming/doctype/event_producer/event_producer.py
  3. +1
    -1
      frappe/hooks.py
  4. +1
    -0
      frappe/patches.txt
  5. +0
    -7
      frappe/patches/v11_0/sync_user_permission_doctype_before_migrate.py
  6. +0
    -9
      frappe/patches/v12_0/delete_gsuite_if_exists.py
  7. +0
    -11
      frappe/patches/v12_0/init_desk_settings.py
  8. +0
    -11
      frappe/patches/v12_0/remove_gcalendar_gmaps.py
  9. +0
    -12
      frappe/patches/v12_0/webpage_migrate_description_to_meta_tag.py
  10. +0
    -12
      frappe/patches/v12_0/website_meta_tag_parent.py
  11. +0
    -75
      frappe/patches/v13_0/cleanup_desk_cards.py
  12. +40
    -0
      frappe/tests/test_patches.py

+ 1
- 1
frappe/event_streaming/doctype/document_type_mapping/document_type_mapping.js Parādīt failu

@@ -7,7 +7,7 @@ frappe.ui.form.on('Document Type Mapping', {
frappe.model.clear_table(frm.doc, 'field_mapping');
let fields = frm.events.get_fields(frm);
$.each(fields, function(i, data) {
let row = frappe.model.add_child(frm.doc, 'Document Type Mapping', 'field_mapping');
let row = frappe.model.add_child(frm.doc, 'Document Type Field Mapping', 'field_mapping');
row.local_fieldname = data;
});
refresh_field('field_mapping');


+ 3
- 8
frappe/event_streaming/doctype/event_producer/event_producer.py Parādīt failu

@@ -315,8 +315,9 @@ def set_insert(update, producer_site, event_producer):
else:
# if event consumer is not saving documents with the same name as the producer
# store the remote docname in a custom field for future updates
local_doc = doc.insert(set_child_names=False)
set_custom_fields(local_doc, update.docname, event_producer)
doc.remote_docname = update.docname
doc.remote_site_name = event_producer
doc.insert(set_child_names=False)


def set_update(update, producer_site):
@@ -567,9 +568,3 @@ def resync(update):
update = get_mapped_update(update, producer_site)
update.data = json.loads(update.data)
return sync(update, producer_site, event_producer, in_retry=True)


def set_custom_fields(local_doc, remote_docname, remote_site_name):
"""sets custom field in doc for storing remote docname"""
frappe.db.set_value(local_doc.doctype, local_doc.name, "remote_docname", remote_docname)
frappe.db.set_value(local_doc.doctype, local_doc.name, "remote_site_name", remote_site_name)

+ 1
- 1
frappe/hooks.py Parādīt failu

@@ -278,7 +278,7 @@ setup_wizard_exception = [
"frappe.desk.page.setup_wizard.setup_wizard.log_setup_wizard_exception",
]

before_migrate = ["frappe.patches.v11_0.sync_user_permission_doctype_before_migrate.execute"]
before_migrate = []
after_migrate = ["frappe.website.doctype.website_theme.website_theme.after_migrate"]

otp_methods = ["OTP App", "Email", "SMS"]


+ 1
- 0
frappe/patches.txt Parādīt failu

@@ -202,5 +202,6 @@ frappe.patches.v14_0.remove_db_aggregation
frappe.patches.v14_0.update_color_names_in_kanban_board_column
frappe.patches.v14_0.update_is_system_generated_flag
frappe.patches.v14_0.update_auto_account_deletion_duration
frappe.patches.v14_0.update_integration_request
frappe.patches.v14_0.set_document_expiry_default
frappe.patches.v14_0.delete_data_migration_tool

+ 0
- 7
frappe/patches/v11_0/sync_user_permission_doctype_before_migrate.py Parādīt failu

@@ -1,7 +0,0 @@
import frappe


def execute():
frappe.flags.in_patch = True
frappe.reload_doc("core", "doctype", "user_permission")
frappe.db.commit()

+ 0
- 9
frappe/patches/v12_0/delete_gsuite_if_exists.py Parādīt failu

@@ -1,9 +0,0 @@
import frappe


def execute():
"""
Remove GSuite Template and GSuite Settings
"""
frappe.delete_doc_if_exists("DocType", "GSuite Settings")
frappe.delete_doc_if_exists("DocType", "GSuite Templates")

+ 0
- 11
frappe/patches/v12_0/init_desk_settings.py Parādīt failu

@@ -1,11 +0,0 @@
import json

import frappe
from frappe.config import get_modules_from_all_apps_for_user
from frappe.desk.moduleview import get_onboard_items


def execute():
"""Reset the initial customizations for desk, with modules, indices and links."""
frappe.reload_doc("core", "doctype", "user")
frappe.db.sql("""update tabUser set home_settings = ''""")

+ 0
- 11
frappe/patches/v12_0/remove_gcalendar_gmaps.py Parādīt failu

@@ -1,11 +0,0 @@
import frappe


def execute():
"""
Remove GCalendar and GCalendar Settings
Remove Google Maps Settings as its been merged with Delivery Trips
"""
frappe.delete_doc_if_exists("DocType", "GCalendar Account")
frappe.delete_doc_if_exists("DocType", "GCalendar Settings")
frappe.delete_doc_if_exists("DocType", "Google Maps Settings")

+ 0
- 12
frappe/patches/v12_0/webpage_migrate_description_to_meta_tag.py Parādīt failu

@@ -1,12 +0,0 @@
import frappe


def execute():
web_pages = frappe.get_all("Web Page", ["name", "description"])

for web_page in web_pages:
if web_page.description and web_page.route:
doc = frappe.new_doc("Website Route Meta")
doc.name = web_page.route
doc.append("meta_tags", {"key": "description", "value": web_page.description})
doc.save()

+ 0
- 12
frappe/patches/v12_0/website_meta_tag_parent.py Parādīt failu

@@ -1,12 +0,0 @@
import frappe


def execute():
# convert all /path to path
frappe.db.sql(
"""
UPDATE `tabWebsite Meta Tag`
SET parent = SUBSTR(parent, 2)
WHERE parent like '/%'
"""
)

+ 0
- 75
frappe/patches/v13_0/cleanup_desk_cards.py Parādīt failu

@@ -1,75 +0,0 @@
from json import loads

import frappe
from frappe.desk.doctype.workspace.workspace import get_link_type, get_report_type


def execute():
frappe.reload_doc("desk", "doctype", "workspace")

pages = frappe.db.sql("Select `name` from `tabDesk Page`")
# pages = frappe.get_all("Workspace", filters={"is_standard": 0}, pluck="name")

for page in pages:
rebuild_links(page[0])

frappe.delete_doc("DocType", "Desk Card")


def rebuild_links(page):
# Empty links table

try:
doc = frappe.get_doc("Workspace", page)
except frappe.DoesNotExistError:
db_doc = get_doc_from_db(page)

doc = frappe.get_doc(db_doc)
doc.insert(ignore_permissions=True)

doc.links = []

for card in get_all_cards(page):
if isinstance(card.links, str):
links = loads(card.links)
else:
links = card.links

doc.append(
"links",
{"label": card.label, "type": "Card Break", "icon": card.icon, "hidden": card.hidden or False},
)

for link in links:
if not frappe.db.exists(get_link_type(link.get("type")), link.get("name")):
continue

doc.append(
"links",
{
"label": link.get("label") or link.get("name"),
"type": "Link",
"link_type": get_link_type(link.get("type")),
"link_to": link.get("name"),
"onboard": link.get("onboard"),
"dependencies": ", ".join(link.get("dependencies", [])),
"is_query_report": get_report_type(link.get("name"))
if link.get("type").lower() == "report"
else 0,
},
)

try:
doc.save(ignore_permissions=True)
except frappe.LinkValidationError:
print(doc.as_dict())


def get_doc_from_db(page):
result = frappe.db.sql("SELECT * FROM `tabDesk Page` WHERE name=%s", [page], as_dict=True)
if result:
return result[0].update({"doctype": "Workspace"})


def get_all_cards(page):
return frappe.db.get_all("Desk Card", filters={"parent": page}, fields=["*"], order_by="idx")

+ 40
- 0
frappe/tests/test_patches.py Parādīt failu

@@ -1,8 +1,10 @@
import unittest
from pathlib import Path
from unittest.mock import mock_open, patch

import frappe
from frappe.modules import patch_handler
from frappe.utils import get_bench_path

EMTPY_FILE = ""
EMTPY_SECTION = """
@@ -135,3 +137,41 @@ class TestPatchReader(unittest.TestCase):
def test_ignore_comments(self, _file):
all, pre, post = self.get_patches()
self.assertEqual(pre, ["app.module.patch1", "app.module.patch3"])

def test_verify_patch_txt(self):
"""Make sure all patches/**.py files are part of patches.txt"""
check_patch_files("frappe")


# Do not remove/rename this function, other apps depend on it to test their patches
def check_patch_files(app):
"""Make sure all patches/**.py files are part of patches.txt"""

patch_dir = Path(frappe.get_app_path(app)) / "patches"

app_patches = [p.split()[0] for p in patch_handler.get_patches_from_app(app)]

missing_patches = []

for file in patch_dir.glob("**/*.py"):
module = _get_dotted_path(file, app)
try:
patch_module = frappe.get_module(module)
if hasattr(patch_module, "execute"):
if module not in app_patches:
missing_patches.append(module)
except Exception:
# patch so bad it doesn't even import :shrug:
missing_patches.append(module)

if missing_patches:
raise Exception(f"Patches missing in patch.txt: \n" + "\n".join(missing_patches))


def _get_dotted_path(file: Path, app) -> str:
app_path = Path(get_bench_path()) / "apps" / app

*path, filename = file.relative_to(app_path).parts
base_filename = Path(filename).stem

return ".".join(path + [base_filename])

Notiek ielāde…
Atcelt
Saglabāt