def update(self, force_cache=False, force_db=False): """extend session expiry""" if (frappe.session['user'] == "Guest"): return now = frappe.utils.now() if force_cache: self.update_data_cache() else: self.data['data']['last_updated'] = now # update session in db last_updated = utils.jaspersession_get_value("last_db_jasper_session_update") time_diff = frappe.utils.time_diff_in_seconds(now, last_updated) if last_updated else None # database persistence is secondary, don't update it too often updated_in_db = False if force_db or (time_diff==None) or (time_diff > 300): frappe.db.sql("""update tabJasperSessions set sessiondata=%s, lastupdate=NOW() where TIMEDIFF(NOW(), lastupdate) < TIME(%s) and status='Active'""" , (str(self.data['data']), utils.get_expiry_period())) utils.jaspersession_set_value("last_db_jasper_session_update", now) updated_in_db = True frappe.db.commit() # set in memcache utils.jaspersession_set_value("jaspersession", self.data) return updated_in_db
def clear_expired_jasper_error_help(sessionId): import frappe.utils last_err = jaspersession_get_value(sessionId) if not last_err: return time_diff = frappe.utils.time_diff_in_hours(frappe.utils.now(), last_err) if time_diff >= 4: frappe.cache().delete_value("jasper:" + sessionId)
def validate_ticket(self, data): last_timeout = utils.jaspersession_get_value( "last_jasper_session_timeout") request_time = data.get("reqtime") time_diff = frappe.utils.time_diff_in_seconds( request_time, last_timeout) if last_timeout else None if time_diff and time_diff < 0: frappe.throw(_("RequestID not Valid."))
def clear_all_jasper_reports(force=True): deleted = force compiled_removed = 0 emailed_removed = 0 #to every intern_reqid is one local_report_ or from server?(to check) tabReqids = frappe.db.sql("select * from tabJasperReqids where reqid like 'intern_reqid_%'", as_dict=True) import ast from jasper_erpnext_report.utils.jasper_email import get_email_pdf_path for m in tabReqids: d = m.get('data') req = ast.literal_eval(d) reqId = req.get("reqids")[0][0] data = jaspersession_get_value(reqId) if not force: deleted = _f(data) if deleted: if "local_report_" not in reqId: continue intern_reqid = m.get("reqid") try: if not data: d = frappe.db.sql("select * from tabJasperReqids where reqid='{0}'".format(reqId), as_dict=True) data = ast.literal_eval(d[0]['data']) file_path = data.get('result').get("uri").rsplit("/",1) compiled_path = file_path[0] remove_directory(compiled_path) compiled_removed += 1 #if this report was not sent by email then remove it from assets/jasper_erpnext_report/reports/ urlemails = frappe.db.sql("""select count(*) from `tabJasper Email Report` where jasper_report_path like '%{0}%'""".format(intern_reqid)) if urlemails[0][0] == 0: report_name = data.get("report_name").get("data").get("report_name") site = req.get("site") path = get_email_pdf_path(report_name, intern_reqid, site) remove_directory(path) emailed_removed += 1 except: print _("Path does not exist!") frappe.cache().delete_value("jasper:" + reqId) frappe.cache().delete_value("jasper:" + intern_reqid) frappe.db.sql("""delete from tabJasperReqids where reqid in ('%s', '%s')"""%(reqId, intern_reqid)) frappe.db.commit() if compiled_removed > 0: print _("Was removed {0} file(s) from compiled path and {1} file(s) from reports path (emailed only).".format(compiled_removed, emailed_removed)) else: #print _("No file was removed.") print "No file was removed."
def ignore_jasper_perm(): ignore_perm = jaspersession_get_value("jasper_ignore_perm_roles") if ignore_perm is None: ignore_perm = frappe.db.get_single_value("JasperServerConfig", "jasper_ignore_perm_roles") jaspersession_set_value("jasper_ignore_perm_roles", ignore_perm) if not cint(ignore_perm): return False return True
def send_mail_and_logger(self, sessionId, msg, title, log=True): cur_user = "******" if self.user == "Administrator" else self.user last_err = utils.jaspersession_get_value(sessionId) if not last_err: last_err = utils.add_to_time_str(hours=-5) time_diff = frappe.utils.time_diff_in_hours(frappe.utils.now(), last_err) if time_diff >= 4: self.send_email(msg, title, user=cur_user) utils.jaspersession_set_value(sessionId, frappe.utils.now()) if log: _logger.error(msg)
def check_if_expire(reqId): req = jaspersession_get_value(reqId) if not req: return False data = req.get("data", {}) last_updated = data.get("last_updated", frappe.utils.now()) session_expire = req.get("session_expiry", "00:00:00") time_diff, expire = get_jasper_session_expiry_seconds(last_updated, session_expire) if time_diff >= expire: return True return False
def check_if_expire(reqId): req = jaspersession_get_value(reqId) if not req: return False data = req.get("data", {}) last_updated = data.get("last_updated", frappe.utils.now()) session_expire = req.get("session_expiry", "00:00:00") time_diff, expire = get_jasper_session_expiry_seconds( last_updated, session_expire) if time_diff >= expire: return True return False
def get_reports_list_for_all(self): if self.sid == 'Guest': return None data = {} dirt = utils.jaspersession_get_value("report_list_dirt_all") or False #dirt if redis not cache if not dirt: data = utils.get_jasper_session_data_from_cache("report_list_all") #if for some reason there is no cache get it from db if not data: r_filters = [ "`tabJasper Reports`.jasper_doctype is NULL", "`tabJasper Reports`.report is NULL" ] ldata = self._get_reports_list(filters_report=r_filters) cached = redis_transation(ldata, "report_list_all") if ldata: data = ldata.get("data", None) if cached and data: utils.jaspersession_set_value("report_list_dirt_all", False) if data: data.pop('session_expiry', None) data.pop('last_updated', None) self.filter_perm_roles(data) if not self.check_server_status(): self.remove_server_docs(data) try: version = utils.getFrappeVersion().major if version >= 5: from jasper_erpnext_report.utils.jasper_email import is_email_enabled acc = cint(is_email_enabled()) else: acc = cint( frappe.db.get_single_value("Outgoing Email Settings", "enabled")) data['mail_enabled'] = acc except: data['mail_enabled'] = "disabled" return data
def get_reports_list(self, doctype, docnames, report): if not doctype and not report: frappe.throw( _("You need to provide the doctype name or the report name.")) if docnames: docnames = json.loads(docnames) else: docnames = [] new_data = {'size': 0} if frappe.local.session['sid'] == 'Guest': return None data = {} dirt = utils.jaspersession_get_value("report_list_dirt_doc") if not dirt: data = utils.get_jasper_session_data_from_cache( "report_list_doctype") if not data or not self.check_docname(data, doctype, report): if doctype: r_filters = {"jasper_doctype": doctype} else: r_filters = {"report": report} update = False if not data else True ldata = self._get_reports_list(filters_report=r_filters, cachename="report_list_doctype", update=update) cached = redis_transation(ldata, "report_list_doctype") if ldata: data = ldata.get("data", None) if cached and data and dirt: utils.jaspersession_set_value("report_list_dirt_doc", False) if data and self.check_docname(data, doctype, report): data.pop('session_expiry', None) data.pop('last_updated', None) new_data = self.doc_filter_perm_roles(doctype or report, data, docnames) if not self.check_server_status(): self.remove_server_docs(new_data) return new_data
def get_reports_list(self, doctype, docnames, report): if not doctype and not report: frappe.throw(_("You need to provide the doctype name or the report name.")) if docnames: docnames = json.loads(docnames) else: docnames = [] new_data = {'size': 0} if frappe.local.session['sid'] == 'Guest': return None data = {} dirt = utils.jaspersession_get_value("report_list_dirt_doc") if not dirt: data = utils.get_jasper_session_data_from_cache("report_list_doctype") if not data or not self.check_docname(data, doctype, report): if doctype: r_filters={"jasper_doctype": doctype} else: r_filters={"report": report} update = False if not data else True ldata = self._get_reports_list(filters_report=r_filters, cachename="report_list_doctype", update=update) cached = redis_transation(ldata, "report_list_doctype") if ldata: data = ldata.get("data", None) if cached and data and dirt: utils.jaspersession_set_value("report_list_dirt_doc", False) if data and self.check_docname(data, doctype, report): data.pop('session_expiry',None) data.pop('last_updated', None) new_data = self.doc_filter_perm_roles(doctype or report, data, docnames) if not self.check_server_status(): self.remove_server_docs(new_data) return new_data
def get_reports_list_for_all(self): if self.sid == 'Guest': return None data = {} dirt = utils.jaspersession_get_value("report_list_dirt_all") or False #dirt if redis not cache if not dirt: data = utils.get_jasper_session_data_from_cache("report_list_all") #if for some reason there is no cache get it from db if not data: r_filters=["`tabJasper Reports`.jasper_doctype is NULL", "`tabJasper Reports`.report is NULL"] ldata = self._get_reports_list(filters_report=r_filters) cached = redis_transation(ldata, "report_list_all") if ldata: data = ldata.get("data", None) if cached and data: utils.jaspersession_set_value("report_list_dirt_all", False) if data: data.pop('session_expiry', None) data.pop('last_updated', None) self.filter_perm_roles(data) if not self.check_server_status(): self.remove_server_docs(data) try: version = utils.getFrappeVersion().major if version >= 5: from jasper_erpnext_report.utils.jasper_email import is_email_enabled acc = cint(is_email_enabled()) else: acc = cint(frappe.db.get_single_value("Outgoing Email Settings", "enabled")) data['mail_enabled'] = acc except: data['mail_enabled'] = "disabled" return data
def validate_ticket(self, data): last_timeout = utils.jaspersession_get_value("last_jasper_session_timeout") request_time = data.get("reqtime") time_diff = frappe.utils.time_diff_in_seconds(request_time, last_timeout) if last_timeout else None if time_diff and time_diff < 0: frappe.throw(_("RequestID not Valid."))
def clear_all_jasper_reports(force=True): deleted = force compiled_removed = 0 emailed_removed = 0 #to every intern_reqid is one local_report_ or from server?(to check) tabReqids = frappe.db.sql( "select * from tabJasperReqids where reqid like 'intern_reqid_%'", as_dict=True) import ast from jasper_erpnext_report.utils.jasper_email import get_email_pdf_path for m in tabReqids: d = m.get('data') req = ast.literal_eval(d) reqId = req.get("reqids")[0][0] data = jaspersession_get_value(reqId) if not force: deleted = _f(data) if deleted: if "local_report_" not in reqId: continue intern_reqid = m.get("reqid") try: if not data: d = frappe.db.sql( "select * from tabJasperReqids where reqid='{0}'". format(reqId), as_dict=True) data = ast.literal_eval(d[0]['data']) file_path = data.get('result').get("uri").rsplit("/", 1) compiled_path = file_path[0] remove_directory(compiled_path) compiled_removed += 1 #if this report was not sent by email then remove it from assets/jasper_erpnext_report/reports/ urlemails = frappe.db.sql( """select count(*) from `tabJasper Email Report` where jasper_report_path like '%{0}%'""" .format(intern_reqid)) if urlemails[0][0] == 0: report_name = data.get("report_name").get("data").get( "report_name") site = req.get("site") path = get_email_pdf_path(report_name, intern_reqid, site) remove_directory(path) emailed_removed += 1 except: print _("Path does not exist!") frappe.cache().delete_value("jasper:" + reqId) frappe.cache().delete_value("jasper:" + intern_reqid) frappe.db.sql( """delete from tabJasperReqids where reqid in ('%s', '%s')""" % (reqId, intern_reqid)) frappe.db.commit() if compiled_removed > 0: print _( "Was removed {0} file(s) from compiled path and {1} file(s) from reports path (emailed only)." .format(compiled_removed, emailed_removed)) else: #print _("No file was removed.") print "No file was removed."