Skip to content

Commit

Permalink
feat: Deprecate datetime.utcnow() in favor of datetime.now(timezone.u…
Browse files Browse the repository at this point in the history
…tc).replace(tzinfo=None) for better timezone handling (#3408) (#3416)
  • Loading branch information
pamaforce committed Apr 12, 2024
1 parent 4d54637 commit c227f3d
Show file tree
Hide file tree
Showing 32 changed files with 112 additions and 112 deletions.
4 changes: 2 additions & 2 deletions api/controllers/console/app/conversation.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone

import pytz
from flask_login import current_user
Expand Down Expand Up @@ -262,7 +262,7 @@ def _get_conversation(app_model, conversation_id):
raise NotFound("Conversation Not Exists.")

if not conversation.read_at:
conversation.read_at = datetime.utcnow()
conversation.read_at = datetime.now(timezone.utc).replace(tzinfo=None)
conversation.read_account_id = current_user.id
db.session.commit()

Expand Down
4 changes: 2 additions & 2 deletions api/controllers/console/auth/activate.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import base64
import datetime
import secrets
from datetime import datetime

from flask_restful import Resource, reqparse

Expand Down Expand Up @@ -66,7 +66,7 @@ def post(self):
account.timezone = args['timezone']
account.interface_theme = 'light'
account.status = AccountStatus.ACTIVE.value
account.initialized_at = datetime.utcnow()
account.initialized_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.commit()

return {'result': 'success'}
Expand Down
4 changes: 2 additions & 2 deletions api/controllers/console/auth/oauth.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from datetime import datetime
from datetime import datetime, timezone
from typing import Optional

import requests
Expand Down Expand Up @@ -73,7 +73,7 @@ def get(self, provider: str):

if account.status == AccountStatus.PENDING.value:
account.status = AccountStatus.ACTIVE.value
account.initialized_at = datetime.utcnow()
account.initialized_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

TenantService.create_owner_tenant_if_not_exist(account)
Expand Down
4 changes: 2 additions & 2 deletions api/controllers/console/datasets/data_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def patch(self, binding_id, action):
if action == 'enable':
if data_source_binding.disabled:
data_source_binding.disabled = False
data_source_binding.updated_at = datetime.datetime.utcnow()
data_source_binding.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.add(data_source_binding)
db.session.commit()
else:
Expand All @@ -89,7 +89,7 @@ def patch(self, binding_id, action):
if action == 'disable':
if not data_source_binding.disabled:
data_source_binding.disabled = True
data_source_binding.updated_at = datetime.datetime.utcnow()
data_source_binding.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.add(data_source_binding)
db.session.commit()
else:
Expand Down
18 changes: 9 additions & 9 deletions api/controllers/console/datasets/datasets_document.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone

from flask import request
from flask_login import current_user
Expand Down Expand Up @@ -637,7 +637,7 @@ def patch(self, dataset_id, document_id, action):
raise InvalidActionError('Document not in indexing state.')

document.paused_by = current_user.id
document.paused_at = datetime.utcnow()
document.paused_at = datetime.now(timezone.utc).replace(tzinfo=None)
document.is_paused = True
db.session.commit()

Expand Down Expand Up @@ -717,7 +717,7 @@ def put(self, dataset_id, document_id):
document.doc_metadata[key] = value

document.doc_type = doc_type
document.updated_at = datetime.utcnow()
document.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

return {'result': 'success', 'message': 'Document metadata updated.'}, 200
Expand Down Expand Up @@ -755,7 +755,7 @@ def patch(self, dataset_id, document_id, action):
document.enabled = True
document.disabled_at = None
document.disabled_by = None
document.updated_at = datetime.utcnow()
document.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

# Set cache to prevent indexing the same document multiple times
Expand All @@ -772,9 +772,9 @@ def patch(self, dataset_id, document_id, action):
raise InvalidActionError('Document already disabled.')

document.enabled = False
document.disabled_at = datetime.utcnow()
document.disabled_at = datetime.now(timezone.utc).replace(tzinfo=None)
document.disabled_by = current_user.id
document.updated_at = datetime.utcnow()
document.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

# Set cache to prevent indexing the same document multiple times
Expand All @@ -789,9 +789,9 @@ def patch(self, dataset_id, document_id, action):
raise InvalidActionError('Document already archived.')

document.archived = True
document.archived_at = datetime.utcnow()
document.archived_at = datetime.now(timezone.utc).replace(tzinfo=None)
document.archived_by = current_user.id
document.updated_at = datetime.utcnow()
document.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

if document.enabled:
Expand All @@ -808,7 +808,7 @@ def patch(self, dataset_id, document_id, action):
document.archived = False
document.archived_at = None
document.archived_by = None
document.updated_at = datetime.utcnow()
document.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

# Set cache to prevent indexing the same document multiple times
Expand Down
4 changes: 2 additions & 2 deletions api/controllers/console/datasets/datasets_segments.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import uuid
from datetime import datetime
from datetime import datetime, timezone

import pandas as pd
from flask import request
Expand Down Expand Up @@ -192,7 +192,7 @@ def patch(self, dataset_id, segment_id, action):
raise InvalidActionError("Segment is already disabled.")

segment.enabled = False
segment.disabled_at = datetime.utcnow()
segment.disabled_at = datetime.now(timezone.utc).replace(tzinfo=None)
segment.disabled_by = current_user.id
db.session.commit()

Expand Down
6 changes: 3 additions & 3 deletions api/controllers/console/explore/completion.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import logging
from datetime import datetime
from datetime import datetime, timezone

from flask_login import current_user
from flask_restful import reqparse
Expand Down Expand Up @@ -47,7 +47,7 @@ def post(self, installed_app):
streaming = args['response_mode'] == 'streaming'
args['auto_generate_name'] = False

installed_app.last_used_at = datetime.utcnow()
installed_app.last_used_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

try:
Expand Down Expand Up @@ -110,7 +110,7 @@ def post(self, installed_app):

args['auto_generate_name'] = False

installed_app.last_used_at = datetime.utcnow()
installed_app.last_used_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

try:
Expand Down
4 changes: 2 additions & 2 deletions api/controllers/console/explore/installed_app.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import datetime
from datetime import datetime, timezone

from flask_login import current_user
from flask_restful import Resource, inputs, marshal_with, reqparse
Expand Down Expand Up @@ -81,7 +81,7 @@ def post(self):
tenant_id=current_tenant_id,
app_owner_tenant_id=app.tenant_id,
is_pinned=False,
last_used_at=datetime.utcnow()
last_used_at=datetime.now(timezone.utc).replace(tzinfo=None)
)
db.session.add(new_installed_app)
db.session.commit()
Expand Down
6 changes: 3 additions & 3 deletions api/controllers/console/workspace/account.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from datetime import datetime
import datetime

