diff --git a/frappe/__init__.py b/frappe/__init__.py index f1b1bbbdf2..a5cce1d003 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -6,6 +6,7 @@ globals attached to frappe module """ from __future__ import unicode_literals, print_function +from six import iteritems from werkzeug.local import Local, release_local import os, sys, importlib, inspect, json @@ -757,7 +758,7 @@ def get_doc_hooks(): if not hasattr(local, 'doc_events_hooks'): hooks = get_hooks('doc_events', {}) out = {} - for key, value in hooks.iteritems(): + for key, value in iteritems(hooks): if isinstance(key, tuple): for doctype in key: append_hook(out, doctype, value) diff --git a/frappe/app.py b/frappe/app.py index 0813e82635..69c90c97ad 100644 --- a/frappe/app.py +++ b/frappe/app.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import os import MySQLdb +from six import iteritems from werkzeug.wrappers import Request from werkzeug.local import LocalManager @@ -115,7 +116,7 @@ def init_request(request): def make_form_dict(request): 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: # _ is passed by $.ajax so that the request is not cached by the browser. So, remove _ from form_dict diff --git a/frappe/boot.py b/frappe/boot.py index 3acd795528..d413d03fb6 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -2,6 +2,9 @@ # MIT License. See license.txt from __future__ import unicode_literals + +from six import iteritems + """ bootstrap client session """ @@ -179,7 +182,7 @@ def load_translations(bootinfo): messages[name] = frappe._(name) # 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 diff --git a/frappe/build.py b/frappe/build.py index 9e7f928d03..6c86518f18 100644 --- a/frappe/build.py +++ b/frappe/build.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals, print_function from frappe.utils.minify import JavascriptMinify import subprocess +from six import iteritems + """ 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): 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) def get_build_maps(): @@ -100,7 +102,7 @@ def get_build_maps(): if os.path.exists(path): with open(path) as f: try: - for target, sources in json.loads(f.read()).iteritems(): + for target, sources in iteritems(json.loads(f.read())): # update app path source_paths = [] for source in sources: @@ -182,7 +184,7 @@ def scrub_html_template(content): return content.replace("'", "\'") def files_dirty(): - for target, sources in get_build_maps().iteritems(): + for target, sources in iteritems(get_build_maps()): for f in sources: if ':' in f: f, suffix = f.split(':') if not os.path.exists(f) or os.path.isdir(f): continue diff --git a/frappe/client.py b/frappe/client.py index 988358d783..8489542943 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -8,6 +8,8 @@ import frappe.model import frappe.utils import json, os +from six import iteritems + ''' Handle RESTful requests that are mapped to the `/api/resource` route. @@ -228,7 +230,7 @@ def bulk_update(docs): failed_docs = [] for doc in docs: 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'] docname = doc['docname'] doc = frappe.get_doc(doctype, docname) diff --git a/frappe/contacts/doctype/address/address.py b/frappe/contacts/doctype/address/address.py index f185cb50e8..4446805952 100644 --- a/frappe/contacts/doctype/address/address.py +++ b/frappe/contacts/doctype/address/address.py @@ -13,6 +13,8 @@ from jinja2 import TemplateSyntaxError from frappe.utils.user import is_website_user from frappe.model.naming import make_autoname from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links +from six import iteritems + class Address(Document): def __setup__(self): @@ -191,7 +193,7 @@ def address_query(doctype, txt, searchfield, start, page_len, filters): link_name = filters.pop('link_name') condition = "" - for fieldname, value in filters.iteritems(): + for fieldname, value in iteritems(filters): condition += " and {field}={value}".format( field=fieldname, value=value diff --git a/frappe/contacts/doctype/contact/contact.py b/frappe/contacts/doctype/contact/contact.py index 2eca1b7760..bc3744bbad 100644 --- a/frappe/contacts/doctype/contact/contact.py +++ b/frappe/contacts/doctype/contact/contact.py @@ -7,6 +7,8 @@ from frappe.utils import cstr, has_gravatar from frappe import _ from frappe.model.document import Document from frappe.core.doctype.dynamic_link.dynamic_link import deduplicate_dynamic_links +from six import iteritems + class Contact(Document): def autoname(self): @@ -118,7 +120,7 @@ def contact_query(doctype, txt, searchfield, start, page_len, filters): link_name = filters.pop('link_name') condition = "" - for fieldname, value in filters.iteritems(): + for fieldname, value in iteritems(filters): condition += " and {field}={value}".format( field=fieldname, value=value diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 8c3e61d55f..143a0cf6b9 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -12,6 +12,8 @@ from frappe.modules.export_file import export_to_files from frappe.modules import make_boilerplate from frappe.core.doctype.page.page import delete_custom_role from frappe.core.doctype.custom_role.custom_role import get_custom_allowed_roles +from six import iteritems + class Report(Document): def validate(self): @@ -123,7 +125,7 @@ class Report(Document): _filters = params.get('filters') or [] if filters: - for key, value in filters.iteritems(): + for key, value in iteritems(filters): condition, _value = '=', value if isinstance(value, (list, tuple)): condition, _value = value diff --git a/frappe/database.py b/frappe/database.py index 2724507541..6868710e99 100644 --- a/frappe/database.py +++ b/frappe/database.py @@ -20,6 +20,8 @@ from frappe.utils import now, get_datetime, cstr from frappe import _ from types import StringType, UnicodeType from frappe.utils.global_search import sync_global_search +from six import iteritems + class Database: """ @@ -655,7 +657,7 @@ class Database: where field in ({0}) and doctype=%s'''.format(', '.join(['%s']*len(keys))), 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)''', (dt, key, value), debug=debug) diff --git a/frappe/desk/doctype/desktop_icon/desktop_icon.py b/frappe/desk/doctype/desktop_icon/desktop_icon.py index 2a9e38fab9..d4b4d2c1f5 100644 --- a/frappe/desk/doctype/desktop_icon/desktop_icon.py +++ b/frappe/desk/doctype/desktop_icon/desktop_icon.py @@ -9,6 +9,8 @@ from frappe import _ import json import random from frappe.model.document import Document +from six import iteritems + class DesktopIcon(Document): def validate(self): @@ -323,7 +325,7 @@ def sync_from_app(app): if isinstance(modules, dict): modules_list = [] - for m, desktop_icon in modules.iteritems(): + for m, desktop_icon in iteritems(modules): desktop_icon['module_name'] = m modules_list.append(desktop_icon) else: diff --git a/frappe/desk/doctype/kanban_board/kanban_board.py b/frappe/desk/doctype/kanban_board/kanban_board.py index 062b72590c..aa43d747e6 100644 --- a/frappe/desk/doctype/kanban_board/kanban_board.py +++ b/frappe/desk/doctype/kanban_board/kanban_board.py @@ -7,6 +7,7 @@ import frappe import json from frappe import _ from frappe.model.document import Document +from six import iteritems class KanbanBoard(Document): @@ -91,7 +92,7 @@ def update_order(board_name, order): order_dict = json.loads(order) updated_cards = [] - for col_name, cards in order_dict.iteritems(): + for col_name, cards in iteritems(order_dict): order_list = [] for card in cards: column = frappe.get_value( diff --git a/frappe/desk/form/meta.py b/frappe/desk/form/meta.py index 0f81582182..310193c5f8 100644 --- a/frappe/desk/form/meta.py +++ b/frappe/desk/form/meta.py @@ -14,6 +14,8 @@ from frappe.model.utils import render_include from frappe.build import scrub_html_template ###### +from six import iteritems + def get_meta(doctype, cached=True): if cached and not frappe.conf.developer_mode: @@ -153,7 +155,7 @@ class FormMeta(Meta): app = module.__name__.split(".")[0] 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)) self.set("__form_grid_templates", templates) diff --git a/frappe/email/email_body.py b/frappe/email/email_body.py index 43f79a3027..6d7dee38aa 100755 --- a/frappe/email/email_body.py +++ b/frappe/email/email_body.py @@ -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) import email.utils from frappe.utils import parse_addr +from six import iteritems + def get_email(recipients, sender='', msg='', subject='[No Subject]', 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. - for key, val in headers.iteritems(): + for key, val in iteritems(headers): self.set_header(key, val) # call hook to enable apps to modify msg_root before sending diff --git a/frappe/email/receive.py b/frappe/email/receive.py index 0ff632771e..a36e120a0b 100644 --- a/frappe/email/receive.py +++ b/frappe/email/receive.py @@ -2,6 +2,8 @@ # MIT License. See license.txt from __future__ import unicode_literals + +from six import iteritems from six.moves import range import time, _socket, poplib, imaplib, email, email.utils, datetime, chardet, re, hashlib from email_reply_parser import EmailReplyParser @@ -343,7 +345,7 @@ class EmailServer: return self.imap.select("Inbox") - for uid, operation in uid_list.iteritems(): + for uid, operation in iteritems(uid_list): if not uid: continue op = "+FLAGS" if operation == "Read" else "-FLAGS" diff --git a/frappe/frappeclient.py b/frappe/frappeclient.py index 192ca94df8..f0acec9fdc 100644 --- a/frappe/frappeclient.py +++ b/frappe/frappeclient.py @@ -2,6 +2,7 @@ from __future__ import print_function import requests import json import frappe +from six import iteritems ''' FrappeClient is a library that helps you connect with other frappe systems @@ -270,7 +271,7 @@ class FrappeClient(object): def preprocess(self, params): """convert dicts, lists to json""" - for key, value in params.iteritems(): + for key, value in iteritems(params): if isinstance(value, (dict, list)): params[key] = json.dumps(value) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index ce834dc730..bc087f7747 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -2,7 +2,7 @@ # MIT License. See license.txt from __future__ import unicode_literals -from six import reraise as raise_ +from six import reraise as raise_, iteritems import frappe, sys from frappe import _ 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: self.set(key, d.get(key)) - for key, value in d.iteritems(): + for key, value in iteritems(d): self.set(key, value) return self @@ -83,7 +83,7 @@ class BaseDocument(object): if "doctype" in d: 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 if (self.get(key) is None) and (value is not None) and (key not in self.dont_update_if_missing): self.set(key, value) @@ -565,7 +565,7 @@ class BaseDocument(object): if frappe.flags.in_install: 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) 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) diff --git a/frappe/model/db_query.py b/frappe/model/db_query.py index 554e4a8dbd..46b32d43f5 100644 --- a/frappe/model/db_query.py +++ b/frappe/model/db_query.py @@ -2,6 +2,9 @@ # MIT License. See license.txt from __future__ import unicode_literals + +from six import iteritems + """build query for doclistview and return results""" import frappe, json, copy @@ -171,7 +174,7 @@ class DatabaseQuery(object): if isinstance(filters, dict): fdict = filters filters = [] - for key, value in fdict.iteritems(): + for key, value in iteritems(fdict): filters.append(make_filter_tuple(self.doctype, key, value)) setattr(self, filter_name, filters) diff --git a/frappe/model/document.py b/frappe/model/document.py index e1bbb17b79..74f6ab0680 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -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.model.base_document import BaseDocument, get_controller from frappe.model.naming import set_new_name +from six import iteritems from werkzeug.exceptions import NotFound, Forbidden import hashlib, json from frappe.model import optional_fields @@ -344,7 +345,7 @@ class Document(BaseDocument): def get_values(): values = self.as_dict() # format values - for key, value in values.iteritems(): + for key, value in iteritems(values): if value==None: values[key] = "" return values @@ -361,7 +362,7 @@ class Document(BaseDocument): def update_single(self, d): """Updates values for Single type Document in `tabSingles`.""" 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": frappe.db.sql("""insert into tabSingles(doctype, field, value) values (%s, %s, %s)""", (self.doctype, field, value)) diff --git a/frappe/model/utils/link_count.py b/frappe/model/utils/link_count.py index 01f5214f1b..01af04dc60 100644 --- a/frappe/model/utils/link_count.py +++ b/frappe/model/utils/link_count.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe +from six import iteritems ignore_doctypes = ("DocType", "Print Format", "Role", "Module Def", "Communication", "ToDo") @@ -26,7 +27,7 @@ def update_link_count(): link_count = frappe.cache().get_value('_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: try: frappe.db.sql('update `tab{0}` set idx = idx + {1} where name=%s'.format(key[0], count), diff --git a/frappe/model/utils/user_settings.py b/frappe/model/utils/user_settings.py index dd58c4b9a4..86498fc507 100644 --- a/frappe/model/utils/user_settings.py +++ b/frappe/model/utils/user_settings.py @@ -2,6 +2,8 @@ # such as page_limit, filters, last_view import frappe, json +from six import iteritems + def get_user_settings(doctype, for_update=False): 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(): '''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('::') frappe.db.sql('''insert into __UserSettings (user, doctype, data) values (%s, %s, %s) on duplicate key update data=%s''', (user, doctype, data, data)) diff --git a/frappe/patches/v4_1/file_manager_fix.py b/frappe/patches/v4_1/file_manager_fix.py index bc813284d0..1fced61799 100644 --- a/frappe/patches/v4_1/file_manager_fix.py +++ b/frappe/patches/v4_1/file_manager_fix.py @@ -19,6 +19,8 @@ from frappe.utils import get_files_path, get_site_path # a backup from a time before version 3 migration # # * Patch remaining unpatched File records. +from six import iteritems + def execute(): 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, '')=''")) 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(): ret.append((nfilename, invfiles[nfilename])) return ret @@ -82,7 +84,7 @@ def rename_replacing_files(): def invert_dict(ddict): ret = {} - for k,v in ddict.iteritems(): + for k,v in iteritems(ddict): if not ret.get(v): ret[v] = [k] else: diff --git a/frappe/patches/v8_0/rename_listsettings_to_usersettings.py b/frappe/patches/v8_0/rename_listsettings_to_usersettings.py index df2e739851..f0a0ad76e0 100644 --- a/frappe/patches/v8_0/rename_listsettings_to_usersettings.py +++ b/frappe/patches/v8_0/rename_listsettings_to_usersettings.py @@ -1,6 +1,8 @@ from frappe.installer import create_user_settings_table from frappe.model.utils.user_settings import update_user_settings import frappe, json +from six import iteritems + def execute(): if frappe.db.table_exists("__ListSettings"): @@ -32,7 +34,7 @@ def execute(): for user in frappe.db.get_all('User', {'user_type': 'System User'}): 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:'): doctype = key.replace('_list_settings:', '') columns = ['`tab{1}`.`{0}`'.format(*c) for c in json.loads(value)] diff --git a/frappe/translate.py b/frappe/translate.py index 8ee83a67a6..2c2f39d521 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -3,6 +3,8 @@ from __future__ import unicode_literals, print_function +from six import iteritems + """ frappe.translate ~~~~~~~~~~~~~~~~ @@ -120,7 +122,7 @@ def get_dict(fortype, name=None): message_dict.update(get_dict_from_hooks(fortype, name)) # 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 diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 1f41f82de1..24bff1663d 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -13,6 +13,7 @@ from dateutil import parser from num2words import num2words import HTMLParser from html2text import html2text +from six import iteritems DATE_FORMAT = "%Y-%m-%d" TIME_FORMAT = "%H:%M:%S.%f" @@ -686,7 +687,7 @@ operator_map = { def evaluate_filters(doc, filters): '''Returns true if doc matches filters''' if isinstance(filters, dict): - for key, value in filters.iteritems(): + for key, value in iteritems(filters): f = get_filter(None, {key:value}) if not compare(doc.get(f.fieldname), f.operator, f.value): return False diff --git a/frappe/utils/doctor.py b/frappe/utils/doctor.py index 4b5c15285e..23d6d5d6bc 100644 --- a/frappe/utils/doctor.py +++ b/frappe/utils/doctor.py @@ -4,6 +4,7 @@ from collections import defaultdict from rq import Worker, Connection from frappe.utils.background_jobs import get_redis_conn, get_queue, get_queue_list from frappe.utils.scheduler import is_scheduler_disabled +from six import iteritems def get_workers(): @@ -118,7 +119,7 @@ def doctor(site=None): print("Queue:", queue) print("Number of Jobs: ", job_count[queue]) 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("------------") diff --git a/frappe/utils/redis_wrapper.py b/frappe/utils/redis_wrapper.py index 8a116a3084..fe90f561f6 100644 --- a/frappe/utils/redis_wrapper.py +++ b/frappe/utils/redis_wrapper.py @@ -5,6 +5,8 @@ from __future__ import unicode_literals import redis, frappe, re import cPickle as pickle from frappe.utils import cstr +from six import iteritems + class RedisWrapper(redis.Redis): """Redis client that will automatically prefix conf.db_name""" @@ -148,7 +150,7 @@ class RedisWrapper(redis.Redis): def hgetall(self, name): 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): _name = self.make_key(name, shared=shared) diff --git a/frappe/utils/setup_docs.py b/frappe/utils/setup_docs.py index 05ae2f3c28..154fc6b6f9 100644 --- a/frappe/utils/setup_docs.py +++ b/frappe/utils/setup_docs.py @@ -10,6 +10,8 @@ from __future__ import unicode_literals, print_function import os, json, frappe, shutil, re from frappe.website.context import get_context from frappe.utils import markdown +from six import iteritems + class setup_docs(object): def __init__(self, app): @@ -294,7 +296,7 @@ class setup_docs(object): return '{% raw %}' + matchobj.group(0) + '{% endraw %}' cnt = 0 - for path, context in pages.iteritems(): + for path, context in iteritems(pages): print("Writing {0}".format(path)) # set this for get_context / website libs @@ -420,7 +422,7 @@ class setup_docs(object): "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) if os.path.isdir(source_path): if not os.path.exists(os.path.join(assets_path, target)): diff --git a/frappe/website/doctype/web_form/web_form.py b/frappe/website/doctype/web_form/web_form.py index 8c122a6132..dd2431a2e6 100644 --- a/frappe/website/doctype/web_form/web_form.py +++ b/frappe/website/doctype/web_form/web_form.py @@ -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 urllib import urlencode from frappe.integrations.utils import get_payment_gateway_controller +from six import iteritems + class WebForm(WebsiteGenerator): website = frappe._dict( @@ -206,7 +208,7 @@ def get_context(context): context.params_from_form_dict = '' 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): params[key] = value @@ -365,7 +367,7 @@ def accept(web_form, data, for_payment=False): doc = frappe.new_doc(data.doctype) # set values - for fieldname, value in data.iteritems(): + for fieldname, value in iteritems(data): if value and isinstance(value, dict): try: if "__file_attachment" in value: diff --git a/frappe/website/render.py b/frappe/website/render.py index 1f440df87f..a36013fa43 100644 --- a/frappe/website/render.py +++ b/frappe/website/render.py @@ -7,6 +7,8 @@ from frappe import _ import frappe.sessions from frappe.utils import cstr import mimetypes, json + +from six import iteritems from werkzeug.wrappers import Response 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 if headers: - for key, val in headers.iteritems(): + for key, val in iteritems(headers): response.headers[bytes(key)] = val.encode("utf-8") return response diff --git a/frappe/website/utils.py b/frappe/website/utils.py index f6f97f9358..31ff4acddc 100644 --- a/frappe/website/utils.py +++ b/frappe/website/utils.py @@ -3,6 +3,8 @@ from __future__ import unicode_literals import frappe, re, os +from six import iteritems + def delete_page_cache(path): cache = frappe.cache() @@ -190,7 +192,7 @@ def get_full_index(route=None, app=None): pages = get_pages(app=app) # make children map - for route, page_info in pages.iteritems(): + for route, page_info in iteritems(pages): parent_route = os.path.dirname(route) children_map.setdefault(parent_route, []).append(page_info) diff --git a/frappe/www/sitemap.py b/frappe/www/sitemap.py index e6f424eaab..3740e57fdf 100644 --- a/frappe/www/sitemap.py +++ b/frappe/www/sitemap.py @@ -7,6 +7,7 @@ import urllib import frappe 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 six import iteritems no_cache = 1 no_sitemap = 1 @@ -16,14 +17,14 @@ def get_context(context): """generate the sitemap XML""" host = get_request_site_address() links = [] - for route, page in get_pages().iteritems(): + for route, page in iteritems(get_pages()): if not page.no_sitemap: links.append({ "loc": urllib.basejoin(host, urllib.quote(page.name.encode("utf-8"))), "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({ "loc": urllib.basejoin(host, urllib.quote((route or "").encode("utf-8"))), "lastmod": get_datetime(data.get("modified")).strftime("%Y-%m-%d")