瀏覽代碼

Merge branch 'master' into develop

version-14
Nabin Hait 8 年之前
父節點
當前提交
342e3ec10a
共有 8 個文件被更改,包括 42 次插入53 次删除
  1. +3
    -3
      frappe/__init__.py
  2. +0
    -14
      frappe/data/app_listing/paypal_integration.json
  3. +0
    -14
      frappe/data/app_listing/razorpay_integration.json
  4. +6
    -2
      frappe/public/css/website.css
  5. +8
    -2
      frappe/public/less/website.less
  6. +6
    -6
      frappe/translate.py
  7. +15
    -12
      frappe/utils/redis_wrapper.py
  8. +4
    -0
      frappe/www/print.py

+ 3
- 3
frappe/__init__.py 查看文件

@@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json
from .exceptions import * from .exceptions import *
from .utils.jinja import get_jenv, get_template, render_template from .utils.jinja import get_jenv, get_template, render_template


__version__ = '7.1.12'
__version__ = '7.1.13'
__title__ = "Frappe Framework" __title__ = "Frappe Framework"


local = Local() local = Local()
@@ -135,6 +135,8 @@ def init(site, sites_path=None, new_site=False):
local.jenv = None local.jenv = None
local.jloader =None local.jloader =None
local.cache = {} local.cache = {}
local.form_dict = _dict()
local.session = _dict()


setup_module_map() setup_module_map()


@@ -149,8 +151,6 @@ def connect(site=None, db_name=None):
if site: if site:
init(site) init(site)
local.db = Database(user=db_name or local.conf.db_name) local.db = Database(user=db_name or local.conf.db_name)
local.form_dict = _dict()
local.session = _dict()
set_user("Administrator") set_user("Administrator")


def get_site_config(sites_path=None, site_path=None): def get_site_config(sites_path=None, site_path=None):


+ 0
- 14
frappe/data/app_listing/paypal_integration.json 查看文件

@@ -1,14 +0,0 @@
{
"app_url": "https://frappe.github.io/paypal_integration",
"app_name": "paypal_integration",
"app_icon": "octicon octicon-credit-card",
"app_color": "#179bd7",
"app_description": "Accept Payment via PayPal",
"app_publisher": "Frappe",
"app_email": "hello@frappe.io",
"repo_url": "https://github.com/frappe/paypal_integration.git",
"app_title": "Paypal Integration",
"app_version": "1.0.0",
"app_category": "Integrations",
"featured": 1
}

+ 0
- 14
frappe/data/app_listing/razorpay_integration.json 查看文件

@@ -1,14 +0,0 @@
{
"app_url": "https://frappe.github.io/razorpay_integration",
"app_name": "razorpay_integration",
"app_icon": "octicon octicon-credit-card",
"app_color": "#179bd7",
"app_description": "Accept Payment via Razorpay",
"app_publisher": "Frappe",
"app_email": "hello@frappe.io",
"repo_url": "https://github.com/frappe/razorpay_integration.git",
"app_title": "Razorpay Integration",
"app_version": "1.0.0",
"app_category": "Integrations",
"featured": 1
}

+ 6
- 2
frappe/public/css/website.css 查看文件