import pytz
from flask import current_app, request
Expand Down Expand Up @@ -59,15 +59,15 @@ def post(self):
raise InvalidInvitationCodeError()

invitation_code.status = 'used'
invitation_code.used_at = datetime.utcnow()
invitation_code.used_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
invitation_code.used_by_tenant_id = account.current_tenant_id
invitation_code.used_by_account_id = account.id

account.interface_language = args['interface_language']
account.timezone = args['timezone']
account.interface_theme = 'light'
account.status = 'active'
account.initialized_at = datetime.utcnow()
account.initialized_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.commit()

return {'result': 'success'}
Expand Down
4 changes: 2 additions & 2 deletions api/controllers/service_api/wraps.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from collections.abc import Callable
from datetime import datetime
from datetime import datetime, timezone
from enum import Enum
from functools import wraps
from typing import Optional
Expand Down Expand Up @@ -183,7 +183,7 @@ def validate_and_get_api_token(scope=None):
if not api_token:
raise Unauthorized("Access token is invalid")

api_token.last_used_at = datetime.utcnow()
api_token.last_used_at = datetime.now(timezone.utc).replace(tzinfo=None)
db.session.commit()

return api_token
Expand Down
4 changes: 2 additions & 2 deletions api/core/agent/base_agent_runner.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json
import logging
import uuid
from datetime import datetime
from datetime import datetime, timezone
from typing import Optional, Union, cast

