Browse Source

rewrite use of dict.iteritems (#3498)

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility

* dict.iteritems to six.iteritems(dict) for python3 compatibility
version-14
tundebabzy 8 years ago
committed by Rushabh Mehta
parent
commit
bbde2ec4cf
31 changed files with 94 additions and 41 deletions
  1. +2
    -1
      frappe/__init__.py
  2. +2
    -1
      frappe/app.py
  3. +4
    -1
      frappe/boot.py
  4. +5
    -3
      frappe/build.py
  5. +3
    -1
      frappe/client.py
  6. +3
    -1
      frappe/contacts/doctype/address/address.py
  7. +3
    -1
      frappe/contacts/doctype/contact/contact.py
  8. +3
    -1
      frappe/core/doctype/report/report.py
  9. +3
    -1
      frappe/database.py
  10. +3
    -1
      frappe/desk/doctype/desktop_icon/desktop_icon.py
  11. +2
    -1
      frappe/desk/doctype/kanban_board/kanban_board.py
  12. +3
    -1
      frappe/desk/form/meta.py
  13. +3
    -1
      frappe/email/email_body.py
  14. +3
    -1
      frappe/email/receive.py
  15. +2
    -1
      frappe/frappeclient.py
  16. +4
    -4
      frappe/model/base_document.py
  17. +4
    -1
      frappe/model/db_query.py
  18. +3
    -2
      frappe/model/document.py
  19. +2
    -1
      frappe/model/utils/link_count.py
  20. +3
    -1
      frappe/model/utils/user_settings.py
  21. +4
    -2
      frappe/patches/v4_1/file_manager_fix.py
  22. +3
    -1
      frappe/patches/v8_0/rename_listsettings_to_usersettings.py
  23. +3
    -1
      frappe/translate.py
  24. +2
    -1
      frappe/utils/data.py
  25. +2
    -1
      frappe/utils/doctor.py
  26. +3
    -1
      frappe/utils/redis_wrapper.py
  27. +4
    -2
      frappe/utils/setup_docs.py
  28. +4
    -2
      frappe/website/doctype/web_form/web_form.py
  29. +3
    -1
      frappe/website/render.py
  30. +3
    -1
      frappe/website/utils.py
  31. +3
    -2
      frappe/www/sitemap.py

+ 2
- 1
frappe/__init__.py View File

@@ -6,6 +6,7 @@ globals attached to frappe module
""" """
from __future__ import unicode_literals, print_function from __future__ import unicode_literals, print_function


from six import iteritems
from werkzeug.local import Local, release_local from werkzeug.local import Local, release_local
import os, sys, importlib, inspect, json import os, sys, importlib, inspect, json


@@ -757,7 +758,7 @@ def get_doc_hooks():
if not hasattr(local, 'doc_events_hooks'): if not hasattr(local, 'doc_events_hooks'):
hooks = get_hooks('doc_events', {}) hooks = get_hooks('doc_events', {})
out = {} out = {}
for key, value in hooks.iteritems():
for key, value in iteritems(hooks):
if isinstance(key, tuple): if isinstance(key, tuple):
for doctype in key: for doctype in key:
append_hook(out, doctype, value) append_hook(out, doctype, value)


+ 2
- 1
frappe/app.py View File

@@ -5,6 +5,7 @@ from __future__ import unicode_literals


import os import os
import MySQLdb import MySQLdb
from six import iteritems


from werkzeug.wrappers import Request from werkzeug.wrappers import Request
from werkzeug.local import LocalManager from werkzeug.local import LocalManager
@@ -115,7 +116,7 @@ def init_request(request):


def make_form_dict(request): def make_form_dict(request):
frappe.local.form_dict = frappe._dict({ k:v[0] if isinstance(v, (list, tuple)) else v \ frappe.local.form_dict = frappe._dict({ k:v[0] if isinstance(v, (list, tuple)) else v \
for k, v in (request.form or request.args).iteritems() })
for k, v in iteritems(request.form or request.args) })


if "_" in frappe.local.form_dict: if "_" in frappe.local.form_dict:
# _ is passed by $.ajax so that the request is not cached by the browser. So, remove _ from form_dict # _ is passed by $.ajax so that the request is not cached by the browser. So, remove _ from form_dict


+ 4
- 1
frappe/boot.py View File

@@ -2,6 +2,9 @@
# MIT License. See license.txt # MIT License. See license.txt


from __future__ import unicode_literals from __future__ import unicode_literals

from six import iteritems

""" """
bootstrap client session bootstrap client session
""" """
@@ -179,7 +182,7 @@ def load_translations(bootinfo):
messages[name] = frappe._(name) messages[name] = frappe._(name)


# only untranslated # only untranslated
messages = {k:v for k, v in messages.iteritems() if k!=v}
messages = {k:v for k, v in iteritems(messages) if k!=v}


bootinfo["__messages"] = messages bootinfo["__messages"] = messages




+ 5
- 3
frappe/build.py View File

@@ -5,6 +5,8 @@ from __future__ import unicode_literals, print_function
from frappe.utils.minify import JavascriptMinify from frappe.utils.minify import JavascriptMinify
import subprocess import subprocess


from six import iteritems

""" """
Build the `public` folders and setup languages Build the `public` folders and setup languages
""" """
@@ -87,7 +89,7 @@ def make_asset_dirs(make_copy=False):
def build(no_compress=False, verbose=False): def build(no_compress=False, verbose=False):
assets_path = os.path.join(frappe.local.sites_path, "assets") assets_path = os.path.join(frappe.local.sites_path, "assets")


for target, sources in get_build_maps().iteritems():
for target, sources in iteritems(get_build_maps()):
pack(os.path.join(assets_path, target), sources, no_compress, verbose) pack(os.path.join(assets_path, target), sources, no_compress, verbose)


def get_build_maps(): def get_build_maps():
@@ -100,7 +102,7 @@ def get_build_maps():
if os.path.exists(path): if os.path.exists(path):
with open(path) as f: with open(path) as f:
try: try:
for target, sources in json.loads(f.read()).iteritems():
for target, sources in iteritems(json.loads(f.read())):
# update app path # update app path
source_paths = [] source_paths = []
for source in sources: for source in sources:
@@ -182,7 +184,7 @@ def scrub_html_template(content):
return content.replace("'", "\'") return content.replace("'", "\'")


def files_dirty(): def files_dirty():
for target, sources in get_build_maps().iteritems():
for target, sources in iteritems(get_build_maps()):
for f in sources: for f in sources:
if ':' in f: f, suffix = f.split(':') if ':' in f: f, suffix = f.split(':')
if not os.path.exists(f) or os.path.isdir(f): continue if not os.path.exists(f) or os.path.isdir(f): continue


+ 3
- 1
frappe/client.py View File

@@ -8,6 +8,8 @@ import frappe.model
import frappe.utils import frappe.utils
import json, os import json, os


from six import iteritems

''' '''
Handle RESTful requests that are mapped to the `/api/resource` route. Handle RESTful requests that are mapped to the `/api/resource` route.


@@ -228,7 +230,7 @@ def bulk_update(docs):
failed_docs = [] failed_docs = []
for doc in docs: for doc in docs:
try: try:
ddoc = {key: val for key, val in doc.iteritems() if key not in ['doctype', 'docname']}
ddoc = {key: val for key, val in iteritems(doc) if key not in ['doctype', 'docname']}
doctype = doc['doctype'] doctype = doc['doctype']
docname = doc['docname'] docname = doc['docname']
doc = frappe.get_doc(doctype, docname) doc = frappe.get_doc(doctype, docname)


+ 3
- 1
frappe/contacts/doctype/address/address.py View File

@@ -13,6 +13,8 @@ from jinja2 import TemplateSyntaxError
from frappe.utils.user import is_website_user from frappe.utils.user import is_website_user
from frappe.model.naming import make_autoname from frappe.model.naming import make_autoname
from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links
from six import iteritems



class Address(Document): class Address(Document):
def __setup__(self): def __setup__(self):
@@ -191,7 +193,7 @@ def address_query(doctype, txt, searchfield, start, page_len, filters):
link_name = filters.pop('link_name') link_name = filters.pop('link_name')


condition = "" condition = ""
for fieldname, value in filters.iteritems():
for fieldname, value in iteritems(filters):
condition += " and {field}={value}".format( condition += " and {field}={value}".format(
field=fieldname, field=fieldname,
value=value value=value


+ 3
- 1
frappe/contacts/doctype/contact/contact.py View File

@@ -7,6 +7,8 @@ from frappe.utils import cstr, has_gravatar
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links
from six import iteritems



class Contact(Document): class Contact(Document):
def autoname(self): def autoname(self):
@@ -118,7 +120,7 @@ def contact_query(doctype, txt, searchfield, start, page_len, filters):
link_name = filters.pop('link_name') link_name = filters.pop('link_name')


condition = "" condition = ""
for fieldname, value in filters.iteritems():
for fieldname, value in iteritems(filters):
condition += " and {field}={value}".format( condition += " and {field}={value}".format(
field=fieldname, field=fieldname,
value=value value=value


+ 3
- 1
frappe/core/doctype/report/report.py View File

@@ -12,6 +12,8 @@ from frappe.modules.export_file import export_to_files
from frappe.modules import make_boilerplate from frappe.modules import make_boilerplate
from frappe.core.doctype.page.page import delete_custom_role from frappe.core.doctype.page.page import delete_custom_role
from frappe.core.doctype.custom_role.custom_role import get_custom_allowed_roles from frappe.core.doctype.custom_role.custom_role import get_custom_allowed_roles
from six import iteritems



class Report(Document): class Report(Document):
def validate(self): def validate(self):
@@ -123,7 +125,7 @@ class Report(Document):
_filters = params.get('filters') or [] _filters = params.get('filters') or []


if filters: if filters:
for key, value in filters.iteritems():
for key, value in iteritems(filters):
condition, _value = '=', value condition, _value = '=', value
if isinstance(value, (list, tuple)): if isinstance(value, (list, tuple)):
condition, _value = value condition, _value = value


+ 3
- 1
frappe/database.py View File

@@ -20,6 +20,8 @@ from frappe.utils import now, get_datetime, cstr
from frappe import _ from frappe import _
from types import StringType, UnicodeType from types import StringType, UnicodeType
from frappe.utils.global_search import sync_global_search from frappe.utils.global_search import sync_global_search
from six import iteritems



class Database: class Database:
""" """
@@ -655,7 +657,7 @@ class Database:
where field in ({0}) and where field in ({0}) and
doctype=%s'''.format(', '.join(['%s']*len(keys))), doctype=%s'''.format(', '.join(['%s']*len(keys))),
keys + [dt], debug=debug) keys + [dt], debug=debug)
for key, value in to_update.iteritems():
for key, value in iteritems(to_update):
self.sql('''insert into tabSingles(doctype, field, value) values (%s, %s, %s)''', self.sql('''insert into tabSingles(doctype, field, value) values (%s, %s, %s)''',
(dt, key, value), debug=debug) (dt, key, value), debug=debug)




+ 3
- 1
frappe/desk/doctype/desktop_icon/desktop_icon.py View File

@@ -9,6 +9,8 @@ from frappe import _
import json import json
import random import random
from frappe.model.document import Document from frappe.model.document import Document
from six import iteritems



class DesktopIcon(Document): class DesktopIcon(Document):
def validate(self): def validate(self):
@@ -323,7 +325,7 @@ def sync_from_app(app):


if isinstance(modules, dict): if isinstance(modules, dict):
modules_list = [] modules_list = []
for m, desktop_icon in modules.iteritems():
for m, desktop_icon in iteritems(modules):
desktop_icon['module_name'] = m desktop_icon['module_name'] = m
modules_list.append(desktop_icon) modules_list.append(desktop_icon)
else: else:


+ 2
- 1
frappe/desk/doctype/kanban_board/kanban_board.py View File

@@ -7,6 +7,7 @@ import frappe
import json import json
from frappe import _ from frappe import _
from frappe.model.document import Document from frappe.model.document import Document
from six import iteritems




class KanbanBoard(Document): class KanbanBoard(Document):
@@ -91,7 +92,7 @@ def update_order(board_name, order):
order_dict = json.loads(order) order_dict = json.loads(order)


updated_cards = [] updated_cards = []
for col_name, cards in order_dict.iteritems():
for col_name, cards in iteritems(order_dict):
order_list = [] order_list = []
for card in cards: for card in cards:
column = frappe.get_value( column = frappe.get_value(


+ 3
- 1
frappe/desk/form/meta.py View File

@@ -14,6 +14,8 @@ from frappe.model.utils import render_include
from frappe.build import scrub_html_template from frappe.build import scrub_html_template


###### ######
from six import iteritems



def get_meta(doctype, cached=True): def get_meta(doctype, cached=True):
if cached and not frappe.conf.developer_mode: if cached and not frappe.conf.developer_mode:
@@ -153,7 +155,7 @@ class FormMeta(Meta):
app = module.__name__.split(".")[0] app = module.__name__.split(".")[0]
templates = {} templates = {}
if hasattr(module, "form_grid_templates"): if hasattr(module, "form_grid_templates"):
for key, path in module.form_grid_templates.iteritems():
for key, path in iteritems(module.form_grid_templates):
templates[key] = get_html_format(frappe.get_app_path(app, path)) templates[key] = get_html_format(frappe.get_app_path(app, path))


self.set("__form_grid_templates", templates) self.set("__form_grid_templates", templates)


+ 3
- 1
frappe/email/email_body.py View File

@@ -9,6 +9,8 @@ from frappe.utils import (get_url, scrub_urls, strip, expand_relative_urls, cint
split_emails, to_markdown, markdown, encode, random_string) split_emails, to_markdown, markdown, encode, random_string)
import email.utils import email.utils
from frappe.utils import parse_addr from frappe.utils import parse_addr
from six import iteritems



def get_email(recipients, sender='', msg='', subject='[No Subject]', def get_email(recipients, sender='', msg='', subject='[No Subject]',
text_content = None, footer=None, print_html=None, formatted=None, attachments=None, text_content = None, footer=None, print_html=None, formatted=None, attachments=None,
@@ -209,7 +211,7 @@ class EMail:
} }


# reset headers as values may be changed. # reset headers as values may be changed.
for key, val in headers.iteritems():
for key, val in iteritems(headers):
self.set_header(key, val) self.set_header(key, val)


# call hook to enable apps to modify msg_root before sending # call hook to enable apps to modify msg_root before sending


+ 3
- 1
frappe/email/receive.py View File

@@ -2,6 +2,8 @@
# MIT License. See license.txt # MIT License. See license.txt


from __future__ import unicode_literals from __future__ import unicode_literals

from six import iteritems
from six.moves import range from six.moves import range
import time, _socket, poplib, imaplib, email, email.utils, datetime, chardet, re, hashlib import time, _socket, poplib, imaplib, email, email.utils, datetime, chardet, re, hashlib
from email_reply_parser import EmailReplyParser from email_reply_parser import EmailReplyParser
@@ -343,7 +345,7 @@ class EmailServer:
return return


self.imap.select("Inbox") self.imap.select("Inbox")
for uid, operation in uid_list.iteritems():
for uid, operation in iteritems(uid_list):
if not uid: continue if not uid: continue


op = "+FLAGS" if operation == "Read" else "-FLAGS" op = "+FLAGS" if operation == "Read" else "-FLAGS"


+ 2
- 1
frappe/frappeclient.py View File

@@ -2,6 +2,7 @@ from __future__ import print_function
import requests import requests
import json import json
import frappe import frappe
from six import iteritems


''' '''
FrappeClient is a library that helps you connect with other frappe systems FrappeClient is a library that helps you connect with other frappe systems
@@ -270,7 +271,7 @@ class FrappeClient(object):


def preprocess(self, params): def preprocess(self, params):
"""convert dicts, lists to json""" """convert dicts, lists to json"""
for key, value in params.iteritems():
for key, value in iteritems(params):
if isinstance(value, (dict, list)): if isinstance(value, (dict, list)):
params[key] = json.dumps(value) params[key] = json.dumps(value)




+ 4
- 4
frappe/model/base_document.py View File

@@ -2,7 +2,7 @@
# MIT License. See license.txt # MIT License. See license.txt


from __future__ import unicode_literals from __future__ import unicode_literals
from six import reraise as raise_
from six import reraise as raise_, iteritems
import frappe, sys import frappe, sys
from frappe import _ from frappe import _
from frappe.utils import (cint, flt, now, cstr, strip_html, getdate, get_datetime, to_timedelta, from frappe.utils import (cint, flt, now, cstr, strip_html, getdate, get_datetime, to_timedelta,
@@ -72,7 +72,7 @@ class BaseDocument(object):
if key in d: if key in d:
self.set(key, d.get(key)) self.set(key, d.get(key))


for key, value in d.iteritems():
for key, value in iteritems(d):
self.set(key, value) self.set(key, value)


return self return self
@@ -83,7 +83,7 @@ class BaseDocument(object):


if "doctype" in d: if "doctype" in d:
self.set("doctype", d.get("doctype")) self.set("doctype", d.get("doctype"))
for key, value in d.iteritems():
for key, value in iteritems(d):
# dont_update_if_missing is a list of fieldnames, for which, you don't want to set default value # dont_update_if_missing is a list of fieldnames, for which, you don't want to set default value
if (self.get(key) is None) and (value is not None) and (key not in self.dont_update_if_missing): if (self.get(key) is None) and (value is not None) and (key not in self.dont_update_if_missing):
self.set(key, value) self.set(key, value)
@@ -565,7 +565,7 @@ class BaseDocument(object):
if frappe.flags.in_install: if frappe.flags.in_install:
return return


for fieldname, value in self.get_valid_dict().iteritems():
for fieldname, value in iteritems(self.get_valid_dict()):
df = self.meta.get_field(fieldname) df = self.meta.get_field(fieldname)
if df and df.fieldtype in type_map and type_map[df.fieldtype][0]=="varchar": if df and df.fieldtype in type_map and type_map[df.fieldtype][0]=="varchar":
max_length = cint(df.get("length")) or cint(varchar_len) max_length = cint(df.get("length")) or cint(varchar_len)


+ 4
- 1
frappe/model/db_query.py View File

@@ -2,6 +2,9 @@
# MIT License. See license.txt # MIT License. See license.txt


from __future__ import unicode_literals from __future__ import unicode_literals

from six import iteritems

"""build query for doclistview and return results""" """build query for doclistview and return results"""


import frappe, json, copy import frappe, json, copy
@@ -171,7 +174,7 @@ class DatabaseQuery(object):
if isinstance(filters, dict): if isinstance(filters, dict):
fdict = filters fdict = filters
filters = [] filters = []
for key, value in fdict.iteritems():
for key, value in iteritems(fdict):
filters.append(make_filter_tuple(self.doctype, key, value)) filters.append(make_filter_tuple(self.doctype, key, value))
setattr(self, filter_name, filters) setattr(self, filter_name, filters)




+ 3
- 2
frappe/model/document.py View File

@@ -10,6 +10,7 @@ from frappe.utils import flt, cstr, now, get_datetime_str, file_lock
from frappe.utils.background_jobs import enqueue from frappe.utils.background_jobs import enqueue
from frappe.model.base_document import BaseDocument, get_controller from frappe.model.base_document import BaseDocument, get_controller
from frappe.model.naming import set_new_name from frappe.model.naming import set_new_name
from six import iteritems
from werkzeug.exceptions import NotFound, Forbidden from werkzeug.exceptions import NotFound, Forbidden
import hashlib, json import hashlib, json
from frappe.model import optional_fields from frappe.model import optional_fields
@@ -344,7 +345,7 @@ class Document(BaseDocument):
def get_values(): def get_values():
values = self.as_dict() values = self.as_dict()
# format values # format values
for key, value in values.iteritems():
for key, value in iteritems(values):
if value==None: if value==None:
values[key] = "" values[key] = ""
return values return values
@@ -361,7 +362,7 @@ class Document(BaseDocument):
def update_single(self, d): def update_single(self, d):
"""Updates values for Single type Document in `tabSingles`.""" """Updates values for Single type Document in `tabSingles`."""
frappe.db.sql("""delete from tabSingles where doctype=%s""", self.doctype) frappe.db.sql("""delete from tabSingles where doctype=%s""", self.doctype)
for field, value in d.iteritems():
for field, value in iteritems(d):
if field != "doctype": if field != "doctype":
frappe.db.sql("""insert into tabSingles(doctype, field, value) frappe.db.sql("""insert into tabSingles(doctype, field, value)
values (%s, %s, %s)""", (self.doctype, field, value)) values (%s, %s, %s)""", (self.doctype, field, value))


+ 2
- 1
frappe/model/utils/link_count.py View File

@@ -4,6 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals


import frappe import frappe
from six import iteritems


ignore_doctypes = ("DocType", "Print Format", "Role", "Module Def", "Communication", ignore_doctypes = ("DocType", "Print Format", "Role", "Module Def", "Communication",
"ToDo") "ToDo")
@@ -26,7 +27,7 @@ def update_link_count():
link_count = frappe.cache().get_value('_link_count') link_count = frappe.cache().get_value('_link_count')


if link_count: if link_count:
for key, count in link_count.iteritems():
for key, count in iteritems(link_count):
if key[0] not in ignore_doctypes: if key[0] not in ignore_doctypes:
try: try:
frappe.db.sql('update `tab{0}` set idx = idx + {1} where name=%s'.format(key[0], count), frappe.db.sql('update `tab{0}` set idx = idx + {1} where name=%s'.format(key[0], count),


+ 3
- 1
frappe/model/utils/user_settings.py View File

@@ -2,6 +2,8 @@
# such as page_limit, filters, last_view # such as page_limit, filters, last_view


import frappe, json import frappe, json
from six import iteritems



def get_user_settings(doctype, for_update=False): def get_user_settings(doctype, for_update=False):
user_settings = frappe.cache().hget('_user_settings', user_settings = frappe.cache().hget('_user_settings',
@@ -36,7 +38,7 @@ def update_user_settings(doctype, user_settings, for_update=False):


def sync_user_settings(): def sync_user_settings():
'''Sync from cache to database (called asynchronously via the browser)''' '''Sync from cache to database (called asynchronously via the browser)'''
for key, data in frappe.cache().hgetall('_user_settings').iteritems():
for key, data in iteritems(frappe.cache().hgetall('_user_settings')):
doctype, user = key.split('::') doctype, user = key.split('::')
frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s) frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s)
on duplicate key update data=%s''', (user, doctype, data, data)) on duplicate key update data=%s''', (user, doctype, data, data))


+ 4
- 2
frappe/patches/v4_1/file_manager_fix.py View File

@@ -19,6 +19,8 @@ from frappe.utils import get_files_path, get_site_path
# a backup from a time before version 3 migration # a backup from a time before version 3 migration
# #
# * Patch remaining unpatched File records. # * Patch remaining unpatched File records.
from six import iteritems



def execute(): def execute():
frappe.db.auto_commit_on_many_writes = True frappe.db.auto_commit_on_many_writes = True
@@ -49,7 +51,7 @@ def get_replaced_files():
old_files = dict(frappe.db.sql("select name, file_name from `tabFile` where ifnull(content_hash, '')=''")) old_files = dict(frappe.db.sql("select name, file_name from `tabFile` where ifnull(content_hash, '')=''"))
invfiles = invert_dict(new_files) invfiles = invert_dict(new_files)


for nname, nfilename in new_files.iteritems():
for nname, nfilename in iteritems(new_files):
if 'files/' + nfilename in old_files.values(): if 'files/' + nfilename in old_files.values():
ret.append((nfilename, invfiles[nfilename])) ret.append((nfilename, invfiles[nfilename]))
return ret return ret
@@ -82,7 +84,7 @@ def rename_replacing_files():


def invert_dict(ddict): def invert_dict(ddict):
ret = {} ret = {}
for k,v in ddict.iteritems():
for k,v in iteritems(ddict):
if not ret.get(v): if not ret.get(v):
ret[v] = [k] ret[v] = [k]
else: else:


+ 3
- 1
frappe/patches/v8_0/rename_listsettings_to_usersettings.py View File

@@ -1,6 +1,8 @@
from frappe.installer import create_user_settings_table from frappe.installer import create_user_settings_table
from frappe.model.utils.user_settings import update_user_settings from frappe.model.utils.user_settings import update_user_settings
import frappe, json import frappe, json
from six import iteritems



def execute(): def execute():
if frappe.db.table_exists("__ListSettings"): if frappe.db.table_exists("__ListSettings"):
@@ -32,7 +34,7 @@ def execute():


for user in frappe.db.get_all('User', {'user_type': 'System User'}): for user in frappe.db.get_all('User', {'user_type': 'System User'}):
defaults = frappe.defaults.get_defaults_for(user.name) defaults = frappe.defaults.get_defaults_for(user.name)
for key, value in defaults.iteritems():
for key, value in iteritems(defaults):
if key.startswith('_list_settings:'): if key.startswith('_list_settings:'):
doctype = key.replace('_list_settings:', '') doctype = key.replace('_list_settings:', '')
columns = ['`tab{1}`.`{0}`'.format(*c) for c in json.loads(value)] columns = ['`tab{1}`.`{0}`'.format(*c) for c in json.loads(value)]


+ 3
- 1
frappe/translate.py View File

@@ -3,6 +3,8 @@


from __future__ import unicode_literals, print_function from __future__ import unicode_literals, print_function


from six import iteritems

""" """
frappe.translate frappe.translate
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
@@ -120,7 +122,7 @@ def get_dict(fortype, name=None):
message_dict.update(get_dict_from_hooks(fortype, name)) message_dict.update(get_dict_from_hooks(fortype, name))


# remove untranslated # remove untranslated
message_dict = {k:v for k, v in message_dict.iteritems() if k!=v}
message_dict = {k:v for k, v in iteritems(message_dict) if k!=v}


translation_assets[asset_key] = message_dict translation_assets[asset_key] = message_dict




+ 2
- 1
frappe/utils/data.py View File

@@ -13,6 +13,7 @@ from dateutil import parser
from num2words import num2words from num2words import num2words
import HTMLParser import HTMLParser
from html2text import html2text from html2text import html2text
from six import iteritems


DATE_FORMAT = "%Y-%m-%d" DATE_FORMAT = "%Y-%m-%d"
TIME_FORMAT = "%H:%M:%S.%f" TIME_FORMAT = "%H:%M:%S.%f"
@@ -686,7 +687,7 @@ operator_map = {
def evaluate_filters(doc, filters): def evaluate_filters(doc, filters):
'''Returns true if doc matches filters''' '''Returns true if doc matches filters'''
if isinstance(filters, dict): if isinstance(filters, dict):
for key, value in filters.iteritems():
for key, value in iteritems(filters):
f = get_filter(None, {key:value}) f = get_filter(None, {key:value})
if not compare(doc.get(f.fieldname), f.operator, f.value): if not compare(doc.get(f.fieldname), f.operator, f.value):
return False return False


+ 2
- 1
frappe/utils/doctor.py View File

@@ -4,6 +4,7 @@ from collections import defaultdict
from rq import Worker, Connection from rq import Worker, Connection
from frappe.utils.background_jobs import get_redis_conn, get_queue, get_queue_list from frappe.utils.background_jobs import get_redis_conn, get_queue, get_queue_list
from frappe.utils.scheduler import is_scheduler_disabled from frappe.utils.scheduler import is_scheduler_disabled
from six import iteritems




def get_workers(): def get_workers():
@@ -118,7 +119,7 @@ def doctor(site=None):
print("Queue:", queue) print("Queue:", queue)
print("Number of Jobs: ", job_count[queue]) print("Number of Jobs: ", job_count[queue])
print("Methods:") print("Methods:")
for method, count in jobs_per_queue[queue].iteritems():
for method, count in iteritems(jobs_per_queue[queue]):
print("{0} : {1}".format(method, count)) print("{0} : {1}".format(method, count))
print("------------") print("------------")




+ 3
- 1
frappe/utils/redis_wrapper.py View File

@@ -5,6 +5,8 @@ from __future__ import unicode_literals
import redis, frappe, re import redis, frappe, re
import cPickle as pickle import cPickle as pickle
from frappe.utils import cstr from frappe.utils import cstr
from six import iteritems



class RedisWrapper(redis.Redis): class RedisWrapper(redis.Redis):
"""Redis client that will automatically prefix conf.db_name""" """Redis client that will automatically prefix conf.db_name"""
@@ -148,7 +150,7 @@ class RedisWrapper(redis.Redis):


def hgetall(self, name): def hgetall(self, name):
return {key: pickle.loads(value) for key, value in return {key: pickle.loads(value) for key, value in
super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()}
iteritems(super(redis.Redis, self).hgetall(self.make_key(name)))}


def hget(self, name, key, generator=None, shared=False): def hget(self, name, key, generator=None, shared=False):
_name = self.make_key(name, shared=shared) _name = self.make_key(name, shared=shared)


+ 4
- 2
frappe/utils/setup_docs.py View File

@@ -10,6 +10,8 @@ from __future__ import unicode_literals, print_function
import os, json, frappe, shutil, re import os, json, frappe, shutil, re
from frappe.website.context import get_context from frappe.website.context import get_context
from frappe.utils import markdown from frappe.utils import markdown
from six import iteritems



class setup_docs(object): class setup_docs(object):
def __init__(self, app): def __init__(self, app):
@@ -294,7 +296,7 @@ class setup_docs(object):
return '{% raw %}' + matchobj.group(0) + '{% endraw %}' return '{% raw %}' + matchobj.group(0) + '{% endraw %}'


cnt = 0 cnt = 0
for path, context in pages.iteritems():
for path, context in iteritems(pages):
print("Writing {0}".format(path)) print("Writing {0}".format(path))


# set this for get_context / website libs # set this for get_context / website libs
@@ -420,7 +422,7 @@ class setup_docs(object):
"images/up.png": "img/up.png" "images/up.png": "img/up.png"
} }


for source, target in copy_files.iteritems():
for source, target in iteritems(copy_files):
source_path = frappe.get_app_path("frappe", "public", source) source_path = frappe.get_app_path("frappe", "public", source)
if os.path.isdir(source_path): if os.path.isdir(source_path):
if not os.path.exists(os.path.join(assets_path, target)): if not os.path.exists(os.path.join(assets_path, target)):


+ 4
- 2
frappe/website/doctype/web_form/web_form.py View File

@@ -13,6 +13,8 @@ from frappe.utils.file_manager import get_max_file_size
from frappe.modules.utils import export_module_json, get_doc_module from frappe.modules.utils import export_module_json, get_doc_module
from urllib import urlencode from urllib import urlencode
from frappe.integrations.utils import get_payment_gateway_controller from frappe.integrations.utils import get_payment_gateway_controller
from six import iteritems



class WebForm(WebsiteGenerator): class WebForm(WebsiteGenerator):
website = frappe._dict( website = frappe._dict(
@@ -206,7 +208,7 @@ def get_context(context):
context.params_from_form_dict = '' context.params_from_form_dict = ''


params = {} params = {}
for key, value in frappe.form_dict.iteritems():
for key, value in iteritems(frappe.form_dict):
if frappe.get_meta(self.doc_type).get_field(key): if frappe.get_meta(self.doc_type).get_field(key):
params[key] = value params[key] = value


@@ -365,7 +367,7 @@ def accept(web_form, data, for_payment=False):
doc = frappe.new_doc(data.doctype) doc = frappe.new_doc(data.doctype)


# set values # set values
for fieldname, value in data.iteritems():
for fieldname, value in iteritems(data):
if value and isinstance(value, dict): if value and isinstance(value, dict):
try: try:
if "__file_attachment" in value: if "__file_attachment" in value:


+ 3
- 1
frappe/website/render.py View File

@@ -7,6 +7,8 @@ from frappe import _
import frappe.sessions import frappe.sessions
from frappe.utils import cstr from frappe.utils import cstr
import mimetypes, json import mimetypes, json

from six import iteritems
from werkzeug.wrappers import Response from werkzeug.wrappers import Response
from werkzeug.routing import Map, Rule, NotFound from werkzeug.routing import Map, Rule, NotFound


@@ -78,7 +80,7 @@ def build_response(path, data, http_status_code, headers=None):
response.headers[b"X-From-Cache"] = frappe.local.response.from_cache or False response.headers[b"X-From-Cache"] = frappe.local.response.from_cache or False


if headers: if headers:
for key, val in headers.iteritems():
for key, val in iteritems(headers):
response.headers[bytes(key)] = val.encode("utf-8") response.headers[bytes(key)] = val.encode("utf-8")


return response return response


+ 3
- 1
frappe/website/utils.py View File

@@ -3,6 +3,8 @@


from __future__ import unicode_literals from __future__ import unicode_literals
import frappe, re, os import frappe, re, os
from six import iteritems



def delete_page_cache(path): def delete_page_cache(path):
cache = frappe.cache() cache = frappe.cache()
@@ -190,7 +192,7 @@ def get_full_index(route=None, app=None):
pages = get_pages(app=app) pages = get_pages(app=app)


# make children map # make children map
for route, page_info in pages.iteritems():
for route, page_info in iteritems(pages):
parent_route = os.path.dirname(route) parent_route = os.path.dirname(route)
children_map.setdefault(parent_route, []).append(page_info) children_map.setdefault(parent_route, []).append(page_info)




+ 3
- 2
frappe/www/sitemap.py View File

@@ -7,6 +7,7 @@ import urllib
import frappe import frappe
from frappe.utils import get_request_site_address, get_datetime, nowdate from frappe.utils import get_request_site_address, get_datetime, nowdate
from frappe.website.router import get_pages, get_all_page_context_from_doctypes from frappe.website.router import get_pages, get_all_page_context_from_doctypes
from six import iteritems


no_cache = 1 no_cache = 1
no_sitemap = 1 no_sitemap = 1
@@ -16,14 +17,14 @@ def get_context(context):
"""generate the sitemap XML""" """generate the sitemap XML"""
host = get_request_site_address() host = get_request_site_address()
links = [] links = []
for route, page in get_pages().iteritems():
for route, page in iteritems(get_pages()):
if not page.no_sitemap: if not page.no_sitemap:
links.append({ links.append({
"loc": urllib.basejoin(host, urllib.quote(page.name.encode("utf-8"))), "loc": urllib.basejoin(host, urllib.quote(page.name.encode("utf-8"))),
"lastmod": nowdate() "lastmod": nowdate()
}) })


for route, data in get_all_page_context_from_doctypes().iteritems():
for route, data in iteritems(get_all_page_context_from_doctypes()):
links.append({ links.append({
"loc": urllib.basejoin(host, urllib.quote((route or "").encode("utf-8"))), "loc": urllib.basejoin(host, urllib.quote((route or "").encode("utf-8"))),
"lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d") "lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d")


Loading…
Cancel
Save