Skip to content

Commit

Permalink
fix(task): 修复任务对象的时间记录问题
Browse files Browse the repository at this point in the history
- 删除数据更新行为的自动拦截,更新时间操作交给外部处理 entity.py
- 调整任务验证器的判断逻辑 validator.py
- 任务执行是自动更新对象中的更新时间 task.py

Signed-off-by: LeoTan2004 <[email protected]>
  • Loading branch information
LeoTan2004 committed Nov 24, 2024
1 parent d2a3fa8 commit ece5c2e
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 20 deletions.
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
-r requirements.ems.txt
fastapi~=0.115.2
uvicorn
colorlog
20 changes: 7 additions & 13 deletions src/plat/service/entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,25 @@ class TimedEntity:
"""时间类型的实体类"""

def __init__(self, data=None):
self.__dict__['data'] = data
self.__dict__['create_time'] = datetime.now()
self.__dict__['update_time'] = None
self.data = data
self.create_time = datetime.now()
self.update_time = None

def __setattr__(self, key, value):
"""拦截所有属性的设置,更新更新时间为当前时间"""
self.__dict__['update_time'] = datetime.now()
self.__dict__[key] = value

def set_without_update(self, key, value):
"""不更新更新时间"""
def update(self, key, value):
self.__dict__[key] = value
self.update_time = datetime.now()


class TaskEntity(TimedEntity):
"""任务类型的实体类"""

def __init__(self, data=None):
super().__init__(data)
self.__dict__['data'] = data
self.__dict__['submit_time'] = datetime.now()
self.submit_time = None

def on_submit_task(self):
"""当提交任务,更新提交时间为当前时间"""
self.__dict__['submit_time'] = datetime.now()
self.submit_time = datetime.now()


class AccountStatus(Enum):
Expand Down
2 changes: 1 addition & 1 deletion src/plat/service/task.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ async def __call__(self, *args, **kwargs):
# 更新数据
former_record: TaskEntity = ((await self.storage.async_get_item(self.key))
or TaskEntity())
former_record.data = result
former_record.update(key='data', value=result)
await self.storage.async_set_item(self.key, former_record)
return result
return None
Expand Down
13 changes: 7 additions & 6 deletions src/plat/service/validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,11 @@ def __init__(self, update_expire: timedelta, submit_expire: timedelta):
self.submit_expire: timedelta = submit_expire

def validate(self, item: TaskEntity) -> bool:
if item is not None and hasattr(item, 'update_time') and hasattr(item, 'submit_time'):
now = datetime.now()
# 更新时间超出并且提交时间也超出才认为数据过期,需要重新获取
return not (now - item.update_time > self.update_expire and
now - item.submit_time > self.submit_expire)
else:
if item is None:
return False
now = datetime.now()
if item.submit_time and now - item.submit_time > self.submit_expire:
# 如果任务已经提交,并且提交时间超过了限制,那么认为任务已经过期,可以检查数据是否更新
# 此时如果数据更新了,且在有效范围内,则通过验证
return item.update_time and now - item.update_time < self.update_expire
return True

0 comments on commit ece5c2e

Please sign in to comment.