from core.agent.entities import AgentEntity, AgentToolEntity
Expand Down Expand Up @@ -440,7 +440,7 @@ def update_db_variables(self, tool_variables: ToolRuntimeVariablePool, db_variab
ToolConversationVariables.conversation_id == self.message.conversation_id,
).first()

db_variables.updated_at = datetime.utcnow()
db_variables.updated_at = datetime.now(timezone.utc).replace(tzinfo=None)
db_variables.variables_str = json.dumps(jsonable_encoder(tool_variables.pool))
db.session.commit()
db.session.close()
Expand Down
10 changes: 5 additions & 5 deletions api/core/app/task_pipeline/workflow_cycle_manage.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import json
import time
from datetime import datetime
from datetime import datetime, timezone
from typing import Any, Optional, Union, cast

from core.app.entities.app_invoke_entities import AdvancedChatAppGenerateEntity, InvokeFrom, WorkflowAppGenerateEntity
Expand Down Expand Up @@ -120,7 +120,7 @@ def _workflow_run_success(self, workflow_run: WorkflowRun,
workflow_run.elapsed_time = time.perf_counter() - start_at
workflow_run.total_tokens = total_tokens
workflow_run.total_steps = total_steps
workflow_run.finished_at = datetime.utcnow()
workflow_run.finished_at = datetime.now(timezone.utc).replace(tzinfo=None)

db.session.commit()
db.session.refresh(workflow_run)
Expand Down Expand Up @@ -149,7 +149,7 @@ def _workflow_run_failed(self, workflow_run: WorkflowRun,
workflow_run.elapsed_time = time.perf_counter() - start_at
workflow_run.total_tokens = total_tokens
workflow_run.total_steps = total_steps
workflow_run.finished_at = datetime.utcnow()
workflow_run.finished_at = datetime.now(timezone.utc).replace(tzinfo=None)

db.session.commit()
db.session.refresh(workflow_run)
Expand Down Expand Up @@ -223,7 +223,7 @@ def _workflow_node_execution_success(self, workflow_node_execution: WorkflowNode
workflow_node_execution.outputs = json.dumps(outputs) if outputs else None
workflow_node_execution.execution_metadata = json.dumps(jsonable_encoder(execution_metadata)) \
if execution_metadata else None
workflow_node_execution.finished_at = datetime.utcnow()
workflow_node_execution.finished_at = datetime.now(timezone.utc).replace(tzinfo=None)

db.session.commit()
db.session.refresh(workflow_node_execution)
Expand Down Expand Up @@ -251,7 +251,7 @@ def _workflow_node_execution_failed(self, workflow_node_execution: WorkflowNodeE
workflow_node_execution.status = WorkflowNodeExecutionStatus.FAILED.value
workflow_node_execution.error = error
workflow_node_execution.elapsed_time = time.perf_counter() - start_at
workflow_node_execution.finished_at = datetime.utcnow()
workflow_node_execution.finished_at = datetime.now(timezone.utc).replace(tzinfo=None)
workflow_node_execution.inputs = json.dumps(inputs) if inputs else None
workflow_node_execution.process_data = json.dumps(process_data) if process_data else None
workflow_node_execution.outputs = json.dumps(outputs) if outputs else None
Expand Down
4 changes: 2 additions & 2 deletions api/core/entities/provider_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ def add_or_update_custom_credentials(self, credentials: dict) -> None:
if provider_record:
provider_record.encrypted_config = json.dumps(credentials)
provider_record.is_valid = True
provider_record.updated_at = datetime.datetime.utcnow()
provider_record.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.commit()
else:
provider_record = Provider(
Expand Down Expand Up @@ -351,7 +351,7 @@ def add_or_update_custom_model_credentials(self, model_type: ModelType, model: s
if provider_model_record:
provider_model_record.encrypted_config = json.dumps(credentials)
provider_model_record.is_valid = True
provider_model_record.updated_at = datetime.datetime.utcnow()
provider_model_record.updated_at = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
db.session.commit()
else:
provider_model_record = ProviderModel(
Expand Down
Loading

0 comments on commit c227f3d

Please sign in to comment.