@@ -893,10 +893,14 @@ li .footer-child-item {
padding-right: 15px; padding-right: 15px;
border-right: 1px solid #d1d8dd; border-right: 1px solid #d1d8dd;
} }
.shopping-cart .cart-icon .dropdown-toggle {
text-decoration: none !important;
}
.badge-wrapper { .badge-wrapper {
min-height: 17px;
min-width: 17px;
display: inline-block; display: inline-block;
margin-left: 7px;
margin-top: -3px;
padding: 2px 7px;
border: 1px solid #d1d8dd; border: 1px solid #d1d8dd;
border-radius: 3px; border-radius: 3px;
color: #7575ff; color: #7575ff;


+ 8
- 2
frappe/public/less/website.less 查看文件

@@ -621,15 +621,21 @@ li .footer-child-item {
padding-bottom:2000px; margin-bottom:-2000px;} padding-bottom:2000px; margin-bottom:-2000px;}


.shopping-cart { .shopping-cart {
.cart-icon {
.dropdown-toggle {
text-decoration: none !important;
}
}
margin-top:12px; margin-top:12px;
margin-bottom:8px; margin-bottom:8px;
padding-right:15px; padding-right:15px;
border-right: 1px solid @border-color; border-right: 1px solid @border-color;
} }
.badge-wrapper { .badge-wrapper {
min-height: 17px;
min-width: 17px;
display: inline-block; display: inline-block;
margin-left: 7px;
margin-top: -3px;
padding: 2px 7px;
border: 1px solid @border-color; border: 1px solid @border-color;
border-radius: 3px; border-radius: 3px;
color: #7575ff; color: #7575ff;


+ 6
- 6
frappe/translate.py 查看文件

@@ -94,7 +94,7 @@ def get_dict(fortype, name=None):
fortype = fortype.lower() fortype = fortype.lower()
cache = frappe.cache() cache = frappe.cache()
asset_key = fortype + ":" + (name or "-") asset_key = fortype + ":" + (name or "-")
translation_assets = cache.hget("translation_assets", frappe.local.lang) or {}
translation_assets = cache.hget("translation_assets", frappe.local.lang, shared=True) or {}


if not asset_key in translation_assets: if not asset_key in translation_assets:
if fortype=="doctype": if fortype=="doctype":
@@ -123,7 +123,7 @@ def get_dict(fortype, name=None):


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


cache.hset("translation_assets", frappe.local.lang, translation_assets)
cache.hset("translation_assets", frappe.local.lang, translation_assets, shared=True)


return translation_assets[asset_key] return translation_assets[asset_key]


@@ -203,7 +203,7 @@ def load_lang(lang, apps=None):
if lang=='en': if lang=='en':
return {} return {}


out = frappe.cache().hget("lang_full_dict", lang)
out = frappe.cache().hget("lang_full_dict", lang, shared=True)
if not out: if not out:
out = {} out = {}
for app in (apps or frappe.get_all_apps(True)): for app in (apps or frappe.get_all_apps(True)):
@@ -216,7 +216,7 @@ def load_lang(lang, apps=None):
parent_out.update(out) parent_out.update(out)
out = parent_out out = parent_out


frappe.cache().hset("lang_full_dict", lang, out)
frappe.cache().hset("lang_full_dict", lang, out, shared=True)


return out or {} return out or {}


@@ -260,8 +260,8 @@ def clear_cache():


# clear translations saved in boot cache # clear translations saved in boot cache
cache.delete_key("bootinfo") cache.delete_key("bootinfo")
cache.delete_key("lang_full_dict")
cache.delete_key("translation_assets")
cache.delete_key("lang_full_dict", shared=True)
cache.delete_key("translation_assets", shared=True)
cache.delete_key("lang_user_translations") cache.delete_key("lang_user_translations")


def get_messages_for_app(app): def get_messages_for_app(app):


+ 15
- 12
frappe/utils/redis_wrapper.py 查看文件

@@ -8,7 +8,9 @@ from frappe.utils import cstr


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"""
def make_key(self, key, user=None):
def make_key(self, key, user=None, shared=False):
if shared:
return key
if user: if user:
if user == True: if user == True:
user = frappe.session.user user = frappe.session.user
@@ -100,23 +102,23 @@ class RedisWrapper(redis.Redis):
def delete_key(self, *args, **kwargs): def delete_key(self, *args, **kwargs):
self.delete_value(*args, **kwargs) self.delete_value(*args, **kwargs)


def delete_value(self, keys, user=None, make_keys=True):
def delete_value(self, keys, user=None, make_keys=True, shared=False):
"""Delete value, list of values.""" """Delete value, list of values."""
if not isinstance(keys, (list, tuple)): if not isinstance(keys, (list, tuple)):
keys = (keys, ) keys = (keys, )


for key in keys: for key in keys:
if key in frappe.local.cache:
del frappe.local.cache[key]

if make_keys: if make_keys:
key = self.make_key(key)
key = self.make_key(key, shared=shared)


try: try:
self.delete(key) self.delete(key)
except redis.exceptions.ConnectionError: except redis.exceptions.ConnectionError:
pass pass


if key in frappe.local.cache:
del frappe.local.cache[key]

def lpush(self, key, value): def lpush(self, key, value):
super(redis.Redis, self).lpush(self.make_key(key), value) super(redis.Redis, self).lpush(self.make_key(key), value)


@@ -129,12 +131,13 @@ class RedisWrapper(redis.Redis):
def llen(self, key): def llen(self, key):
return super(redis.Redis, self).llen(self.make_key(key)) return super(redis.Redis, self).llen(self.make_key(key))


def hset(self, name, key, value):
def hset(self, name, key, value, shared=False):
if not name in frappe.local.cache: if not name in frappe.local.cache:
frappe.local.cache[name] = {} frappe.local.cache[name] = {}
frappe.local.cache[name][key] = value frappe.local.cache[name][key] = value
try: try:
super(redis.Redis, self).hset(self.make_key(name), key, pickle.dumps(value))
super(redis.Redis, self).hset(self.make_key(name, shared=shared),
key, pickle.dumps(value))
except redis.exceptions.ConnectionError: except redis.exceptions.ConnectionError:
pass pass


@@ -142,7 +145,7 @@ class RedisWrapper(redis.Redis):
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()} super(redis.Redis, self).hgetall(self.make_key(name)).iteritems()}


def hget(self, name, key, generator=None):
def hget(self, name, key, generator=None, shared=False):
if not name in frappe.local.cache: if not name in frappe.local.cache:
frappe.local.cache[name] = {} frappe.local.cache[name] = {}
if key in frappe.local.cache[name]: if key in frappe.local.cache[name]:
@@ -150,7 +153,7 @@ class RedisWrapper(redis.Redis):


value = None value = None
try: try:
value = super(redis.Redis, self).hget(self.make_key(name), key)
value = super(redis.Redis, self).hget(self.make_key(name, shared=shared), key)
except redis.exceptions.ConnectionError: except redis.exceptions.ConnectionError:
pass pass


@@ -165,12 +168,12 @@ class RedisWrapper(redis.Redis):
pass pass
return value return value


def hdel(self, name, key):
def hdel(self, name, key, shared=False):
if name in frappe.local.cache: if name in frappe.local.cache:
if key in frappe.local.cache[name]: if key in frappe.local.cache[name]:
del frappe.local.cache[name][key] del frappe.local.cache[name][key]
try: try:
super(redis.Redis, self).hdel(self.make_key(name), key)
super(redis.Redis, self).hdel(self.make_key(name, shared=shared), key)
except redis.exceptions.ConnectionError: except redis.exceptions.ConnectionError:
pass pass




+ 4
- 0
frappe/www/print.py 查看文件

@@ -270,6 +270,10 @@ def make_layout(doc, meta, format_data=None):
doc.set(df.fieldname, True) # show this field doc.set(df.fieldname, True) # show this field


if is_visible(df, doc) and has_value(df, doc): if is_visible(df, doc) and has_value(df, doc):
if page[-1]['columns'] == []:
# if no column, add one
page[-1]['columns'].append({'fields': []})

page[-1]['columns'][-1]['fields'].append(df) page[-1]['columns'][-1]['fields'].append(df)


# section has fields # section has fields


Loading…
取消
儲存