Skip to content

Activity Date: attr_active_end ends with the given date at 00:00:00 #3

Description

@drfho

The latest Change (12/2021) on _objattr.isActive()

ZMS3/_objattrs.py

Lines 748 to 794 in 95f5905

# --------------------------------------------------------------------------
# ObjAttrs.isActive:
# --------------------------------------------------------------------------
def isActive(self, REQUEST):
b = True
if self.getType()=='ZMSRecordSet':
return b
v = self.attr('active')
if type(v) is bool:
return v
v = self.attr('isActive')
if type(v) is bool:
b = b and v
obj_vers = self.getObjVersion(REQUEST)
obj_attrs = self.getObjAttrs()
now = datetime.datetime.now()
for key in ['active', 'attr_active_start', 'attr_active_end']:
if obj_attrs.has_key(key):
obj_attr = obj_attrs[key]
lang = self.get_request_context(REQUEST, 'lang', self.getPrimaryLanguage())
while True:
value = self._getObjAttrValue(obj_attr, obj_vers, lang)
empty = False
lang = self.getParentLanguage(lang)
if lang is not None:
empty = value is None
if not empty:
break
# Toggle.
if key == 'active':
b = b and value
# Start time.
elif key == 'attr_active_start':
if value is not None:
dt = datetime.datetime.fromtimestamp(time.mktime(value))
b = b and now > dt
if dt > now and self.REQUEST.get('ZMS_CACHE_EXPIRE_DATETIME', dt) >= dt:
self.REQUEST.set('ZMS_CACHE_EXPIRE_DATETIME',dt)
# End time.
elif key == 'attr_active_end':
if value is not None:
dt = datetime.datetime.fromtimestamp(time.mktime(value))
b = b and dt > now
if dt > now and self.REQUEST.get('ZMS_CACHE_EXPIRE_DATETIME', dt) >= dt:
self.REQUEST.set('ZMS_CACHE_EXPIRE_DATETIME',dt)
if not b: break
return b

was a ZMS5-backport that was introduced in 2020 to allow a preview_time_travel to check activity-controlled content changes in time and providing a way to explicit http header cache control by the request variable ZMS_CACHE_EXPIRE_DATETIME :
https://github.com/zms-publishing/ZMS/blob/main/docs/develop_api_exampels_en.md#4-set_response_headers_cache
According to the wishes of some extensive users the content timing (caching) should be precise in time and not just daily intervals like before:

dt.isFuture() or (dt.equalTo(dt.earliestTime()) and dt.latestTime().isFuture())

As a side effect, now, an activity-ending date has to be given cannot be given as date, exp: 01.02.2022, because this is considered as
01.02.2022 00:00:00
but as datetime. exp:
01.02.2022 23:59:59

attr_active_end

attr_active_en_oldd

n

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions