예제 #1
0
	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 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 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."))
예제 #6
0
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
예제 #8
0
	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)
예제 #9
0
	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)
예제 #10
0
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 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
예제 #13
0
    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
예제 #14
0
    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."