seitime-frappe/frappe/core/page/dashboard/dashboard.py
2019-04-15 10:16:56 +05:30

41 lines
1.3 KiB
Python

# Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from __future__ import unicode_literals
import json
import frappe
from frappe.utils import add_to_date
def cache_source(function):
def wrapper(*args, **kwargs):
chart_name = kwargs.get("chart_name")
cache_key = 'chart-data:{}'.format(chart_name)
if int(kwargs.get("refresh") or 0):
results = generate_and_cache_results(chart_name, function, cache_key)
else:
cached_results = frappe.cache().get_value(cache_key)
if cached_results:
results = json.loads(frappe.safe_decode(cached_results))
else:
results = generate_and_cache_results(chart_name, function, cache_key)
return results
return wrapper
def generate_and_cache_results(chart_name, function, cache_key):
results = function(chart_name)
frappe.cache().set_value(cache_key, json.dumps(results, default=str))
frappe.db.set_value("Dashboard Chart", chart_name, "last_synced_on", frappe.utils.now(), update_modified = False)
return results
def get_from_date_from_timespan(to_date, timespan):
days = months = years = 0
if "Last Week" == timespan:
days = -7
if "Last Month" == timespan:
months = -1
elif "Last Quarter" == timespan:
months = -3
elif "Last Year" == timespan:
years = -1
return add_to_date(to_date, years=years, months=months, days=days,
as_datetime=True)