Browse Source

fix!: Remove frappe.utils.reset_doc

Removed because it's a long forgotten, unused module that seems to be straight up
broken
version-14
Gavin D'souza 3 years ago
parent
commit
9819cdeea8
1 changed files with 0 additions and 151 deletions
  1. +0
    -151
      frappe/utils/reset_doc.py

+ 0
- 151
frappe/utils/reset_doc.py View File

@@ -1,151 +0,0 @@

import frappe
import json, os
from frappe.modules import scrub, get_module_path, utils
from frappe.custom.doctype.customize_form.customize_form import doctype_properties, docfield_properties
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
from frappe.custom.doctype.custom_field.custom_field import create_custom_field
from frappe.core.page.permission_manager.permission_manager import get_standard_permissions
from frappe.permissions import setup_custom_perms
from urllib.request import urlopen

branch = 'develop'

def reset_all():
for doctype in frappe.db.get_all('DocType', dict(custom=0)):
print(doctype.name)
reset_doc(doctype.name)

def reset_doc(doctype):
'''
doctype = name of the DocType that you want to reset
'''
# fetch module name
module = frappe.db.get_value('DocType', doctype, 'module')
app = utils.get_module_app(module)

# get path for doctype's json and its equivalent git url
doc_path = os.path.join(get_module_path(module), 'doctype', scrub(doctype), scrub(doctype)+'.json')
try:
git_link = '/'.join(['https://raw.githubusercontent.com/frappe',\
app, branch, doc_path.split('apps/'+app)[1]])
original_file = urlopen(git_link).read()
except:
print('Did not find {0} in {1}'.format(doctype, app))
return

# load local and original json objects
local_doc = json.loads(open(doc_path, 'r').read())
original_doc = json.loads(original_file)

remove_duplicate_fields(doctype)
set_property_setter(doctype, local_doc, original_doc)
make_custom_fields(doctype, local_doc, original_doc)

with open(doc_path, 'w+') as f:
f.write(original_file)
f.close()

setup_perms_for(doctype)

frappe.db.commit()

def remove_duplicate_fields(doctype):
for field in frappe.db.sql('''select fieldname, count(1) as cnt from tabDocField where parent=%s group by fieldname having cnt > 1''', doctype):
frappe.db.sql('delete from tabDocField where fieldname=%s and parent=%s limit 1', (field[0], doctype))
print('removed duplicate {0} in {1}'.format(field[0], doctype))

def set_property_setter(doctype, local_doc, original_doc):
''' compare doctype_properties and docfield_properties and create property_setter '''

# doctype_properties reset
for dp in doctype_properties:
# make property_setter to mimic changes made in local json
if dp in local_doc and dp not in original_doc:
make_property_setter(doctype, '', dp, local_doc[dp], doctype_properties[dp], for_doctype=True)

local_fields = get_fields_dict(local_doc)
original_fields = get_fields_dict(original_doc)

# iterate through field and properties of each of those field
for docfield in original_fields:
for prop in original_fields[docfield]:
# skip fields that are not in local_fields
if docfield not in local_fields: continue

if prop in docfield_properties and prop in local_fields[docfield]\
and original_fields[docfield][prop] != local_fields[docfield][prop]:
# make property_setter equivalent of local changes
make_property_setter(doctype, docfield, prop, local_fields[docfield][prop],\
docfield_properties[prop])

def make_custom_fields(doctype, local_doc, original_doc):
'''
check fields and create a custom field equivalent for non standard fields
'''
local_fields, original_fields = get_fields_dict(local_doc), get_fields_dict(original_doc)
local_fields = sorted(local_fields.items(), key=lambda x: x[1]['idx'])
doctype_doc = frappe.get_doc('DocType', doctype)

custom_docfield_properties, prev = get_custom_docfield_properties(), ""
for field, field_dict in local_fields:
df = {}
if field not in original_fields:
for prop in field_dict:
if prop in custom_docfield_properties:
df[prop] = field_dict[prop]

df['insert_after'] = prev if prev else ''

doctype_doc.fields = [d for d in doctype_doc.fields if d.fieldname != df['fieldname']]
doctype_doc.update_children()

create_custom_field(doctype, df)

# set current field as prev field for next field
prev = field

def get_fields_dict(doc):
fields, idx = {}, 0
for field in doc['fields']:
field['idx'] = idx
fields[field.get('fieldname')] = field
idx += 1

return fields

def get_custom_docfield_properties():
fields_meta = frappe.get_meta('Custom Field').fields
fields = {}
for d in fields_meta:
fields[d.fieldname] = d.fieldtype

return fields


def setup_perms_for(doctype):
perms = frappe.get_all('DocPerm', fields='*', filters=dict(parent=doctype), order_by='idx asc')
# get default perms
try:
standard_perms = get_standard_permissions(doctype)
except (IOError, KeyError):
# no json file, doctype no longer exists!
return

same = True
if len(standard_perms) != len(perms):
same = False

else:
for i, p in enumerate(perms):
standard = standard_perms[i]
for fieldname in frappe.get_meta('DocPerm').get_fieldnames_with_value():
if p.get(fieldname) != standard.get(fieldname):
same = False
break

if not same:
break

if not same:
setup_custom_perms(doctype)

Loading…
Cancel
Save