Techdebt: Improve date handling across Moto (#6803)
This commit is contained in:
parent
b7efcdde6f
commit
60fd1a5cf2
@ -2,6 +2,7 @@ import base64
|
||||
import re
|
||||
import datetime
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto import settings
|
||||
from typing import Any, Dict, List, Iterable, Optional, Tuple, Set
|
||||
|
||||
@ -122,7 +123,7 @@ class CertBundle(BaseModel):
|
||||
cert_type: str = "IMPORTED",
|
||||
cert_status: str = "ISSUED",
|
||||
):
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
self.cert = certificate
|
||||
self.key = private_key
|
||||
# AWS always returns your chain + root CA
|
||||
@ -192,8 +193,8 @@ class CertBundle(BaseModel):
|
||||
.issuer_name(issuer)
|
||||
.public_key(key.public_key())
|
||||
.serial_number(cryptography.x509.random_serial_number())
|
||||
.not_valid_before(datetime.datetime.utcnow())
|
||||
.not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365))
|
||||
.not_valid_before(utcnow())
|
||||
.not_valid_after(utcnow() + datetime.timedelta(days=365))
|
||||
.add_extension(
|
||||
cryptography.x509.SubjectAlternativeName(unique_dns_names),
|
||||
critical=False,
|
||||
@ -235,7 +236,7 @@ class CertBundle(BaseModel):
|
||||
self.cert, default_backend()
|
||||
)
|
||||
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
if _cert.not_valid_after < now:
|
||||
raise AWSValidationException(
|
||||
"The certificate has expired, is not valid."
|
||||
@ -264,7 +265,7 @@ class CertBundle(BaseModel):
|
||||
cert_armored, default_backend()
|
||||
)
|
||||
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
if self._cert.not_valid_after < now:
|
||||
raise AWSValidationException(
|
||||
"The certificate chain has expired, is not valid."
|
||||
@ -286,7 +287,7 @@ class CertBundle(BaseModel):
|
||||
# Basically, if the certificate is pending, and then checked again after a
|
||||
# while, it will appear as if its been validated. The default wait time is 60
|
||||
# seconds but you can set an environment to change it.
|
||||
waited_seconds = (datetime.datetime.utcnow() - self.created_at).total_seconds()
|
||||
waited_seconds = (utcnow() - self.created_at).total_seconds()
|
||||
if (
|
||||
self.type == "AMAZON_ISSUED"
|
||||
and self.status == "PENDING_VALIDATION"
|
||||
@ -414,7 +415,7 @@ class AWSCertificateManagerBackend(BaseBackend):
|
||||
:param token: String token
|
||||
:return: None or ARN
|
||||
"""
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
if token in self._idempotency_tokens:
|
||||
if self._idempotency_tokens[token]["expires"] < now:
|
||||
# Token has expired, new request
|
||||
@ -428,7 +429,7 @@ class AWSCertificateManagerBackend(BaseBackend):
|
||||
def _set_idempotency_token_arn(self, token: str, arn: str) -> None:
|
||||
self._idempotency_tokens[token] = {
|
||||
"arn": arn,
|
||||
"expires": datetime.datetime.utcnow() + datetime.timedelta(hours=1),
|
||||
"expires": utcnow() + datetime.timedelta(hours=1),
|
||||
}
|
||||
|
||||
def import_cert(
|
||||
|
@ -2,7 +2,7 @@
|
||||
import base64
|
||||
from .exceptions import ResourceNotFoundException
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal import mock_random
|
||||
from moto.utilities.tagging_service import TaggingService
|
||||
|
||||
@ -78,8 +78,8 @@ class CertificateAuthority(BaseModel):
|
||||
.issuer_name(issuer)
|
||||
.public_key(self.key.public_key())
|
||||
.serial_number(cryptography.x509.random_serial_number())
|
||||
.not_valid_before(datetime.datetime.utcnow())
|
||||
.not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=365))
|
||||
.not_valid_before(utcnow())
|
||||
.not_valid_after(utcnow() + datetime.timedelta(days=365))
|
||||
.sign(self.key, hashes.SHA512(), default_backend())
|
||||
)
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
import datetime
|
||||
|
||||
from moto.core.responses import BaseResponse
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.utilities.aws_headers import amz_crc32, amzn_request_id
|
||||
@ -399,7 +397,7 @@ class AutoScalingResponse(BaseResponse):
|
||||
should_decrement=should_decrement,
|
||||
original_size=original_size,
|
||||
desired_capacity=desired_capacity,
|
||||
timestamp=iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow()),
|
||||
timestamp=iso_8601_datetime_with_milliseconds(),
|
||||
)
|
||||
|
||||
@amz_crc32
|
||||
@ -417,7 +415,7 @@ class AutoScalingResponse(BaseResponse):
|
||||
standby_instances=standby_instances,
|
||||
original_size=original_size,
|
||||
desired_capacity=desired_capacity,
|
||||
timestamp=iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow()),
|
||||
timestamp=iso_8601_datetime_with_milliseconds(),
|
||||
)
|
||||
|
||||
def suspend_processes(self) -> str:
|
||||
@ -468,7 +466,7 @@ class AutoScalingResponse(BaseResponse):
|
||||
should_decrement=should_decrement,
|
||||
original_size=original_size,
|
||||
desired_capacity=desired_capacity,
|
||||
timestamp=iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow()),
|
||||
timestamp=iso_8601_datetime_with_milliseconds(),
|
||||
)
|
||||
|
||||
def describe_tags(self) -> str:
|
||||
|
@ -26,7 +26,7 @@ import requests.exceptions
|
||||
from moto.awslambda.policy import Policy
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.exceptions import RESTError
|
||||
from moto.core.utils import unix_time_millis, iso_8601_datetime_with_nanoseconds
|
||||
from moto.core.utils import unix_time_millis, iso_8601_datetime_with_nanoseconds, utcnow
|
||||
from moto.iam.models import iam_backends
|
||||
from moto.iam.exceptions import IAMNotFoundException
|
||||
from moto.ecr.exceptions import ImageNotFoundException
|
||||
@ -65,7 +65,7 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
def zip2tar(zip_bytes: bytes) -> io.BytesIO:
|
||||
tarstream = io.BytesIO()
|
||||
timeshift = int((datetime.now() - datetime.utcnow()).total_seconds())
|
||||
timeshift = int((datetime.now() - utcnow()).total_seconds())
|
||||
tarf = tarfile.TarFile(fileobj=tarstream, mode="w")
|
||||
with zipfile.ZipFile(io.BytesIO(zip_bytes), "r") as zipf:
|
||||
for zipinfo in zipf.infolist():
|
||||
@ -334,7 +334,7 @@ class LayerVersion(CloudFormationModel):
|
||||
self.license_info = spec.get("LicenseInfo", "")
|
||||
|
||||
# auto-generated
|
||||
self.created_date = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.created_date = utcnow().strftime("%Y-%m-%d %H:%M:%S")
|
||||
self.version: Optional[int] = None
|
||||
self._attached = False
|
||||
self._layer: Optional["Layer"] = None
|
||||
@ -555,7 +555,7 @@ class LambdaFunction(CloudFormationModel, DockerModel):
|
||||
|
||||
# auto-generated
|
||||
self.version = version
|
||||
self.last_modified = iso_8601_datetime_with_nanoseconds(datetime.utcnow())
|
||||
self.last_modified = iso_8601_datetime_with_nanoseconds()
|
||||
|
||||
self._set_function_code(self.code)
|
||||
|
||||
@ -577,7 +577,7 @@ class LambdaFunction(CloudFormationModel, DockerModel):
|
||||
self.region, self.account_id, self.function_name, version
|
||||
)
|
||||
self.version = version
|
||||
self.last_modified = iso_8601_datetime_with_nanoseconds(datetime.utcnow())
|
||||
self.last_modified = iso_8601_datetime_with_nanoseconds()
|
||||
|
||||
@property
|
||||
def architectures(self) -> List[str]:
|
||||
@ -964,7 +964,7 @@ class LambdaFunction(CloudFormationModel, DockerModel):
|
||||
def save_logs(self, output: str) -> None:
|
||||
# Send output to "logs" backend
|
||||
invoke_id = random.uuid4().hex
|
||||
date = datetime.utcnow()
|
||||
date = utcnow()
|
||||
log_stream_name = (
|
||||
f"{date.year}/{date.month:02d}/{date.day:02d}/[{self.version}]{invoke_id}"
|
||||
)
|
||||
@ -1118,7 +1118,7 @@ class FunctionUrlConfig:
|
||||
self.function = function
|
||||
self.config = config
|
||||
self.url = f"https://{random.uuid4().hex}.lambda-url.{function.region}.on.aws"
|
||||
self.created = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.000+0000")
|
||||
self.created = utcnow().strftime("%Y-%m-%dT%H:%M:%S.000+0000")
|
||||
self.last_modified = self.created
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
@ -1137,7 +1137,7 @@ class FunctionUrlConfig:
|
||||
self.config["Cors"] = new_config["Cors"]
|
||||
if new_config.get("AuthType"):
|
||||
self.config["AuthType"] = new_config["AuthType"]
|
||||
self.last_modified = datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S")
|
||||
self.last_modified = utcnow().strftime("%Y-%m-%dT%H:%M:%S")
|
||||
|
||||
|
||||
class EventSourceMapping(CloudFormationModel):
|
||||
@ -1154,7 +1154,7 @@ class EventSourceMapping(CloudFormationModel):
|
||||
|
||||
self.function_arn = spec["FunctionArn"]
|
||||
self.uuid = str(random.uuid4())
|
||||
self.last_modified = time.mktime(datetime.utcnow().timetuple())
|
||||
self.last_modified = time.mktime(utcnow().timetuple())
|
||||
|
||||
def _get_service_source_from_arn(self, event_source_arn: str) -> str:
|
||||
return event_source_arn.split(":")[2].lower()
|
||||
@ -1887,7 +1887,7 @@ class LambdaBackend(BaseBackend):
|
||||
elif key == "Enabled":
|
||||
esm.enabled = spec[key]
|
||||
|
||||
esm.last_modified = time.mktime(datetime.utcnow().timetuple())
|
||||
esm.last_modified = time.mktime(utcnow().timetuple())
|
||||
return esm
|
||||
|
||||
def list_event_source_mappings(
|
||||
|
@ -11,6 +11,7 @@ from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.utils import (
|
||||
iso_8601_datetime_with_milliseconds,
|
||||
iso_8601_datetime_without_milliseconds,
|
||||
utcnow,
|
||||
)
|
||||
from moto.moto_api._internal import mock_random
|
||||
from moto.sns.models import sns_backends
|
||||
@ -407,7 +408,7 @@ class FakeStack(CloudFormationModel):
|
||||
self.custom_resources: Dict[str, CustomModel] = dict()
|
||||
|
||||
self.output_map = self._create_output_map()
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.status = "CREATE_PENDING"
|
||||
|
||||
def has_template(self, other_template: str) -> bool:
|
||||
@ -637,7 +638,7 @@ class FakeChangeSet(BaseModel):
|
||||
self.parameters = parameters
|
||||
self._parse_template()
|
||||
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.changes = self.diff()
|
||||
|
||||
self.status: Optional[str] = None
|
||||
@ -695,7 +696,7 @@ class FakeEvent(BaseModel):
|
||||
self.resource_status = resource_status
|
||||
self.resource_status_reason = resource_status_reason
|
||||
self.resource_properties = resource_properties
|
||||
self.timestamp = datetime.utcnow()
|
||||
self.timestamp = utcnow()
|
||||
self.event_id = mock_random.uuid4()
|
||||
self.client_request_token = None
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
import string
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Iterable, List, Tuple, Optional
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
@ -252,7 +251,7 @@ class Invalidation(BaseModel):
|
||||
self, distribution: Distribution, paths: Dict[str, Any], caller_ref: str
|
||||
):
|
||||
self.invalidation_id = Invalidation.random_id()
|
||||
self.create_time = iso_8601_datetime_with_milliseconds(datetime.now())
|
||||
self.create_time = iso_8601_datetime_with_milliseconds()
|
||||
self.distribution = distribution
|
||||
self.status = "COMPLETED"
|
||||
|
||||
|
@ -4,7 +4,7 @@ import time
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional, Iterable, Tuple
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow
|
||||
from moto.utilities.tagging_service import TaggingService
|
||||
from .exceptions import (
|
||||
S3BucketDoesNotExistException,
|
||||
@ -32,21 +32,19 @@ class TrailStatus:
|
||||
|
||||
def start_logging(self) -> None:
|
||||
self.is_logging = True
|
||||
self.started = datetime.utcnow()
|
||||
self.latest_delivery_time = datetime2int(datetime.utcnow())
|
||||
self.latest_delivery_attempt = iso_8601_datetime_without_milliseconds(
|
||||
datetime.utcnow()
|
||||
)
|
||||
self.started = utcnow()
|
||||
self.latest_delivery_time = datetime2int(utcnow())
|
||||
self.latest_delivery_attempt = iso_8601_datetime_without_milliseconds(utcnow())
|
||||
|
||||
def stop_logging(self) -> None:
|
||||
self.is_logging = False
|
||||
self.stopped = datetime.utcnow()
|
||||
self.stopped = utcnow()
|
||||
|
||||
def description(self) -> Dict[str, Any]:
|
||||
if self.is_logging:
|
||||
self.latest_delivery_time = datetime2int(datetime.utcnow())
|
||||
self.latest_delivery_time = datetime2int(utcnow())
|
||||
self.latest_delivery_attempt = iso_8601_datetime_without_milliseconds(
|
||||
datetime.utcnow()
|
||||
utcnow()
|
||||
)
|
||||
desc: Dict[str, Any] = {
|
||||
"IsLogging": self.is_logging,
|
||||
|
@ -4,6 +4,7 @@ from moto.core import BaseBackend, BackendDict, BaseModel, CloudWatchMetricProvi
|
||||
from moto.core.utils import (
|
||||
iso_8601_datetime_without_milliseconds,
|
||||
iso_8601_datetime_with_nanoseconds,
|
||||
utcnow,
|
||||
)
|
||||
from moto.moto_api._internal import mock_random
|
||||
from datetime import datetime, timedelta
|
||||
@ -158,9 +159,7 @@ class FakeAlarm(BaseModel):
|
||||
self.ok_actions = ok_actions
|
||||
self.insufficient_data_actions = insufficient_data_actions
|
||||
self.unit = unit
|
||||
self.configuration_updated_timestamp = iso_8601_datetime_with_nanoseconds(
|
||||
datetime.now(tz=tzutc())
|
||||
)
|
||||
self.configuration_updated_timestamp = iso_8601_datetime_with_nanoseconds()
|
||||
self.treat_missing_data = treat_missing_data
|
||||
self.evaluate_low_sample_count_percentile = evaluate_low_sample_count_percentile
|
||||
self.threshold_metric_id = threshold_metric_id
|
||||
@ -170,9 +169,7 @@ class FakeAlarm(BaseModel):
|
||||
self.state_reason = "Unchecked: Initial alarm creation"
|
||||
self.state_reason_data = "{}"
|
||||
self.state_value = "OK"
|
||||
self.state_updated_timestamp = iso_8601_datetime_with_nanoseconds(
|
||||
datetime.now(tz=tzutc())
|
||||
)
|
||||
self.state_updated_timestamp = iso_8601_datetime_with_nanoseconds()
|
||||
|
||||
# only used for composite alarms
|
||||
self.rule = rule
|
||||
@ -192,9 +189,7 @@ class FakeAlarm(BaseModel):
|
||||
self.state_reason = reason
|
||||
self.state_reason_data = reason_data
|
||||
self.state_value = state_value
|
||||
self.state_updated_timestamp = iso_8601_datetime_with_nanoseconds(
|
||||
datetime.now(tz=tzutc())
|
||||
)
|
||||
self.state_updated_timestamp = iso_8601_datetime_with_nanoseconds()
|
||||
|
||||
|
||||
def are_dimensions_same(
|
||||
@ -227,7 +222,7 @@ class MetricDatumBase(BaseModel):
|
||||
):
|
||||
self.namespace = namespace
|
||||
self.name = name
|
||||
self.timestamp = timestamp or datetime.utcnow().replace(tzinfo=tzutc())
|
||||
self.timestamp = timestamp or utcnow().replace(tzinfo=tzutc())
|
||||
self.dimensions = [
|
||||
Dimension(dimension["Name"], dimension["Value"]) for dimension in dimensions
|
||||
]
|
||||
@ -335,9 +330,7 @@ class Statistics:
|
||||
"""
|
||||
|
||||
def __init__(self, stats: List[str], dt: datetime, unit: Optional[str] = None):
|
||||
self.timestamp: str = (
|
||||
iso_8601_datetime_without_milliseconds(dt) or self.timestamp_iso_8601_now()
|
||||
)
|
||||
self.timestamp: str = iso_8601_datetime_without_milliseconds(dt or utcnow())
|
||||
self.metric_data: List[MetricDatumBase] = []
|
||||
self.stats = stats
|
||||
self.unit = unit
|
||||
@ -437,9 +430,6 @@ class Statistics:
|
||||
[s.sum for s in self.metric_aggregated_list]
|
||||
)
|
||||
|
||||
def timestamp_iso_8601_now(self) -> str:
|
||||
return iso_8601_datetime_without_milliseconds(datetime.now()) # type: ignore[return-value]
|
||||
|
||||
|
||||
class CloudWatchBackend(BaseBackend):
|
||||
def __init__(self, region_name: str, account_id: str):
|
||||
|
@ -18,7 +18,7 @@ class CodeBuildProjectMetadata(BaseModel):
|
||||
build_id: str,
|
||||
service_role: str,
|
||||
):
|
||||
current_date = iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow())
|
||||
current_date = iso_8601_datetime_with_milliseconds()
|
||||
self.build_metadata: Dict[str, Any] = dict()
|
||||
|
||||
self.build_metadata["id"] = build_id
|
||||
@ -99,7 +99,7 @@ class CodeBuild(BaseModel):
|
||||
environment: Dict[str, Any],
|
||||
serviceRole: str = "some_role",
|
||||
):
|
||||
current_date = iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow())
|
||||
current_date = iso_8601_datetime_with_milliseconds()
|
||||
self.project_metadata: Dict[str, Any] = dict()
|
||||
|
||||
self.project_metadata["name"] = project_name
|
||||
@ -201,7 +201,7 @@ class CodeBuildBackend(BaseBackend):
|
||||
return self.build_metadata[project_name].build_metadata
|
||||
|
||||
def _set_phases(self, phases: List[Dict[str, Any]]) -> List[Dict[str, Any]]:
|
||||
current_date = iso_8601_datetime_with_milliseconds(datetime.datetime.utcnow())
|
||||
current_date = iso_8601_datetime_with_milliseconds()
|
||||
# No phaseStatus for QUEUED on first start
|
||||
for existing_phase in phases:
|
||||
if existing_phase["phaseType"] == "QUEUED":
|
||||
|
@ -1,7 +1,6 @@
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.moto_api._internal import mock_random
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
from .exceptions import RepositoryDoesNotExistException, RepositoryNameExistsException
|
||||
|
||||
@ -14,7 +13,7 @@ class CodeCommit(BaseModel):
|
||||
repository_description: str,
|
||||
repository_name: str,
|
||||
):
|
||||
current_date = iso_8601_datetime_with_milliseconds(datetime.utcnow())
|
||||
current_date = iso_8601_datetime_with_milliseconds()
|
||||
self.repository_metadata = dict()
|
||||
self.repository_metadata["repositoryName"] = repository_name
|
||||
self.repository_metadata[
|
||||
|
@ -1,7 +1,6 @@
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Tuple
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.iam.exceptions import IAMNotFoundException
|
||||
from moto.iam.models import iam_backends, IAMBackend
|
||||
|
||||
@ -24,8 +23,8 @@ class CodePipeline(BaseModel):
|
||||
self.tags: Dict[str, str] = {}
|
||||
|
||||
self._arn = f"arn:aws:codepipeline:{region}:{account_id}:{pipeline['name']}"
|
||||
self._created = datetime.utcnow()
|
||||
self._updated = datetime.utcnow()
|
||||
self._created = utcnow()
|
||||
self._updated = utcnow()
|
||||
|
||||
@property
|
||||
def metadata(self) -> Dict[str, str]:
|
||||
@ -143,7 +142,7 @@ class CodePipelineBackend(BaseBackend):
|
||||
|
||||
# version number is auto incremented
|
||||
pipeline["version"] = codepipeline.pipeline["version"] + 1
|
||||
codepipeline._updated = datetime.utcnow()
|
||||
codepipeline._updated = utcnow()
|
||||
codepipeline.pipeline = codepipeline.add_default_values(pipeline)
|
||||
|
||||
return codepipeline.pipeline
|
||||
|
@ -5,7 +5,7 @@ import re
|
||||
from collections import OrderedDict
|
||||
from typing import Any, Dict, List, Optional
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from .exceptions import InvalidNameException, ResourceNotFoundError
|
||||
from .utils import get_random_identity_id
|
||||
|
||||
@ -29,7 +29,7 @@ class CognitoIdentityPool(BaseModel):
|
||||
self.saml_provider_arns = kwargs.get("saml_provider_arns", [])
|
||||
|
||||
self.identity_pool_id = get_random_identity_id(region)
|
||||
self.creation_time = datetime.datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
|
||||
self.tags = kwargs.get("tags") or {}
|
||||
|
||||
@ -137,7 +137,7 @@ class CognitoIdentityBackend(BaseBackend):
|
||||
|
||||
def get_credentials_for_identity(self, identity_id: str) -> str:
|
||||
duration = 90
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
expiration = now + datetime.timedelta(seconds=duration)
|
||||
expiration_str = str(iso_8601_datetime_with_milliseconds(expiration))
|
||||
return json.dumps(
|
||||
|
@ -9,6 +9,7 @@ from jose import jws
|
||||
from collections import OrderedDict
|
||||
from typing import Any, Dict, List, Tuple, Optional, Set
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from .exceptions import (
|
||||
AliasExistsException,
|
||||
@ -415,8 +416,8 @@ class CognitoIdpUserPool(BaseModel):
|
||||
"EmailMessage"
|
||||
)
|
||||
|
||||
self.creation_date = datetime.datetime.utcnow()
|
||||
self.last_modified_date = datetime.datetime.utcnow()
|
||||
self.creation_date = utcnow()
|
||||
self.last_modified_date = utcnow()
|
||||
|
||||
self.mfa_config = "OFF"
|
||||
self.sms_mfa_config: Optional[Dict[str, Any]] = None
|
||||
@ -711,8 +712,8 @@ class CognitoIdpIdentityProvider(BaseModel):
|
||||
def __init__(self, name: str, extended_config: Optional[Dict[str, Any]]):
|
||||
self.name = name
|
||||
self.extended_config = extended_config or {}
|
||||
self.creation_date = datetime.datetime.utcnow()
|
||||
self.last_modified_date = datetime.datetime.utcnow()
|
||||
self.creation_date = utcnow()
|
||||
self.last_modified_date = utcnow()
|
||||
|
||||
if "AttributeMapping" not in self.extended_config:
|
||||
self.extended_config["AttributeMapping"] = {"username": "sub"}
|
||||
@ -799,8 +800,8 @@ class CognitoIdpUser(BaseModel):
|
||||
self.enabled = True
|
||||
self.attributes = attributes
|
||||
self.attribute_lookup = flatten_attrs(attributes)
|
||||
self.create_date = datetime.datetime.utcnow()
|
||||
self.last_modified_date = datetime.datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.last_modified_date = utcnow()
|
||||
self.sms_mfa_enabled = False
|
||||
self.software_token_mfa_enabled = False
|
||||
self.token_verified = False
|
||||
|
@ -53,6 +53,7 @@ from moto.config.exceptions import (
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.common_models import ConfigQueryModel
|
||||
from moto.core.responses import AWSServiceSpec
|
||||
from moto.core.utils import utcnow
|
||||
from moto.iam.config import role_config_query, policy_config_query
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from moto.s3.config import s3_config_query
|
||||
@ -238,13 +239,13 @@ class ConfigRecorderStatus(ConfigEmptyDictable):
|
||||
def start(self) -> None:
|
||||
self.recording = True
|
||||
self.last_status = "PENDING"
|
||||
self.last_start_time = datetime2int(datetime.utcnow())
|
||||
self.last_status_change_time = datetime2int(datetime.utcnow())
|
||||
self.last_start_time = datetime2int(utcnow())
|
||||
self.last_status_change_time = datetime2int(utcnow())
|
||||
|
||||
def stop(self) -> None:
|
||||
self.recording = False
|
||||
self.last_stop_time = datetime2int(datetime.utcnow())
|
||||
self.last_status_change_time = datetime2int(datetime.utcnow())
|
||||
self.last_stop_time = datetime2int(utcnow())
|
||||
self.last_status_change_time = datetime2int(utcnow())
|
||||
|
||||
|
||||
class ConfigDeliverySnapshotProperties(ConfigEmptyDictable):
|
||||
@ -404,8 +405,8 @@ class ConfigAggregator(ConfigEmptyDictable):
|
||||
self.configuration_aggregator_arn = f"arn:aws:config:{region}:{account_id}:config-aggregator/config-aggregator-{random_string()}"
|
||||
self.account_aggregation_sources = account_sources
|
||||
self.organization_aggregation_source = org_source
|
||||
self.creation_time = datetime2int(datetime.utcnow())
|
||||
self.last_updated_time = datetime2int(datetime.utcnow())
|
||||
self.creation_time = datetime2int(utcnow())
|
||||
self.last_updated_time = datetime2int(utcnow())
|
||||
|
||||
# Tags are listed in the list_tags_for_resource API call.
|
||||
self.tags = tags or {}
|
||||
@ -442,7 +443,7 @@ class ConfigAggregationAuthorization(ConfigEmptyDictable):
|
||||
self.aggregation_authorization_arn = f"arn:aws:config:{current_region}:{account_id}:aggregation-authorization/{authorized_account_id}/{authorized_aws_region}"
|
||||
self.authorized_account_id = authorized_account_id
|
||||
self.authorized_aws_region = authorized_aws_region
|
||||
self.creation_time = datetime2int(datetime.utcnow())
|
||||
self.creation_time = datetime2int(utcnow())
|
||||
|
||||
# Tags are listed in the list_tags_for_resource API call.
|
||||
self.tags = tags or {}
|
||||
@ -468,7 +469,7 @@ class OrganizationConformancePack(ConfigEmptyDictable):
|
||||
self.delivery_s3_bucket = delivery_s3_bucket
|
||||
self.delivery_s3_key_prefix = delivery_s3_key_prefix
|
||||
self.excluded_accounts = excluded_accounts or []
|
||||
self.last_update_time = datetime2int(datetime.utcnow())
|
||||
self.last_update_time = datetime2int(utcnow())
|
||||
self.organization_conformance_pack_arn = f"arn:aws:config:{region}:{account_id}:organization-conformance-pack/{self._unique_pack_name}"
|
||||
self.organization_conformance_pack_name = name
|
||||
|
||||
@ -485,7 +486,7 @@ class OrganizationConformancePack(ConfigEmptyDictable):
|
||||
self.delivery_s3_bucket = delivery_s3_bucket
|
||||
self.delivery_s3_key_prefix = delivery_s3_key_prefix
|
||||
self.excluded_accounts = excluded_accounts
|
||||
self.last_update_time = datetime2int(datetime.utcnow())
|
||||
self.last_update_time = datetime2int(utcnow())
|
||||
|
||||
|
||||
class Scope(ConfigEmptyDictable):
|
||||
@ -839,7 +840,7 @@ class ConfigRule(ConfigEmptyDictable):
|
||||
"CreatedBy field"
|
||||
)
|
||||
|
||||
self.last_updated_time = datetime2int(datetime.utcnow())
|
||||
self.last_updated_time = datetime2int(utcnow())
|
||||
self.tags = tags
|
||||
|
||||
def validate_managed_rule(self) -> None:
|
||||
@ -1046,7 +1047,7 @@ class ConfigBackend(BaseBackend):
|
||||
aggregator.tags = tags
|
||||
aggregator.account_aggregation_sources = account_sources
|
||||
aggregator.organization_aggregation_source = org_source
|
||||
aggregator.last_updated_time = datetime2int(datetime.utcnow())
|
||||
aggregator.last_updated_time = datetime2int(utcnow())
|
||||
|
||||
return aggregator.to_dict()
|
||||
|
||||
@ -1922,7 +1923,7 @@ class ConfigBackend(BaseBackend):
|
||||
"AccountId": self.account_id,
|
||||
"ConformancePackName": f"OrgConformsPack-{pack._unique_pack_name}",
|
||||
"Status": pack._status,
|
||||
"LastUpdateTime": datetime2int(datetime.utcnow()),
|
||||
"LastUpdateTime": datetime2int(utcnow()),
|
||||
}
|
||||
]
|
||||
|
||||
|
@ -7,7 +7,7 @@ from gzip import decompress
|
||||
from typing import Any, Optional, List, Callable, Dict, Tuple
|
||||
from urllib.parse import urlparse, unquote
|
||||
from .common_types import TYPE_RESPONSE
|
||||
from .versions import is_werkzeug_2_3_x
|
||||
from .versions import is_werkzeug_2_3_x, PYTHON_311
|
||||
|
||||
|
||||
def camelcase_to_underscores(argument: str) -> str:
|
||||
@ -148,19 +148,17 @@ class convert_flask_to_responses_response(object):
|
||||
def iso_8601_datetime_with_milliseconds(
|
||||
value: Optional[datetime.datetime] = None,
|
||||
) -> str:
|
||||
date_to_use = value or datetime.datetime.now()
|
||||
date_to_use = value or utcnow()
|
||||
return date_to_use.strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
|
||||
|
||||
|
||||
# Even Python does not support nanoseconds, other languages like Go do (needed for Terraform)
|
||||
def iso_8601_datetime_with_nanoseconds(value: datetime.datetime) -> str:
|
||||
return value.strftime("%Y-%m-%dT%H:%M:%S.%f000Z")
|
||||
def iso_8601_datetime_with_nanoseconds() -> str:
|
||||
return utcnow().strftime("%Y-%m-%dT%H:%M:%S.%f000Z")
|
||||
|
||||
|
||||
def iso_8601_datetime_without_milliseconds(
|
||||
value: Optional[datetime.datetime],
|
||||
) -> Optional[str]:
|
||||
return value.strftime("%Y-%m-%dT%H:%M:%SZ") if value else None
|
||||
def iso_8601_datetime_without_milliseconds(value: datetime.datetime) -> str:
|
||||
return value.strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
|
||||
def iso_8601_datetime_without_milliseconds_s3(
|
||||
@ -181,7 +179,7 @@ def str_to_rfc_1123_datetime(value: str) -> datetime.datetime:
|
||||
|
||||
|
||||
def unix_time(dt: Optional[datetime.datetime] = None) -> float:
|
||||
dt = dt or datetime.datetime.utcnow()
|
||||
dt = dt or utcnow()
|
||||
epoch = datetime.datetime.utcfromtimestamp(0)
|
||||
delta = dt - epoch
|
||||
return (delta.days * 86400) + (delta.seconds + (delta.microseconds / 1e6))
|
||||
@ -191,6 +189,21 @@ def unix_time_millis(dt: Optional[datetime.datetime] = None) -> float:
|
||||
return unix_time(dt) * 1000.0
|
||||
|
||||
|
||||
def utcnow() -> datetime.datetime:
|
||||
# Python 3.12 starts throwing deprecation warnings for utcnow()
|
||||
# The docs recommend to use now(UTC) instead
|
||||
#
|
||||
# now(UTC) creates an aware datetime - but utcnow() creates a naive datetime
|
||||
# That's why we have to `replace(tzinfo=None)` to make now(UTC) naive.
|
||||
if PYTHON_311:
|
||||
# Only available in 3.11
|
||||
from datetime import UTC # type: ignore
|
||||
|
||||
return datetime.datetime.now(UTC).replace(tzinfo=None)
|
||||
else:
|
||||
return datetime.datetime.utcnow()
|
||||
|
||||
|
||||
def path_url(url: str) -> str:
|
||||
parsed_url = urlparse(url)
|
||||
path = parsed_url.path
|
||||
|
@ -1,3 +1,5 @@
|
||||
import sys
|
||||
|
||||
from moto.utilities.distutils_version import LooseVersion
|
||||
|
||||
try:
|
||||
@ -6,6 +8,8 @@ except ImportError:
|
||||
from importlib_metadata import version # type: ignore[no-redef]
|
||||
|
||||
|
||||
PYTHON_VERSION_INFO = sys.version_info
|
||||
PYTHON_311 = sys.version_info >= (3, 11)
|
||||
RESPONSES_VERSION = version("responses")
|
||||
WERKZEUG_VERSION = version("werkzeug")
|
||||
|
||||
|
@ -2,6 +2,7 @@ import datetime
|
||||
|
||||
from collections import OrderedDict
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.utils import utcnow
|
||||
from .utils import get_random_pipeline_id, remove_capitalization_of_dict_keys
|
||||
from typing import Any, Dict, Iterable, List
|
||||
|
||||
@ -22,7 +23,7 @@ class Pipeline(CloudFormationModel):
|
||||
self.unique_id = unique_id
|
||||
self.description = kwargs.get("description", "")
|
||||
self.pipeline_id = get_random_pipeline_id()
|
||||
self.creation_time = datetime.datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.objects: List[Any] = []
|
||||
self.status = "PENDING"
|
||||
self.tags = kwargs.get("tags", [])
|
||||
|
@ -1,6 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Iterable, Optional
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
from .exceptions import (
|
||||
InvalidResourceStateFault,
|
||||
@ -126,7 +127,7 @@ class FakeReplicationTask(BaseModel):
|
||||
self.arn = f"arn:aws:dms:{region_name}:{account_id}:task:{self.id}"
|
||||
self.status = "creating"
|
||||
|
||||
self.creation_date = datetime.utcnow()
|
||||
self.creation_date = utcnow()
|
||||
self.start_date: Optional[datetime] = None
|
||||
self.stop_date: Optional[datetime] = None
|
||||
|
||||
@ -167,7 +168,7 @@ class FakeReplicationTask(BaseModel):
|
||||
|
||||
def start(self) -> "FakeReplicationTask":
|
||||
self.status = "starting"
|
||||
self.start_date = datetime.utcnow()
|
||||
self.start_date = utcnow()
|
||||
self.run()
|
||||
return self
|
||||
|
||||
@ -176,7 +177,7 @@ class FakeReplicationTask(BaseModel):
|
||||
raise InvalidResourceStateFault("Replication task is not running")
|
||||
|
||||
self.status = "stopped"
|
||||
self.stop_date = datetime.utcnow()
|
||||
self.stop_date = utcnow()
|
||||
return self
|
||||
|
||||
def delete(self) -> "FakeReplicationTask":
|
||||
|
@ -1,10 +1,9 @@
|
||||
from collections import defaultdict
|
||||
import copy
|
||||
import datetime
|
||||
|
||||
from typing import Any, Dict, Optional, List, Tuple, Iterator, Sequence
|
||||
from moto.core import BaseModel, CloudFormationModel
|
||||
from moto.core.utils import unix_time, unix_time_millis
|
||||
from moto.core.utils import unix_time, unix_time_millis, utcnow
|
||||
from moto.dynamodb.comparisons import get_filter_expression, get_expected
|
||||
from moto.dynamodb.exceptions import (
|
||||
InvalidIndexNameError,
|
||||
@ -153,7 +152,7 @@ class StreamRecord(BaseModel):
|
||||
"awsRegion": "us-east-1",
|
||||
"dynamodb": {
|
||||
"StreamViewType": stream_type,
|
||||
"ApproximateCreationDateTime": datetime.datetime.utcnow().isoformat(),
|
||||
"ApproximateCreationDateTime": utcnow().isoformat(),
|
||||
"SequenceNumber": str(seq),
|
||||
"SizeBytes": 1,
|
||||
"Keys": keys,
|
||||
@ -181,7 +180,7 @@ class StreamShard(BaseModel):
|
||||
self.id = "shardId-00000001541626099285-f35f62ef"
|
||||
self.starting_sequence_number = 1100000000017454423009
|
||||
self.items: List[StreamRecord] = []
|
||||
self.created_on = datetime.datetime.utcnow()
|
||||
self.created_on = utcnow()
|
||||
|
||||
def to_json(self) -> Dict[str, Any]:
|
||||
return {
|
||||
@ -277,7 +276,7 @@ class Table(CloudFormationModel):
|
||||
GlobalSecondaryIndex.create(i, self.table_key_attrs)
|
||||
for i in (global_indexes if global_indexes else [])
|
||||
]
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
self.items = defaultdict(dict) # type: ignore # [hash: DynamoType] or [hash: [range: DynamoType]]
|
||||
self.table_arn = self._generate_arn(table_name)
|
||||
self.tags = tags or []
|
||||
@ -416,7 +415,7 @@ class Table(CloudFormationModel):
|
||||
and (streams.get("StreamEnabled") or streams.get("StreamViewType"))
|
||||
):
|
||||
self.stream_specification["StreamEnabled"] = True
|
||||
self.latest_stream_label = datetime.datetime.utcnow().isoformat()
|
||||
self.latest_stream_label = utcnow().isoformat()
|
||||
self.stream_shard = StreamShard(self.account_id, self)
|
||||
else:
|
||||
self.stream_specification = {"StreamEnabled": False}
|
||||
@ -928,7 +927,7 @@ class Backup:
|
||||
self.table = copy.deepcopy(table)
|
||||
self.status = status or "AVAILABLE"
|
||||
self.type = type_ or "USER"
|
||||
self.creation_date_time = datetime.datetime.utcnow()
|
||||
self.creation_date_time = utcnow()
|
||||
self.identifier = self._make_identifier()
|
||||
|
||||
def _make_identifier(self) -> str:
|
||||
|
@ -1,11 +1,10 @@
|
||||
from collections import defaultdict
|
||||
from typing import Any, Dict, Optional, List, Union, Tuple, Iterable
|
||||
import datetime
|
||||
import json
|
||||
|
||||
from collections import OrderedDict
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from .comparisons import get_comparison_func
|
||||
|
||||
|
||||
@ -114,7 +113,7 @@ class Table(BaseModel):
|
||||
self.range_key_type = range_key_type
|
||||
self.read_capacity = read_capacity
|
||||
self.write_capacity = write_capacity
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
self.items: Dict[DynamoType, Union[Item, Dict[DynamoType, Item]]] = defaultdict(
|
||||
dict
|
||||
)
|
||||
|
@ -2,12 +2,11 @@ import contextlib
|
||||
import copy
|
||||
import warnings
|
||||
from collections import OrderedDict
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, ItemsView, List, Tuple, Optional, Set
|
||||
from moto import settings
|
||||
|
||||
from moto.core import CloudFormationModel
|
||||
from moto.core.utils import camelcase_to_underscores
|
||||
from moto.core.utils import camelcase_to_underscores, utcnow
|
||||
from moto.ec2.models.fleets import Fleet
|
||||
from moto.ec2.models.elastic_network_interfaces import NetworkInterface
|
||||
from moto.ec2.models.launch_templates import LaunchTemplateVersion
|
||||
@ -381,9 +380,7 @@ class Instance(TaggedEC2Resource, BotoInstance, CloudFormationModel):
|
||||
self._state.name = "stopped"
|
||||
self._state.code = 80
|
||||
|
||||
self._reason = (
|
||||
f"User initiated ({datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')})"
|
||||
)
|
||||
self._reason = f"User initiated ({utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')})"
|
||||
self._state_reason = StateReason(
|
||||
"Client.UserInitiatedShutdown: User initiated shutdown",
|
||||
"Client.UserInitiatedShutdown",
|
||||
@ -433,9 +430,7 @@ class Instance(TaggedEC2Resource, BotoInstance, CloudFormationModel):
|
||||
self._state.name = "terminated"
|
||||
self._state.code = 48
|
||||
|
||||
self._reason = (
|
||||
f"User initiated ({datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')})"
|
||||
)
|
||||
self._reason = f"User initiated ({utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')})"
|
||||
self._state_reason = StateReason(
|
||||
"Client.UserInitiatedShutdown: User initiated shutdown",
|
||||
"Client.UserInitiatedShutdown",
|
||||
|
@ -1,5 +1,4 @@
|
||||
from typing import Any, Dict, List
|
||||
from datetime import datetime
|
||||
|
||||
from moto.core import BaseModel
|
||||
from ..exceptions import (
|
||||
@ -15,7 +14,7 @@ from ..utils import (
|
||||
generic_filter,
|
||||
random_key_pair_id,
|
||||
)
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
|
||||
|
||||
class KeyPair(BaseModel):
|
||||
@ -24,7 +23,7 @@ class KeyPair(BaseModel):
|
||||
self.name = name
|
||||
self.fingerprint = fingerprint
|
||||
self.material = material
|
||||
self.create_time = datetime.utcnow()
|
||||
self.create_time = utcnow()
|
||||
|
||||
@property
|
||||
def created_iso_8601(self) -> str:
|
||||
|
@ -1,8 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from moto.core import CloudFormationModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from .core import TaggedEC2Resource
|
||||
from ..utils import random_nat_gateway_id, random_private_ip
|
||||
|
||||
@ -25,7 +24,7 @@ class NatGateway(CloudFormationModel, TaggedEC2Resource):
|
||||
self.connectivity_type = connectivity_type
|
||||
|
||||
# protected properties
|
||||
self._created_at = datetime.utcnow()
|
||||
self._created_at = utcnow()
|
||||
self.ec2_backend = backend
|
||||
# NOTE: this is the core of NAT Gateways creation
|
||||
self._eni = self.ec2_backend.create_network_interface(
|
||||
|
@ -1,7 +1,6 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from moto.core import CloudFormationModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.utilities.utils import filter_resources, merge_multiple_dicts
|
||||
from .core import TaggedEC2Resource
|
||||
from ..utils import (
|
||||
@ -35,7 +34,7 @@ class TransitGateway(TaggedEC2Resource, CloudFormationModel):
|
||||
self.description = description
|
||||
self.state = "available"
|
||||
self.options = merge_multiple_dicts(self.DEFAULT_OPTIONS, options or {})
|
||||
self._created_at = datetime.utcnow()
|
||||
self._created_at = utcnow()
|
||||
|
||||
@property
|
||||
def physical_resource_id(self) -> str:
|
||||
|
@ -1,6 +1,5 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.utilities.utils import merge_multiple_dicts, filter_resources
|
||||
from .core import TaggedEC2Resource
|
||||
from .vpc_peering_connections import PeeringConnectionStatus
|
||||
@ -28,7 +27,7 @@ class TransitGatewayAttachment(TaggedEC2Resource):
|
||||
self.state = "available"
|
||||
self.add_tags(tags or {})
|
||||
|
||||
self._created_at = datetime.utcnow()
|
||||
self._created_at = utcnow()
|
||||
self.resource_owner_id = backend.account_id
|
||||
self.transit_gateway_owner_id = backend.account_id
|
||||
self.owner_id = backend.account_id
|
||||
|
@ -1,6 +1,5 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.utilities.utils import filter_resources
|
||||
from .core import TaggedEC2Resource
|
||||
from ..utils import random_transit_gateway_route_table_id
|
||||
@ -19,7 +18,7 @@ class TransitGatewayRouteTable(TaggedEC2Resource):
|
||||
self.id = random_transit_gateway_route_table_id()
|
||||
self.transit_gateway_id = transit_gateway_id
|
||||
|
||||
self._created_at = datetime.utcnow()
|
||||
self._created_at = utcnow()
|
||||
|
||||
self.default_association_route_table = default_association_route_table
|
||||
self.default_propagation_route_table = default_propagation_route_table
|
||||
|
@ -3,12 +3,12 @@ import fnmatch
|
||||
import re
|
||||
import ipaddress
|
||||
|
||||
from datetime import datetime
|
||||
from cryptography.hazmat.primitives import serialization
|
||||
from cryptography.hazmat.backends import default_backend
|
||||
from cryptography.hazmat.primitives.asymmetric import rsa
|
||||
from typing import Any, Dict, List, Set, TypeVar, Tuple, Optional, Union
|
||||
|
||||
from moto.core.utils import utcnow
|
||||
from moto.iam import iam_backends
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from moto.utilities.utils import md5_hash
|
||||
@ -305,7 +305,7 @@ def create_dns_entries(service_name: str, vpc_endpoint_id: str) -> Dict[str, str
|
||||
|
||||
|
||||
def utc_date_and_time() -> str:
|
||||
x = datetime.utcnow()
|
||||
x = utcnow()
|
||||
# Better performing alternative to x.strftime("%Y-%m-%dT%H:%M:%S.000Z")
|
||||
return f"{x.year}-{x.month:02d}-{x.day:02d}T{x.hour:02d}:{x.minute:02d}:{x.second:02d}.000Z"
|
||||
|
||||
|
@ -8,7 +8,7 @@ from typing import Any, Dict, List, Iterable, Optional
|
||||
from botocore.exceptions import ParamValidationError
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow
|
||||
from moto.ecr.exceptions import (
|
||||
ImageNotFoundException,
|
||||
RepositoryNotFoundException,
|
||||
@ -81,7 +81,7 @@ class Repository(BaseObject, CloudFormationModel):
|
||||
f"arn:aws:ecr:{region_name}:{self.registry_id}:repository/{repository_name}"
|
||||
)
|
||||
self.name = repository_name
|
||||
self.created_at = datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
self.uri = (
|
||||
f"{self.registry_id}.dkr.ecr.{region_name}.amazonaws.com/{repository_name}"
|
||||
)
|
||||
@ -920,9 +920,7 @@ class ECRBackend(BaseBackend):
|
||||
"registryId": repo.registry_id,
|
||||
"repositoryName": repository_name,
|
||||
"lifecyclePolicyText": repo.lifecycle_policy,
|
||||
"lastEvaluatedAt": iso_8601_datetime_without_milliseconds(
|
||||
datetime.utcnow()
|
||||
),
|
||||
"lastEvaluatedAt": iso_8601_datetime_without_milliseconds(utcnow()),
|
||||
}
|
||||
|
||||
def delete_lifecycle_policy(
|
||||
@ -940,9 +938,7 @@ class ECRBackend(BaseBackend):
|
||||
"registryId": repo.registry_id,
|
||||
"repositoryName": repository_name,
|
||||
"lifecyclePolicyText": policy,
|
||||
"lastEvaluatedAt": iso_8601_datetime_without_milliseconds(
|
||||
datetime.utcnow()
|
||||
),
|
||||
"lastEvaluatedAt": iso_8601_datetime_without_milliseconds(utcnow()),
|
||||
}
|
||||
|
||||
def _validate_registry_policy_action(self, policy_text: str) -> None:
|
||||
@ -1053,7 +1049,7 @@ class ECRBackend(BaseBackend):
|
||||
image.last_scan
|
||||
),
|
||||
"vulnerabilitySourceUpdatedAt": iso_8601_datetime_without_milliseconds(
|
||||
datetime.utcnow()
|
||||
utcnow()
|
||||
),
|
||||
"findings": [
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import List, Optional, Dict, Any, Tuple
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
from .exceptions import (
|
||||
UserAlreadyExists,
|
||||
@ -117,8 +117,8 @@ class CacheCluster(BaseModel):
|
||||
self.cache_node_ids_to_remove = cache_node_ids_to_remove
|
||||
self.cache_node_ids_to_reboot = cache_node_ids_to_reboot
|
||||
|
||||
self.cache_cluster_create_time = datetime.utcnow()
|
||||
self.auth_token_last_modified_date = datetime.utcnow()
|
||||
self.cache_cluster_create_time = utcnow()
|
||||
self.auth_token_last_modified_date = utcnow()
|
||||
self.cache_cluster_status = "available"
|
||||
self.arn = f"arn:aws:elasticache:{region_name}:{account_id}:{cache_cluster_id}"
|
||||
self.cache_node_id = str(mock_random.uuid4())
|
||||
|
@ -1,4 +1,3 @@
|
||||
import datetime
|
||||
import re
|
||||
from jinja2 import Template
|
||||
from botocore.exceptions import ParamValidationError
|
||||
@ -587,7 +586,7 @@ class FakeLoadBalancer(CloudFormationModel):
|
||||
loadbalancer_type: Optional[str] = None,
|
||||
):
|
||||
self.name = name
|
||||
self.created_time = iso_8601_datetime_with_milliseconds(datetime.datetime.now())
|
||||
self.created_time = iso_8601_datetime_with_milliseconds()
|
||||
self.scheme = scheme
|
||||
self.security_groups = security_groups
|
||||
self.subnets = subnets or []
|
||||
|
@ -1,5 +1,4 @@
|
||||
import copy
|
||||
import datetime
|
||||
import re
|
||||
import string
|
||||
from typing import Any, List, Dict, Tuple, Iterator
|
||||
@ -242,7 +241,7 @@ class EmrManagedSecurityGroup:
|
||||
|
||||
@classmethod
|
||||
def description(cls) -> str:
|
||||
created = iso_8601_datetime_with_milliseconds(datetime.datetime.now())
|
||||
created = iso_8601_datetime_with_milliseconds()
|
||||
return cls.desc_fmt.format(short_name=cls.short_name, created=created)
|
||||
|
||||
|
||||
|
@ -552,7 +552,7 @@ class Archive(CloudFormationModel):
|
||||
self.retention = retention if retention else 0
|
||||
|
||||
self.arn = f"arn:aws:events:{region_name}:{account_id}:archive/{name}"
|
||||
self.creation_time = unix_time(datetime.utcnow())
|
||||
self.creation_time = unix_time()
|
||||
self.state = "ENABLED"
|
||||
self.uuid = str(random.uuid4())
|
||||
|
||||
@ -701,7 +701,7 @@ class Replay(BaseModel):
|
||||
|
||||
self.arn = f"arn:aws:events:{region_name}:{account_id}:replay/{name}"
|
||||
self.state = ReplayState.STARTING
|
||||
self.start_time = unix_time(datetime.utcnow())
|
||||
self.start_time = unix_time()
|
||||
self.end_time: Optional[float] = None
|
||||
|
||||
def describe_short(self) -> Dict[str, Any]:
|
||||
@ -740,7 +740,7 @@ class Replay(BaseModel):
|
||||
)
|
||||
|
||||
self.state = ReplayState.COMPLETED
|
||||
self.end_time = unix_time(datetime.utcnow())
|
||||
self.end_time = unix_time()
|
||||
|
||||
|
||||
class Connection(BaseModel):
|
||||
@ -759,7 +759,7 @@ class Connection(BaseModel):
|
||||
self.description = description
|
||||
self.authorization_type = authorization_type
|
||||
self.auth_parameters = auth_parameters
|
||||
self.creation_time = unix_time(datetime.utcnow())
|
||||
self.creation_time = unix_time()
|
||||
self.state = "AUTHORIZED"
|
||||
|
||||
self.arn = f"arn:aws:events:{region_name}:{account_id}:connection/{self.name}/{self.uuid}"
|
||||
@ -836,7 +836,7 @@ class Destination(BaseModel):
|
||||
self.connection_arn = connection_arn
|
||||
self.invocation_endpoint = invocation_endpoint
|
||||
self.invocation_rate_limit_per_second = invocation_rate_limit_per_second
|
||||
self.creation_time = unix_time(datetime.utcnow())
|
||||
self.creation_time = unix_time()
|
||||
self.http_method = http_method
|
||||
self.state = "ACTIVE"
|
||||
self.arn = f"arn:aws:events:{region_name}:{account_id}:api-destination/{name}/{self.uuid}"
|
||||
@ -1354,7 +1354,7 @@ class EventsBackend(BaseBackend):
|
||||
"detail-type": event["DetailType"],
|
||||
"source": event["Source"],
|
||||
"account": self.account_id,
|
||||
"time": event.get("Time", unix_time(datetime.utcnow())),
|
||||
"time": event.get("Time", unix_time()),
|
||||
"region": self.region_name,
|
||||
"resources": event.get("Resources", []),
|
||||
"detail": json.loads(event["Detail"]),
|
||||
|
@ -23,6 +23,7 @@ import warnings
|
||||
import requests
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.firehose.exceptions import (
|
||||
ConcurrentModificationException,
|
||||
InvalidArgumentException,
|
||||
@ -442,7 +443,7 @@ class FirehoseBackend(BaseBackend):
|
||||
# Object name pattern:
|
||||
# DeliveryStreamName-DeliveryStreamVersion-YYYY-MM-DD-HH-MM-SS-RandomString
|
||||
prefix = f"{prefix}{'' if prefix.endswith('/') else '/'}"
|
||||
now = datetime.utcnow()
|
||||
now = utcnow()
|
||||
return (
|
||||
f"{prefix}{now.strftime('%Y/%m/%d/%H')}/"
|
||||
f"{delivery_stream_name}-{version_id}-"
|
||||
|
@ -8,7 +8,7 @@ from typing import Any, Dict, List, Optional
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.moto_api import state_manager
|
||||
from moto.moto_api._internal import mock_random
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal.managed_state_model import ManagedState
|
||||
from .exceptions import (
|
||||
JsonRESTError,
|
||||
@ -1044,7 +1044,7 @@ class FakeDatabase(BaseModel):
|
||||
def __init__(self, database_name: str, database_input: Dict[str, Any]):
|
||||
self.name = database_name
|
||||
self.input = database_input
|
||||
self.created_time = datetime.utcnow()
|
||||
self.created_time = utcnow()
|
||||
self.tables: Dict[str, FakeTable] = OrderedDict()
|
||||
|
||||
def as_dict(self) -> Dict[str, Any]:
|
||||
@ -1069,7 +1069,7 @@ class FakeTable(BaseModel):
|
||||
self.database_name = database_name
|
||||
self.name = table_name
|
||||
self.partitions: Dict[str, FakePartition] = OrderedDict()
|
||||
self.created_time = datetime.utcnow()
|
||||
self.created_time = utcnow()
|
||||
self.updated_time: Optional[datetime] = None
|
||||
self._current_version = 1
|
||||
self.versions: Dict[str, Dict[str, Any]] = {
|
||||
@ -1079,7 +1079,7 @@ class FakeTable(BaseModel):
|
||||
def update(self, table_input: Dict[str, Any]) -> None:
|
||||
self.versions[str(self._current_version + 1)] = table_input
|
||||
self._current_version += 1
|
||||
self.updated_time = datetime.utcnow()
|
||||
self.updated_time = utcnow()
|
||||
|
||||
def get_version(self, ver: str) -> Dict[str, Any]:
|
||||
try:
|
||||
@ -1202,7 +1202,7 @@ class FakeCrawler(BaseModel):
|
||||
self.configuration = configuration
|
||||
self.crawler_security_configuration = crawler_security_configuration
|
||||
self.state = "READY"
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.last_updated = self.creation_time
|
||||
self.version = 1
|
||||
self.crawl_elapsed_time = 0
|
||||
@ -1339,8 +1339,8 @@ class FakeJob:
|
||||
self.code_gen_configuration_nodes = code_gen_configuration_nodes
|
||||
self.execution_class = execution_class or "STANDARD"
|
||||
self.source_control_details = source_control_details
|
||||
self.created_on = datetime.utcnow()
|
||||
self.last_modified_on = datetime.utcnow()
|
||||
self.created_on = utcnow()
|
||||
self.last_modified_on = utcnow()
|
||||
self.arn = (
|
||||
f"arn:aws:glue:{backend.region_name}:{backend.account_id}:job/{self.name}"
|
||||
)
|
||||
@ -1420,9 +1420,9 @@ class FakeJobRun(ManagedState):
|
||||
self.allocated_capacity = allocated_capacity
|
||||
self.timeout = timeout
|
||||
self.worker_type = worker_type
|
||||
self.started_on = datetime.utcnow()
|
||||
self.modified_on = datetime.utcnow()
|
||||
self.completed_on = datetime.utcnow()
|
||||
self.started_on = utcnow()
|
||||
self.modified_on = utcnow()
|
||||
self.completed_on = utcnow()
|
||||
|
||||
def get_name(self) -> str:
|
||||
return self.job_name
|
||||
@ -1467,8 +1467,8 @@ class FakeRegistry(BaseModel):
|
||||
self.name = registry_name
|
||||
self.description = description
|
||||
self.tags = tags
|
||||
self.created_time = datetime.utcnow()
|
||||
self.updated_time = datetime.utcnow()
|
||||
self.created_time = utcnow()
|
||||
self.updated_time = utcnow()
|
||||
self.status = "AVAILABLE"
|
||||
self.registry_arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:registry/{self.name}"
|
||||
self.schemas: Dict[str, FakeSchema] = OrderedDict()
|
||||
@ -1506,8 +1506,8 @@ class FakeSchema(BaseModel):
|
||||
self.schema_status = AVAILABLE_STATUS
|
||||
self.schema_version_id = schema_version_id
|
||||
self.schema_version_status = AVAILABLE_STATUS
|
||||
self.created_time = datetime.utcnow()
|
||||
self.updated_time = datetime.utcnow()
|
||||
self.created_time = utcnow()
|
||||
self.updated_time = utcnow()
|
||||
self.schema_versions: Dict[str, FakeSchemaVersion] = OrderedDict()
|
||||
|
||||
def update_next_schema_version(self) -> None:
|
||||
@ -1553,8 +1553,8 @@ class FakeSchemaVersion(BaseModel):
|
||||
self.schema_version_status = AVAILABLE_STATUS
|
||||
self.version_number = version_number
|
||||
self.schema_version_id = str(mock_random.uuid4())
|
||||
self.created_time = datetime.utcnow()
|
||||
self.updated_time = datetime.utcnow()
|
||||
self.created_time = utcnow()
|
||||
self.updated_time = utcnow()
|
||||
self.metadata: Dict[str, Any] = {}
|
||||
|
||||
def get_schema_version_id(self) -> str:
|
||||
@ -1623,7 +1623,7 @@ class FakeSession(BaseModel):
|
||||
self.glue_version = glue_version
|
||||
self.tags = tags
|
||||
self.request_origin = request_origin
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.last_updated = self.creation_time
|
||||
self.arn = f"arn:aws:glue:{backend.region_name}:{backend.account_id}:session/{self.session_id}"
|
||||
self.backend = backend
|
||||
|
@ -5,7 +5,7 @@ from typing import Any, Dict, List, Iterable, Optional
|
||||
import re
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.moto_api._internal import mock_random
|
||||
from .exceptions import (
|
||||
GreengrassClientError,
|
||||
@ -24,7 +24,7 @@ class FakeCoreDefinition(BaseModel):
|
||||
self.name = name
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
|
||||
@ -57,7 +57,7 @@ class FakeCoreDefinitionVersion(BaseModel):
|
||||
self.definition = definition
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/cores/{self.core_definition_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
|
||||
def to_dict(self, include_detail: bool = False) -> Dict[str, Any]:
|
||||
obj: Dict[str, Any] = {
|
||||
@ -86,8 +86,8 @@ class FakeDeviceDefinition(BaseModel):
|
||||
self.region_name = region_name
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.update_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.update_at_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
self.name = name
|
||||
@ -124,7 +124,7 @@ class FakeDeviceDefinitionVersion(BaseModel):
|
||||
self.devices = devices
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/devices/{self.device_definition_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
|
||||
def to_dict(self, include_detail: bool = False) -> Dict[str, Any]:
|
||||
obj: Dict[str, Any] = {
|
||||
@ -153,8 +153,8 @@ class FakeResourceDefinition(BaseModel):
|
||||
self.region_name = region_name
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.update_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.update_at_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
self.name = name
|
||||
@ -189,7 +189,7 @@ class FakeResourceDefinitionVersion(BaseModel):
|
||||
self.resources = resources
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{region_name}:{account_id}:greengrass/definition/resources/{self.resource_definition_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
return {
|
||||
@ -214,8 +214,8 @@ class FakeFunctionDefinition(BaseModel):
|
||||
self.region_name = region_name
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.update_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.update_at_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
self.name = name
|
||||
@ -254,7 +254,7 @@ class FakeFunctionDefinitionVersion(BaseModel):
|
||||
self.default_config = default_config
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/functions/{self.function_definition_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
return {
|
||||
@ -279,8 +279,8 @@ class FakeSubscriptionDefinition(BaseModel):
|
||||
self.region_name = region_name
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.update_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.update_at_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
self.name = name
|
||||
@ -315,7 +315,7 @@ class FakeSubscriptionDefinitionVersion(BaseModel):
|
||||
self.subscriptions = subscriptions
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/definition/subscriptions/{self.subscription_definition_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
return {
|
||||
@ -335,8 +335,8 @@ class FakeGroup(BaseModel):
|
||||
self.group_id = str(mock_random.uuid4())
|
||||
self.name = name
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.last_updated_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.last_updated_datetime = utcnow()
|
||||
self.latest_version = ""
|
||||
self.latest_version_arn = ""
|
||||
|
||||
@ -373,7 +373,7 @@ class FakeGroupVersion(BaseModel):
|
||||
self.group_id = group_id
|
||||
self.version = str(mock_random.uuid4())
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:greengrass/groups/{self.group_id}/versions/{self.version}"
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.core_definition_version_arn = core_definition_version_arn
|
||||
self.device_definition_version_arn = device_definition_version_arn
|
||||
self.function_definition_version_arn = function_definition_version_arn
|
||||
@ -434,8 +434,8 @@ class FakeDeployment(BaseModel):
|
||||
self.id = str(mock_random.uuid4())
|
||||
self.group_id = group_id
|
||||
self.group_arn = group_arn
|
||||
self.created_at_datetime = datetime.utcnow()
|
||||
self.update_at_datetime = datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.update_at_datetime = utcnow()
|
||||
self.deployment_status = "InProgress"
|
||||
self.deployment_type = deployment_type
|
||||
self.arn = f"arn:aws:greengrass:{self.region_name}:{account_id}:/greengrass/groups/{self.group_id}/deployments/{self.id}"
|
||||
@ -456,7 +456,7 @@ class FakeDeployment(BaseModel):
|
||||
class FakeAssociatedRole(BaseModel):
|
||||
def __init__(self, role_arn: str):
|
||||
self.role_arn = role_arn
|
||||
self.associated_at = datetime.utcnow()
|
||||
self.associated_at = utcnow()
|
||||
|
||||
def to_dict(self, include_detail: bool = False) -> Dict[str, Any]:
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
import json
|
||||
|
||||
@ -789,11 +788,5 @@ class GreengrassResponse(BaseResponse):
|
||||
return (
|
||||
200,
|
||||
{"status": 200},
|
||||
json.dumps(
|
||||
{
|
||||
"DisassociatedAt": iso_8601_datetime_with_milliseconds(
|
||||
datetime.utcnow()
|
||||
)
|
||||
}
|
||||
),
|
||||
json.dumps({"DisassociatedAt": iso_8601_datetime_with_milliseconds()}),
|
||||
)
|
||||
|
@ -25,6 +25,7 @@ from moto.core.utils import (
|
||||
iso_8601_datetime_without_milliseconds,
|
||||
iso_8601_datetime_with_milliseconds,
|
||||
unix_time,
|
||||
utcnow,
|
||||
)
|
||||
from moto.iam.policy_validation import (
|
||||
IAMPolicyDocumentValidator,
|
||||
@ -84,7 +85,7 @@ def mark_account_as_visited(
|
||||
account = iam_backends[account_id]
|
||||
if access_key in account["global"].access_keys:
|
||||
account["global"].access_keys[access_key].last_used = AccessKeyLastUsed(
|
||||
timestamp=datetime.utcnow(), service=service, region=region
|
||||
timestamp=utcnow(), service=service, region=region
|
||||
)
|
||||
else:
|
||||
# User provided access credentials unknown to us
|
||||
@ -100,7 +101,7 @@ class MFADevice:
|
||||
def __init__(
|
||||
self, serial_number: str, authentication_code_1: str, authentication_code_2: str
|
||||
):
|
||||
self.enable_date = datetime.utcnow()
|
||||
self.enable_date = utcnow()
|
||||
self.serial_number = serial_number
|
||||
self.authentication_code_1 = authentication_code_1
|
||||
self.authentication_code_2 = authentication_code_2
|
||||
@ -130,7 +131,9 @@ class VirtualMfaDevice:
|
||||
|
||||
@property
|
||||
def enabled_iso_8601(self) -> str:
|
||||
return iso_8601_datetime_without_milliseconds(self.enable_date) # type: ignore[return-value]
|
||||
if self.enable_date:
|
||||
return iso_8601_datetime_without_milliseconds(self.enable_date)
|
||||
return ""
|
||||
|
||||
|
||||
class Policy(CloudFormationModel):
|
||||
@ -172,8 +175,8 @@ class Policy(CloudFormationModel):
|
||||
)
|
||||
]
|
||||
|
||||
self.create_date = create_date or datetime.utcnow()
|
||||
self.update_date = update_date or datetime.utcnow()
|
||||
self.create_date = create_date or utcnow()
|
||||
self.update_date = update_date or utcnow()
|
||||
|
||||
def update_default_version(self, new_default_version_id: str) -> None:
|
||||
for version in self.versions:
|
||||
@ -225,7 +228,7 @@ class OpenIDConnectProvider(BaseModel):
|
||||
self.url = parsed_url.netloc + parsed_url.path
|
||||
self.thumbprint_list = thumbprint_list
|
||||
self.client_id_list = client_id_list
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.tags = tags or {}
|
||||
|
||||
@property
|
||||
@ -316,7 +319,7 @@ class PolicyVersion:
|
||||
self.is_default = is_default
|
||||
self.version_id = version_id
|
||||
|
||||
self.create_date = create_date or datetime.utcnow()
|
||||
self.create_date = create_date or utcnow()
|
||||
|
||||
@property
|
||||
def created_iso_8601(self) -> str:
|
||||
@ -662,7 +665,7 @@ class Role(CloudFormationModel):
|
||||
self.path = path or "/"
|
||||
self.policies: Dict[str, str] = {}
|
||||
self.managed_policies: Dict[str, ManagedPolicy] = {}
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.tags = tags
|
||||
self.last_used = None
|
||||
self.last_used_region = None
|
||||
@ -907,7 +910,7 @@ class InstanceProfile(CloudFormationModel):
|
||||
self.name = name
|
||||
self.path = path or "/"
|
||||
self.roles = roles if roles else []
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.tags = {tag["Key"]: tag["Value"] for tag in tags or []}
|
||||
|
||||
@property
|
||||
@ -1044,7 +1047,7 @@ class SigningCertificate(BaseModel):
|
||||
self.id = certificate_id
|
||||
self.user_name = user_name
|
||||
self.body = body
|
||||
self.upload_date = datetime.utcnow()
|
||||
self.upload_date = utcnow()
|
||||
self.status = "Active"
|
||||
|
||||
@property
|
||||
@ -1077,7 +1080,7 @@ class AccessKey(CloudFormationModel):
|
||||
)
|
||||
self.secret_access_key = random_alphanumeric(40)
|
||||
self.status = status
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.last_used: Optional[datetime] = None
|
||||
|
||||
@property
|
||||
@ -1182,7 +1185,7 @@ class SshPublicKey(BaseModel):
|
||||
self.ssh_public_key_id = "APKA" + random_access_key()
|
||||
self.fingerprint = md5_hash(ssh_public_key_body.encode()).hexdigest()
|
||||
self.status = "Active"
|
||||
self.upload_date = datetime.utcnow()
|
||||
self.upload_date = utcnow()
|
||||
|
||||
@property
|
||||
def uploaded_iso_8601(self) -> str:
|
||||
@ -1195,7 +1198,7 @@ class Group(BaseModel):
|
||||
self.name = name
|
||||
self.id = random_resource_id()
|
||||
self.path = path
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
|
||||
self.users: List[User] = []
|
||||
self.managed_policies: Dict[str, str] = {}
|
||||
@ -1255,7 +1258,7 @@ class User(CloudFormationModel):
|
||||
self.name = name
|
||||
self.id = random_resource_id()
|
||||
self.path = path if path else "/"
|
||||
self.create_date = datetime.utcnow()
|
||||
self.create_date = utcnow()
|
||||
self.mfa_devices: Dict[str, MFADevice] = {}
|
||||
self.policies: Dict[str, str] = {}
|
||||
self.managed_policies: Dict[str, Dict[str, str]] = {}
|
||||
@ -2851,7 +2854,7 @@ class IAMBackend(BaseBackend):
|
||||
|
||||
device = self.virtual_mfa_devices.get(serial_number, None)
|
||||
if device:
|
||||
device.enable_date = datetime.utcnow()
|
||||
device.enable_date = utcnow()
|
||||
device.user = user
|
||||
device.user_attribute = {
|
||||
"Path": user.path,
|
||||
|
@ -5,6 +5,7 @@ from urllib.parse import urlparse
|
||||
|
||||
from moto.core.common_types import TYPE_RESPONSE
|
||||
from moto.core.responses import BaseResponse
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
|
||||
class InstanceMetadataResponse(BaseResponse):
|
||||
@ -27,7 +28,7 @@ class InstanceMetadataResponse(BaseResponse):
|
||||
"""
|
||||
|
||||
parsed_url = urlparse(full_url)
|
||||
tomorrow = datetime.datetime.utcnow() + datetime.timedelta(days=1)
|
||||
tomorrow = utcnow() + datetime.timedelta(days=1)
|
||||
credentials = dict(
|
||||
AccessKeyId="test-key",
|
||||
SecretAccessKey="test-secret-key",
|
||||
|
@ -13,6 +13,7 @@ from typing import Any, Dict, List, Tuple, Optional, Pattern, Iterable, TYPE_CHE
|
||||
from .utils import PAGINATION_MODEL
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from moto.utilities.paginator import paginate
|
||||
from .exceptions import (
|
||||
@ -80,7 +81,7 @@ class FakeThing(BaseModel):
|
||||
if include_connectivity:
|
||||
obj["connectivity"] = {
|
||||
"connected": True,
|
||||
"timestamp": time.mktime(datetime.utcnow().timetuple()),
|
||||
"timestamp": time.mktime(utcnow().timetuple()),
|
||||
}
|
||||
return obj
|
||||
|
||||
@ -673,8 +674,8 @@ class IoTBackend(BaseBackend):
|
||||
.issuer_name(issuer)
|
||||
.public_key(key.public_key())
|
||||
.serial_number(x509.random_serial_number())
|
||||
.not_valid_before(datetime.utcnow())
|
||||
.not_valid_after(datetime.utcnow() + timedelta(days=365))
|
||||
.not_valid_before(utcnow())
|
||||
.not_valid_after(utcnow() + timedelta(days=365))
|
||||
.add_extension(x509.SubjectAlternativeName(sans), critical=False)
|
||||
.sign(key, hashes.SHA512(), default_backend())
|
||||
)
|
||||
|
@ -11,7 +11,7 @@ from operator import attrgetter
|
||||
from typing import Any, Dict, List, Optional, Tuple, Iterable
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from moto.utilities.paginator import paginate
|
||||
from moto.utilities.utils import md5_hash
|
||||
@ -73,7 +73,7 @@ class Record(BaseModel):
|
||||
self.data = data
|
||||
self.sequence_number = sequence_number
|
||||
self.explicit_hash_key = explicit_hash_key
|
||||
self.created_at_datetime = datetime.datetime.utcnow()
|
||||
self.created_at_datetime = utcnow()
|
||||
self.created_at = unix_time(self.created_at_datetime)
|
||||
|
||||
def to_json(self) -> Dict[str, Any]:
|
||||
|
@ -1,6 +1,6 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from .exceptions import ResourceNotFoundException, ResourceInUseException
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
|
||||
@ -26,7 +26,7 @@ class Stream(BaseModel):
|
||||
self.tags = tags
|
||||
self.status = "ACTIVE"
|
||||
self.version = random.get_random_string(include_digits=False, lower_case=True)
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
stream_arn = f"arn:aws:kinesisvideo:{region_name}:{account_id}:stream/{stream_name}/1598784211076"
|
||||
self.data_endpoint_number = random.get_random_hex()
|
||||
self.arn = stream_arn
|
||||
|
@ -1,8 +1,8 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import timedelta
|
||||
from typing import Any, Dict, Iterable, List, Tuple, Optional
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core import CloudFormationModel
|
||||
from moto.core.utils import unix_time_millis
|
||||
from moto.core.utils import unix_time_millis, utcnow
|
||||
from moto.logs.metric_filters import MetricFilters
|
||||
from moto.logs.exceptions import (
|
||||
ResourceNotFoundException,
|
||||
@ -914,8 +914,8 @@ class LogsBackend(BaseBackend):
|
||||
rejected_info = {}
|
||||
allowed_events = []
|
||||
last_timestamp = None
|
||||
oldest = int(unix_time_millis(datetime.utcnow() - timedelta(days=14)))
|
||||
newest = int(unix_time_millis(datetime.utcnow() + timedelta(hours=2)))
|
||||
oldest = int(unix_time_millis(utcnow() - timedelta(days=14)))
|
||||
newest = int(unix_time_millis(utcnow() + timedelta(hours=2)))
|
||||
for idx, event in enumerate(log_events):
|
||||
if last_timestamp and last_timestamp > event["timestamp"]:
|
||||
raise InvalidParameterException(
|
||||
|
@ -3,6 +3,7 @@ import re
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
from .exceptions import (
|
||||
BadRequestException,
|
||||
@ -62,7 +63,7 @@ class ManagedBlockchainNetwork(BaseModel):
|
||||
region: str,
|
||||
description: Optional[str] = None,
|
||||
):
|
||||
self.creationdate = datetime.datetime.utcnow()
|
||||
self.creationdate = utcnow()
|
||||
self.id = network_id
|
||||
self.name = name
|
||||
self.description = description
|
||||
@ -179,7 +180,7 @@ class ManagedBlockchainProposal(BaseModel):
|
||||
self.network_threshold_comp = network_threshold_comp
|
||||
self.description = description
|
||||
|
||||
self.creationdate = datetime.datetime.utcnow()
|
||||
self.creationdate = utcnow()
|
||||
self.expirationdate = self.creationdate + datetime.timedelta(
|
||||
hours=network_expiration
|
||||
)
|
||||
@ -211,7 +212,7 @@ class ManagedBlockchainProposal(BaseModel):
|
||||
return []
|
||||
|
||||
def check_to_expire_proposal(self) -> None:
|
||||
if datetime.datetime.utcnow() > self.expirationdate:
|
||||
if utcnow() > self.expirationdate:
|
||||
self.status = "EXPIRED"
|
||||
|
||||
def to_dict(self) -> Dict[str, Any]:
|
||||
@ -303,7 +304,7 @@ class ManagedBlockchainInvitation(BaseModel):
|
||||
self.status = "PENDING"
|
||||
self.region = region
|
||||
|
||||
self.creationdate = datetime.datetime.utcnow()
|
||||
self.creationdate = utcnow()
|
||||
self.expirationdate = self.creationdate + datetime.timedelta(days=7)
|
||||
|
||||
@property
|
||||
@ -351,7 +352,7 @@ class ManagedBlockchainMember(BaseModel):
|
||||
member_configuration: Dict[str, Any],
|
||||
region: str,
|
||||
):
|
||||
self.creationdate = datetime.datetime.utcnow()
|
||||
self.creationdate = utcnow()
|
||||
self.id = member_id
|
||||
self.networkid = networkid
|
||||
self.member_configuration = member_configuration
|
||||
@ -430,7 +431,7 @@ class ManagedBlockchainNode(BaseModel):
|
||||
logpublishingconfiguration: Dict[str, Any],
|
||||
region: str,
|
||||
):
|
||||
self.creationdate = datetime.datetime.utcnow()
|
||||
self.creationdate = utcnow()
|
||||
self.id = node_id
|
||||
self.instancetype = instancetype
|
||||
self.networkid = networkid
|
||||
|
@ -1,7 +1,7 @@
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.ec2 import ec2_backends
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
import datetime
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from .exceptions import ResourceNotFoundException, ValidationException
|
||||
@ -79,7 +79,7 @@ class OpsworkInstance(BaseModel):
|
||||
self.platform = "linux (fixed)"
|
||||
|
||||
self.id = str(random.uuid4())
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
|
||||
def start(self) -> None:
|
||||
"""
|
||||
@ -257,7 +257,7 @@ class Layer(BaseModel):
|
||||
self.use_ebs_optimized_instances = use_ebs_optimized_instances
|
||||
|
||||
self.id = str(random.uuid4())
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
|
||||
def __eq__(self, other: Any) -> bool:
|
||||
return self.id == other.id
|
||||
@ -351,7 +351,7 @@ class Stack(BaseModel):
|
||||
self.layers: List[Layer] = []
|
||||
self.apps: List[App] = []
|
||||
self.account_number = account_id
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
|
||||
def __eq__(self, other: Any) -> bool:
|
||||
return self.id == other.id
|
||||
@ -432,7 +432,7 @@ class App(BaseModel):
|
||||
self.environment = environment or {}
|
||||
|
||||
self.id = str(random.uuid4())
|
||||
self.created_at = datetime.datetime.utcnow()
|
||||
self.created_at = utcnow()
|
||||
|
||||
def __eq__(self, other: Any) -> bool:
|
||||
return self.id == other.id
|
||||
|
@ -1,11 +1,10 @@
|
||||
import datetime
|
||||
import re
|
||||
import json
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.exceptions import RESTError
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.organizations import utils
|
||||
from moto.organizations.exceptions import (
|
||||
InvalidInputException,
|
||||
@ -70,7 +69,7 @@ class FakeAccount(BaseModel):
|
||||
self.id = utils.make_random_account_id()
|
||||
self.name = kwargs["AccountName"]
|
||||
self.email = kwargs["Email"]
|
||||
self.create_time = datetime.datetime.utcnow()
|
||||
self.create_time = utcnow()
|
||||
self.status = "ACTIVE"
|
||||
self.joined_method = "CREATED"
|
||||
self.parent_id = organization.root_id
|
||||
@ -290,7 +289,7 @@ class FakeServiceAccess(BaseModel):
|
||||
)
|
||||
|
||||
self.service_principal = kwargs["ServicePrincipal"]
|
||||
self.date_enabled = datetime.datetime.utcnow()
|
||||
self.date_enabled = utcnow()
|
||||
|
||||
def describe(self) -> Dict[str, Any]:
|
||||
return {
|
||||
@ -317,7 +316,7 @@ class FakeDelegatedAdministrator(BaseModel):
|
||||
|
||||
def __init__(self, account: FakeAccount):
|
||||
self.account = account
|
||||
self.enabled_date = datetime.datetime.utcnow()
|
||||
self.enabled_date = utcnow()
|
||||
self.services: Dict[str, Any] = {}
|
||||
|
||||
def add_service_principal(self, service_principal: str) -> None:
|
||||
@ -331,7 +330,7 @@ class FakeDelegatedAdministrator(BaseModel):
|
||||
|
||||
self.services[service_principal] = {
|
||||
"ServicePrincipal": service_principal,
|
||||
"DelegationEnabledDate": unix_time(datetime.datetime.utcnow()),
|
||||
"DelegationEnabledDate": unix_time(),
|
||||
}
|
||||
|
||||
def remove_service_principal(self, service_principal: str) -> None:
|
||||
|
@ -1,10 +1,9 @@
|
||||
import re
|
||||
import string
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal import mock_random as random
|
||||
from moto.organizations.models import organizations_backends, OrganizationsBackend
|
||||
from moto.ram.exceptions import (
|
||||
@ -46,9 +45,9 @@ class ResourceShare(BaseModel):
|
||||
self.arn = (
|
||||
f"arn:aws:ram:{self.region}:{account_id}:resource-share/{random.uuid4()}"
|
||||
)
|
||||
self.creation_time = datetime.utcnow()
|
||||
self.creation_time = utcnow()
|
||||
self.feature_set = "STANDARD"
|
||||
self.last_updated_time = datetime.utcnow()
|
||||
self.last_updated_time = utcnow()
|
||||
self.name = kwargs["name"]
|
||||
self.owning_account_id = account_id
|
||||
self.principals: List[str] = []
|
||||
@ -128,7 +127,7 @@ class ResourceShare(BaseModel):
|
||||
self.resource_arns.append(resource)
|
||||
|
||||
def delete(self) -> None:
|
||||
self.last_updated_time = datetime.utcnow()
|
||||
self.last_updated_time = utcnow()
|
||||
self.status = "DELETED"
|
||||
|
||||
def describe(self) -> Dict[str, Any]:
|
||||
@ -147,7 +146,7 @@ class ResourceShare(BaseModel):
|
||||
self.allow_external_principals = kwargs.get(
|
||||
"allowExternalPrincipals", self.allow_external_principals
|
||||
)
|
||||
self.last_updated_time = datetime.utcnow()
|
||||
self.last_updated_time = utcnow()
|
||||
self.name = kwargs.get("name", self.name)
|
||||
|
||||
|
||||
|
@ -1,5 +1,4 @@
|
||||
import copy
|
||||
import datetime
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
@ -136,9 +135,7 @@ class Cluster:
|
||||
self.status = "active"
|
||||
self.account_id = kwargs.get("account_id")
|
||||
self.region_name = kwargs.get("region")
|
||||
self.cluster_create_time = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.cluster_create_time = iso_8601_datetime_with_milliseconds()
|
||||
self.copy_tags_to_snapshot = kwargs.get("copy_tags_to_snapshot")
|
||||
if self.copy_tags_to_snapshot is None:
|
||||
self.copy_tags_to_snapshot = True
|
||||
@ -194,9 +191,7 @@ class Cluster:
|
||||
kwargs.get("enable_cloudwatch_logs_exports") or []
|
||||
)
|
||||
self.enable_http_endpoint = kwargs.get("enable_http_endpoint") # type: ignore
|
||||
self.earliest_restorable_time = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.earliest_restorable_time = iso_8601_datetime_with_milliseconds()
|
||||
self.scaling_configuration = kwargs.get("scaling_configuration")
|
||||
if not self.scaling_configuration and self.engine_mode == "serverless":
|
||||
# In AWS, this default configuration only shows up when the Cluster is in a ready state, so a few minutes after creation
|
||||
@ -470,9 +465,7 @@ class ClusterSnapshot(BaseModel):
|
||||
self.snapshot_type = snapshot_type
|
||||
self.tags = tags
|
||||
self.status = "available"
|
||||
self.created_at = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.created_at = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
@property
|
||||
def arn(self) -> str:
|
||||
@ -592,9 +585,7 @@ class Database(CloudFormationModel):
|
||||
self.port = Database.default_port(self.engine) # type: ignore
|
||||
self.db_instance_identifier = kwargs.get("db_instance_identifier")
|
||||
self.db_name = kwargs.get("db_name")
|
||||
self.instance_create_time = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.instance_create_time = iso_8601_datetime_with_milliseconds()
|
||||
self.publicly_accessible = kwargs.get("publicly_accessible")
|
||||
if self.publicly_accessible is None:
|
||||
self.publicly_accessible = True
|
||||
@ -1108,9 +1099,7 @@ class DatabaseSnapshot(BaseModel):
|
||||
self.snapshot_type = snapshot_type
|
||||
self.tags = tags
|
||||
self.status = "available"
|
||||
self.created_at = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.created_at = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
@property
|
||||
def arn(self) -> str:
|
||||
@ -1191,9 +1180,7 @@ class ExportTask(BaseModel):
|
||||
self.export_only = kwargs.get("export_only", [])
|
||||
|
||||
self.status = "complete"
|
||||
self.created_at = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.created_at = iso_8601_datetime_with_milliseconds()
|
||||
self.source_type = (
|
||||
"SNAPSHOT" if type(snapshot) is DatabaseSnapshot else "CLUSTER"
|
||||
)
|
||||
@ -1241,9 +1228,7 @@ class EventSubscription(BaseModel):
|
||||
self.region_name = ""
|
||||
self.customer_aws_id = kwargs["account_id"]
|
||||
self.status = "active"
|
||||
self.created_at = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
)
|
||||
self.created_at = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
@property
|
||||
def es_arn(self) -> str:
|
||||
|
@ -99,9 +99,7 @@ class Cluster(TaggableResourceMixin, CloudFormationModel):
|
||||
super().__init__(redshift_backend.account_id, region_name, tags)
|
||||
self.redshift_backend = redshift_backend
|
||||
self.cluster_identifier = cluster_identifier
|
||||
self.create_time = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.now(tzutc())
|
||||
)
|
||||
self.create_time = iso_8601_datetime_with_milliseconds()
|
||||
self.status = "available"
|
||||
self.node_type = node_type
|
||||
self.master_username = master_username
|
||||
@ -532,9 +530,7 @@ class Snapshot(TaggableResourceMixin, BaseModel):
|
||||
self.snapshot_identifier = snapshot_identifier
|
||||
self.snapshot_type = snapshot_type
|
||||
self.status = "available"
|
||||
self.create_time = iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.now(tzutc())
|
||||
)
|
||||
self.create_time = iso_8601_datetime_with_milliseconds()
|
||||
self.iam_roles_arn = iam_roles_arn or []
|
||||
|
||||
@property
|
||||
|
@ -1,5 +1,4 @@
|
||||
"""Handles Route53 API requests, invokes method and returns response."""
|
||||
import datetime
|
||||
import re
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
@ -357,9 +356,7 @@ class Route53(BaseResponse):
|
||||
200,
|
||||
headers,
|
||||
template.render(
|
||||
timestamp=iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
),
|
||||
timestamp=iso_8601_datetime_with_milliseconds(),
|
||||
),
|
||||
)
|
||||
|
||||
|
@ -21,6 +21,7 @@ from moto.core.utils import (
|
||||
rfc_1123_datetime,
|
||||
unix_time,
|
||||
unix_time_millis,
|
||||
utcnow,
|
||||
)
|
||||
from moto.cloudwatch.models import MetricDatum
|
||||
from moto.moto_api import state_manager
|
||||
@ -70,7 +71,7 @@ class FakeDeleteMarker(BaseModel):
|
||||
def __init__(self, key: "FakeKey"):
|
||||
self.key = key
|
||||
self.name = key.name
|
||||
self.last_modified = datetime.datetime.utcnow()
|
||||
self.last_modified = utcnow()
|
||||
self._version_id = str(random.uuid4())
|
||||
|
||||
@property
|
||||
@ -113,7 +114,7 @@ class FakeKey(BaseModel, ManagedState):
|
||||
)
|
||||
self.name = name
|
||||
self.account_id = account_id
|
||||
self.last_modified = datetime.datetime.utcnow()
|
||||
self.last_modified = utcnow()
|
||||
self.acl: Optional[FakeAcl] = get_canned_acl("private")
|
||||
self.website_redirect_location: Optional[str] = None
|
||||
self.checksum_algorithm = None
|
||||
@ -197,7 +198,7 @@ class FakeKey(BaseModel, ManagedState):
|
||||
self.acl = acl
|
||||
|
||||
def restore(self, days: int) -> None:
|
||||
self._expiry = datetime.datetime.utcnow() + datetime.timedelta(days)
|
||||
self._expiry = utcnow() + datetime.timedelta(days)
|
||||
|
||||
@property
|
||||
def etag(self) -> str:
|
||||
@ -324,7 +325,7 @@ class FakeKey(BaseModel, ManagedState):
|
||||
return True
|
||||
|
||||
if self.lock_mode == "COMPLIANCE":
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
try:
|
||||
until = datetime.datetime.strptime(
|
||||
self.lock_until, "%Y-%m-%dT%H:%M:%SZ" # type: ignore
|
||||
@ -1532,7 +1533,7 @@ class FakeBucket(CloudFormationModel):
|
||||
return False
|
||||
|
||||
def default_retention(self) -> str:
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
now += datetime.timedelta(self.default_lock_days) # type: ignore
|
||||
now += datetime.timedelta(self.default_lock_years * 365) # type: ignore
|
||||
return now.strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||
|
@ -1,4 +1,3 @@
|
||||
import datetime
|
||||
import json
|
||||
|
||||
from boto3 import Session
|
||||
@ -6,7 +5,7 @@ from typing import Any, Dict, List, Optional, Tuple
|
||||
|
||||
from moto.core.exceptions import InvalidNextTokenException
|
||||
from moto.core.common_models import ConfigQueryModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.s3control import s3control_backends
|
||||
|
||||
|
||||
@ -130,7 +129,7 @@ class S3AccountPublicAccessBlockConfigQuery(ConfigQueryModel):
|
||||
return None
|
||||
|
||||
# Format the PAB to the AWS Config format:
|
||||
creation_time = datetime.datetime.utcnow()
|
||||
creation_time = utcnow()
|
||||
config_data = {
|
||||
"version": "1.3",
|
||||
"accountId": account_id,
|
||||
|
@ -5,6 +5,7 @@ import datetime
|
||||
from typing import Any, Dict, List, Tuple, Optional
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.moto_api._internal import mock_random
|
||||
from .exceptions import (
|
||||
SecretNotFoundException,
|
||||
@ -783,7 +784,7 @@ class SecretsManagerBackend(BaseBackend):
|
||||
else:
|
||||
arn = secret_arn(self.account_id, self.region_name, secret_id=secret_id)
|
||||
name = secret_id
|
||||
deletion_date = datetime.datetime.utcnow()
|
||||
deletion_date = utcnow()
|
||||
return arn, name, self._unix_time_secs(deletion_date)
|
||||
else:
|
||||
if self.secrets[secret_id].is_deleted():
|
||||
@ -792,7 +793,7 @@ class SecretsManagerBackend(BaseBackend):
|
||||
perform the operation on a secret that's currently marked deleted."
|
||||
)
|
||||
|
||||
deletion_date = datetime.datetime.utcnow()
|
||||
deletion_date = utcnow()
|
||||
|
||||
if force_delete_without_recovery:
|
||||
secret = self.secrets.pop(secret_id)
|
||||
|
@ -8,6 +8,7 @@ from email.encoders import encode_7or8bit
|
||||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
from moto.core.utils import utcnow
|
||||
from moto.sns.models import sns_backends
|
||||
from .exceptions import (
|
||||
MessageRejectedError,
|
||||
@ -431,7 +432,7 @@ class SESBackend(BaseBackend):
|
||||
"Rejects": self.rejected_messages_count,
|
||||
"Complaints": 0,
|
||||
"Bounces": 0,
|
||||
"Timestamp": datetime.datetime.utcnow(),
|
||||
"Timestamp": utcnow(),
|
||||
}
|
||||
|
||||
def add_template(self, template_info: Dict[str, str]) -> None:
|
||||
|
@ -2,8 +2,8 @@ import base64
|
||||
from typing import Any, Dict, List
|
||||
|
||||
from moto.core.responses import BaseResponse
|
||||
from moto.core.utils import utcnow
|
||||
from .models import ses_backends, SESBackend
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class EmailResponse(BaseResponse):
|
||||
@ -247,7 +247,7 @@ class EmailResponse(BaseResponse):
|
||||
template_info["html_part"] = template_data.get("._html_part", "")
|
||||
template_info["template_name"] = template_data.get("._name", "")
|
||||
template_info["subject_part"] = template_data.get("._subject_part", "")
|
||||
template_info["Timestamp"] = datetime.utcnow()
|
||||
template_info["Timestamp"] = utcnow()
|
||||
self.backend.add_template(template_info=template_info)
|
||||
template = self.response_template(CREATE_TEMPLATE)
|
||||
return template.render()
|
||||
@ -259,7 +259,7 @@ class EmailResponse(BaseResponse):
|
||||
template_info["html_part"] = template_data.get("._html_part", "")
|
||||
template_info["template_name"] = template_data.get("._name", "")
|
||||
template_info["subject_part"] = template_data.get("._subject_part", "")
|
||||
template_info["Timestamp"] = datetime.utcnow()
|
||||
template_info["Timestamp"] = utcnow()
|
||||
self.backend.update_template(template_info=template_info)
|
||||
template = self.response_template(UPDATE_TEMPLATE)
|
||||
return template.render()
|
||||
|
@ -1,6 +1,5 @@
|
||||
"""SESV2Backend class with methods for supported APIs."""
|
||||
|
||||
from datetime import datetime as dt
|
||||
from moto.core import BackendDict, BaseBackend, BaseModel
|
||||
from ..ses.models import ses_backends, Message, RawMessage
|
||||
from typing import Dict, List, Any
|
||||
@ -21,8 +20,8 @@ class Contact(BaseModel):
|
||||
self.topic_default_preferences: List[Dict[str, str]] = []
|
||||
self.topic_preferences = topic_preferences
|
||||
self.unsubscribe_all = unsubscribe_all
|
||||
self.created_timestamp = iso_8601_datetime_with_milliseconds(dt.utcnow())
|
||||
self.last_updated_timestamp = iso_8601_datetime_with_milliseconds(dt.utcnow())
|
||||
self.created_timestamp = iso_8601_datetime_with_milliseconds()
|
||||
self.last_updated_timestamp = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
@property
|
||||
def response_object(self) -> Dict[str, Any]: # type: ignore[misc]
|
||||
@ -47,8 +46,8 @@ class ContactList(BaseModel):
|
||||
self.contact_list_name = contact_list_name
|
||||
self.description = description
|
||||
self.topics = topics
|
||||
self.created_timestamp = iso_8601_datetime_with_milliseconds(dt.utcnow())
|
||||
self.last_updated_timestamp = iso_8601_datetime_with_milliseconds(dt.utcnow())
|
||||
self.created_timestamp = iso_8601_datetime_with_milliseconds()
|
||||
self.last_updated_timestamp = iso_8601_datetime_with_milliseconds()
|
||||
self.contacts: Dict[str, Contact] = {}
|
||||
|
||||
def create_contact(self, contact_list_name: str, params: Dict[str, Any]) -> None:
|
||||
|
@ -1,5 +1,4 @@
|
||||
import contextlib
|
||||
import datetime
|
||||
import json
|
||||
import requests
|
||||
import re
|
||||
@ -299,9 +298,7 @@ class Subscription(BaseModel):
|
||||
"MessageId": message_id,
|
||||
"TopicArn": self.topic.arn,
|
||||
"Message": message,
|
||||
"Timestamp": iso_8601_datetime_with_milliseconds(
|
||||
datetime.datetime.utcnow()
|
||||
),
|
||||
"Timestamp": iso_8601_datetime_with_milliseconds(),
|
||||
"SignatureVersion": "1",
|
||||
"Signature": "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
|
||||
"SigningCertURL": "https://sns.us-east-1.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
|
||||
|
@ -7,6 +7,7 @@ from collections import defaultdict
|
||||
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel, CloudFormationModel
|
||||
from moto.core.exceptions import RESTError
|
||||
from moto.core.utils import utcnow
|
||||
from moto.ec2 import ec2_backends
|
||||
from moto.secretsmanager import secretsmanager_backends
|
||||
from moto.secretsmanager.exceptions import SecretsManagerClientError
|
||||
@ -589,7 +590,7 @@ class Document(BaseModel):
|
||||
self.status = "Active"
|
||||
self.document_version = document_version
|
||||
self.owner = account_id
|
||||
self.created_date = datetime.datetime.utcnow()
|
||||
self.created_date = utcnow()
|
||||
|
||||
if document_format == "JSON":
|
||||
try:
|
||||
|
@ -31,7 +31,7 @@ class StateMachine(CloudFormationModel):
|
||||
roleArn: str,
|
||||
tags: Optional[List[Dict[str, str]]] = None,
|
||||
):
|
||||
self.creation_date = iso_8601_datetime_with_milliseconds(datetime.now())
|
||||
self.creation_date = iso_8601_datetime_with_milliseconds()
|
||||
self.update_date = self.creation_date
|
||||
self.arn = arn
|
||||
self.name = name
|
||||
@ -92,7 +92,7 @@ class StateMachine(CloudFormationModel):
|
||||
for key, value in kwargs.items():
|
||||
if value is not None:
|
||||
setattr(self, key, value)
|
||||
self.update_date = iso_8601_datetime_with_milliseconds(datetime.now())
|
||||
self.update_date = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
def add_tags(self, tags: List[Dict[str, str]]) -> List[Dict[str, str]]:
|
||||
merged_tags = []
|
||||
@ -253,7 +253,7 @@ class Execution:
|
||||
)
|
||||
self.execution_arn = execution_arn
|
||||
self.name = execution_name
|
||||
self.start_date = iso_8601_datetime_with_milliseconds(datetime.now())
|
||||
self.start_date = iso_8601_datetime_with_milliseconds()
|
||||
self.state_machine_arn = state_machine_arn
|
||||
self.execution_input = execution_input
|
||||
self.status = (
|
||||
@ -364,7 +364,7 @@ class Execution:
|
||||
|
||||
def stop(self) -> None:
|
||||
self.status = "ABORTED"
|
||||
self.stop_date = iso_8601_datetime_with_milliseconds(datetime.now())
|
||||
self.stop_date = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
|
||||
class StepFunctionBackend(BaseBackend):
|
||||
|
@ -5,7 +5,7 @@ import re
|
||||
import xmltodict
|
||||
|
||||
from moto.core import BaseBackend, BaseModel, BackendDict
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_with_milliseconds, utcnow
|
||||
from moto.iam.models import iam_backends, AccessKey
|
||||
from moto.sts.utils import (
|
||||
random_session_token,
|
||||
@ -16,7 +16,7 @@ from moto.sts.utils import (
|
||||
|
||||
class Token(BaseModel):
|
||||
def __init__(self, duration: int, name: Optional[str] = None):
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
self.expiration = now + datetime.timedelta(seconds=duration)
|
||||
self.name = name
|
||||
self.policy = None
|
||||
@ -41,7 +41,7 @@ class AssumedRole(BaseModel):
|
||||
self.session_name = role_session_name
|
||||
self.role_arn = role_arn
|
||||
self.policy = policy
|
||||
now = datetime.datetime.utcnow()
|
||||
now = utcnow()
|
||||
self.expiration = now + datetime.timedelta(seconds=duration)
|
||||
self.external_id = external_id
|
||||
self.access_key = access_key
|
||||
|
@ -1,8 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Optional, TYPE_CHECKING
|
||||
|
||||
from moto.core import BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal import mock_random
|
||||
from ..exceptions import SWFWorkflowExecutionClosedError
|
||||
|
||||
@ -37,7 +36,7 @@ class ActivityTask(BaseModel):
|
||||
self.workflow_execution = workflow_execution
|
||||
# this is *not* necessarily coherent with workflow execution history,
|
||||
# but that shouldn't be a problem for tests
|
||||
self.scheduled_at = datetime.utcnow()
|
||||
self.scheduled_at = utcnow()
|
||||
|
||||
def _check_workflow_execution_open(self) -> None:
|
||||
if not self.workflow_execution.open:
|
||||
|
@ -1,8 +1,7 @@
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Optional, TYPE_CHECKING
|
||||
|
||||
from moto.core import BaseModel
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
from moto.moto_api._internal import mock_random
|
||||
from ..exceptions import SWFWorkflowExecutionClosedError
|
||||
|
||||
@ -29,7 +28,7 @@ class DecisionTask(BaseModel):
|
||||
self.state = "SCHEDULED"
|
||||
# this is *not* necessarily coherent with workflow execution history,
|
||||
# but that shouldn't be a problem for tests
|
||||
self.scheduled_at = datetime.utcnow()
|
||||
self.scheduled_at = utcnow()
|
||||
self.timeout_type: Optional[str] = None
|
||||
|
||||
@property
|
||||
|
@ -1,4 +1,3 @@
|
||||
import datetime
|
||||
import re
|
||||
from typing import Any, Dict, List, Optional, TYPE_CHECKING
|
||||
from moto.core import BaseBackend, BackendDict, BaseModel
|
||||
@ -38,7 +37,7 @@ class FakeWebACL(BaseModel):
|
||||
rules: List[Dict[str, Any]],
|
||||
):
|
||||
self.name = name
|
||||
self.created_time = iso_8601_datetime_with_milliseconds(datetime.datetime.now())
|
||||
self.created_time = iso_8601_datetime_with_milliseconds()
|
||||
self.id = wacl_id
|
||||
self.arn = arn
|
||||
self.description = description or ""
|
||||
|
@ -4,6 +4,7 @@ import pytest
|
||||
from botocore.exceptions import ClientError
|
||||
from moto import mock_acmpca
|
||||
from moto.core import DEFAULT_ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
import datetime
|
||||
import cryptography.x509
|
||||
@ -377,8 +378,8 @@ def create_cert():
|
||||
.issuer_name(issuer)
|
||||
.public_key(key.public_key())
|
||||
.serial_number(serial_number)
|
||||
.not_valid_before(datetime.datetime.utcnow() - datetime.timedelta(days=10))
|
||||
.not_valid_after(datetime.datetime.utcnow() + datetime.timedelta(days=10))
|
||||
.not_valid_before(utcnow() - datetime.timedelta(days=10))
|
||||
.not_valid_after(utcnow() + datetime.timedelta(days=10))
|
||||
.sign(key, hashes.SHA512(), default_backend())
|
||||
)
|
||||
|
||||
|
@ -12,6 +12,7 @@ import pytest
|
||||
from moto import mock_s3
|
||||
from moto.config import mock_config
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
|
||||
@mock_config
|
||||
@ -1213,18 +1214,12 @@ def test_start_configuration_recorder():
|
||||
result = client.describe_configuration_recorder_status()[
|
||||
"ConfigurationRecordersStatus"
|
||||
]
|
||||
lower_bound = datetime.utcnow() - timedelta(minutes=5)
|
||||
lower_bound = utcnow() - timedelta(minutes=5)
|
||||
assert result[0]["recording"]
|
||||
assert result[0]["lastStatus"] == "PENDING"
|
||||
assert lower_bound < result[0]["lastStartTime"].replace(tzinfo=None) <= utcnow()
|
||||
assert (
|
||||
lower_bound
|
||||
< result[0]["lastStartTime"].replace(tzinfo=None)
|
||||
<= datetime.utcnow()
|
||||
)
|
||||
assert (
|
||||
lower_bound
|
||||
< result[0]["lastStatusChangeTime"].replace(tzinfo=None)
|
||||
<= datetime.utcnow()
|
||||
lower_bound < result[0]["lastStatusChangeTime"].replace(tzinfo=None) <= utcnow()
|
||||
)
|
||||
|
||||
|
||||
@ -1263,23 +1258,13 @@ def test_stop_configuration_recorder():
|
||||
result = client.describe_configuration_recorder_status()[
|
||||
"ConfigurationRecordersStatus"
|
||||
]
|
||||
lower_bound = datetime.utcnow() - timedelta(minutes=5)
|
||||
lower_bound = utcnow() - timedelta(minutes=5)
|
||||
assert not result[0]["recording"]
|
||||
assert result[0]["lastStatus"] == "PENDING"
|
||||
assert lower_bound < result[0]["lastStartTime"].replace(tzinfo=None) <= utcnow()
|
||||
assert lower_bound < result[0]["lastStopTime"].replace(tzinfo=None) <= utcnow()
|
||||
assert (
|
||||
lower_bound
|
||||
< result[0]["lastStartTime"].replace(tzinfo=None)
|
||||
<= datetime.utcnow()
|
||||
)
|
||||
assert (
|
||||
lower_bound
|
||||
< result[0]["lastStopTime"].replace(tzinfo=None)
|
||||
<= datetime.utcnow()
|
||||
)
|
||||
assert (
|
||||
lower_bound
|
||||
< result[0]["lastStatusChangeTime"].replace(tzinfo=None)
|
||||
<= datetime.utcnow()
|
||||
lower_bound < result[0]["lastStatusChangeTime"].replace(tzinfo=None) <= utcnow()
|
||||
)
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@ import os
|
||||
|
||||
from moto import mock_events, mock_sqs, mock_logs, settings
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds
|
||||
from moto.core.utils import iso_8601_datetime_without_milliseconds, utcnow
|
||||
|
||||
|
||||
@mock_events
|
||||
@ -35,7 +35,7 @@ def test_send_to_cw_log_group():
|
||||
)
|
||||
|
||||
# when
|
||||
event_time = datetime.utcnow()
|
||||
event_time = utcnow()
|
||||
client_events.put_events(
|
||||
Entries=[
|
||||
{
|
||||
|
@ -6,6 +6,7 @@ from botocore.exceptions import ClientError
|
||||
|
||||
from moto import mock_config, mock_iam, settings
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
from moto.iam import iam_backends
|
||||
from moto.backends import get_backend
|
||||
from tests import DEFAULT_ACCOUNT_ID
|
||||
@ -1530,11 +1531,7 @@ def test_create_access_key():
|
||||
conn.create_access_key(UserName="my-user")
|
||||
conn.create_user(UserName="my-user")
|
||||
access_key = conn.create_access_key(UserName="my-user")["AccessKey"]
|
||||
assert (
|
||||
0
|
||||
<= (datetime.utcnow() - access_key["CreateDate"].replace(tzinfo=None)).seconds
|
||||
< 10
|
||||
)
|
||||
assert 0 <= (utcnow() - access_key["CreateDate"].replace(tzinfo=None)).seconds < 10
|
||||
assert len(access_key["AccessKeyId"]) == 20
|
||||
assert len(access_key["SecretAccessKey"]) == 40
|
||||
assert access_key["AccessKeyId"].startswith("AKIA")
|
||||
@ -1545,11 +1542,7 @@ def test_create_access_key():
|
||||
aws_secret_access_key=access_key["SecretAccessKey"],
|
||||
)
|
||||
access_key = conn.create_access_key()["AccessKey"]
|
||||
assert (
|
||||
0
|
||||
<= (datetime.utcnow() - access_key["CreateDate"].replace(tzinfo=None)).seconds
|
||||
< 10
|
||||
)
|
||||
assert 0 <= (utcnow() - access_key["CreateDate"].replace(tzinfo=None)).seconds < 10
|
||||
assert len(access_key["AccessKeyId"]) == 20
|
||||
assert len(access_key["SecretAccessKey"]) == 40
|
||||
assert access_key["AccessKeyId"].startswith("AKIA")
|
||||
@ -1904,7 +1897,7 @@ def test_get_credential_report_content():
|
||||
UserName=username, AccessKeyId=key1["AccessKeyId"], Status="Inactive"
|
||||
)
|
||||
key1 = conn.create_access_key(UserName=username)["AccessKey"]
|
||||
timestamp = datetime.utcnow()
|
||||
timestamp = utcnow()
|
||||
if not settings.TEST_SERVER_MODE:
|
||||
iam_backend = get_backend("iam")[ACCOUNT_ID]["global"]
|
||||
iam_backend.users[username].access_keys[1].last_used = timestamp
|
||||
@ -2275,11 +2268,7 @@ def test_upload_ssh_public_key():
|
||||
assert pubkey["SSHPublicKeyId"].startswith("APKA")
|
||||
assert "Fingerprint" in pubkey
|
||||
assert pubkey["Status"] == "Active"
|
||||
assert (
|
||||
0
|
||||
<= ((datetime.utcnow() - pubkey["UploadDate"].replace(tzinfo=None)).seconds)
|
||||
< 10
|
||||
)
|
||||
assert 0 <= ((utcnow() - pubkey["UploadDate"].replace(tzinfo=None)).seconds) < 10
|
||||
|
||||
|
||||
@mock_iam
|
||||
|
@ -7,6 +7,7 @@ import pytest
|
||||
from botocore.exceptions import ClientError
|
||||
from moto import mock_iam, settings
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
from moto.backends import get_backend
|
||||
from freezegun import freeze_time
|
||||
from dateutil.tz import tzlocal
|
||||
@ -123,7 +124,7 @@ def test_add_user_to_group():
|
||||
# use internal api to set password, doesn't work in servermode
|
||||
if not settings.TEST_SERVER_MODE:
|
||||
iam_backend = get_backend("iam")[ACCOUNT_ID]["global"]
|
||||
iam_backend.users[user].password_last_used = datetime.utcnow()
|
||||
iam_backend.users[user].password_last_used = utcnow()
|
||||
# Execute
|
||||
result = conn.get_group(GroupName=group)
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
import boto3
|
||||
from datetime import datetime
|
||||
from moto import mock_iam, settings
|
||||
from moto.backends import get_backend
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
from unittest import SkipTest
|
||||
|
||||
|
||||
@ -31,7 +31,7 @@ def test_password_last_used():
|
||||
assert not as_new_user.CurrentUser().password_last_used
|
||||
|
||||
iam_backend = get_backend("iam")[ACCOUNT_ID]["global"]
|
||||
iam_backend.users[username].password_last_used = datetime.utcnow()
|
||||
iam_backend.users[username].password_last_used = utcnow()
|
||||
|
||||
# Password is returned now
|
||||
assert as_new_user.CurrentUser().password_last_used
|
||||
|
@ -9,6 +9,7 @@ from dateutil.tz import tzlocal
|
||||
|
||||
from moto import mock_kinesis
|
||||
from moto.core import DEFAULT_ACCOUNT_ID as ACCOUNT_ID
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
|
||||
@mock_kinesis
|
||||
@ -406,7 +407,7 @@ def test_get_records_at_timestamp():
|
||||
# To test around this limitation we wait until we well into the next second
|
||||
# before capturing the time and storing the records we expect to retrieve.
|
||||
time.sleep(1.0)
|
||||
timestamp = datetime.datetime.utcnow()
|
||||
timestamp = utcnow()
|
||||
|
||||
keys = [str(i) for i in range(5, 10)]
|
||||
for k in keys:
|
||||
@ -523,7 +524,7 @@ def test_get_records_at_very_new_timestamp():
|
||||
for k in keys:
|
||||
conn.put_record(StreamName=stream_name, Data=k, PartitionKey=k)
|
||||
|
||||
timestamp = datetime.datetime.utcnow() + datetime.timedelta(seconds=1)
|
||||
timestamp = utcnow() + datetime.timedelta(seconds=1)
|
||||
|
||||
# Get a shard iterator
|
||||
response = conn.describe_stream(StreamName=stream_name)
|
||||
@ -548,7 +549,7 @@ def test_get_records_from_empty_stream_at_timestamp():
|
||||
stream_name = "my_stream"
|
||||
conn.create_stream(StreamName=stream_name, ShardCount=1)
|
||||
|
||||
timestamp = datetime.datetime.utcnow()
|
||||
timestamp = utcnow()
|
||||
|
||||
# Get a shard iterator
|
||||
response = conn.describe_stream(StreamName=stream_name)
|
||||
|
@ -1,7 +1,8 @@
|
||||
import boto3
|
||||
from moto import mock_kinesisvideoarchivedmedia
|
||||
from moto import mock_kinesisvideo
|
||||
from datetime import datetime, timedelta
|
||||
from moto.core.utils import utcnow
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
@mock_kinesisvideo
|
||||
@ -67,7 +68,7 @@ def test_get_clip():
|
||||
region_name=region_name,
|
||||
endpoint_url=data_endpoint,
|
||||
)
|
||||
end_timestamp = datetime.utcnow() - timedelta(hours=1)
|
||||
end_timestamp = utcnow() - timedelta(hours=1)
|
||||
start_timestamp = end_timestamp - timedelta(minutes=5)
|
||||
res = client.get_clip(
|
||||
StreamName=stream_name,
|
||||
|
@ -7,7 +7,6 @@ import zlib
|
||||
|
||||
import boto3
|
||||
from botocore.exceptions import ClientError
|
||||
from datetime import datetime
|
||||
from moto import mock_logs, mock_lambda, mock_iam, mock_firehose, mock_s3
|
||||
from moto import mock_kinesis
|
||||
from moto.core.utils import unix_time_millis
|
||||
@ -152,8 +151,8 @@ def test_put_subscription_filter_with_lambda():
|
||||
sub_filter["filterPattern"] = ""
|
||||
|
||||
# when
|
||||
ts_0 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_1 = int(unix_time_millis(datetime.utcnow())) + 10
|
||||
ts_0 = int(unix_time_millis())
|
||||
ts_1 = int(unix_time_millis()) + 10
|
||||
client_logs.put_log_events(
|
||||
logGroupName=log_group_name,
|
||||
logStreamName=log_stream_name,
|
||||
@ -224,8 +223,8 @@ def test_subscription_filter_applies_to_new_streams():
|
||||
client_logs.create_log_stream( # create log stream after subscription filter applied
|
||||
logGroupName=log_group_name, logStreamName=log_stream_name
|
||||
)
|
||||
ts_0 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_1 = int(unix_time_millis(datetime.utcnow())) + 10
|
||||
ts_0 = int(unix_time_millis())
|
||||
ts_1 = int(unix_time_millis()) + 10
|
||||
client_logs.put_log_events(
|
||||
logGroupName=log_group_name,
|
||||
logStreamName=log_stream_name,
|
||||
@ -318,8 +317,8 @@ def test_put_subscription_filter_with_firehose():
|
||||
_filter["filterPattern"] = ""
|
||||
|
||||
# when
|
||||
ts_0 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_1 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_0 = int(unix_time_millis())
|
||||
ts_1 = int(unix_time_millis())
|
||||
client_logs.put_log_events(
|
||||
logGroupName=log_group_name,
|
||||
logStreamName=log_stream_name,
|
||||
@ -383,8 +382,8 @@ def test_put_subscription_filter_with_kinesis():
|
||||
)
|
||||
|
||||
# Create new log events
|
||||
ts_0 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_1 = int(unix_time_millis(datetime.utcnow()))
|
||||
ts_0 = int(unix_time_millis())
|
||||
ts_1 = int(unix_time_millis())
|
||||
logs.put_log_events(
|
||||
logGroupName="lg1",
|
||||
logStreamName="ls1",
|
||||
|
@ -1,5 +1,5 @@
|
||||
import json
|
||||
from datetime import timedelta, datetime
|
||||
from datetime import timedelta
|
||||
from uuid import UUID
|
||||
|
||||
import boto3
|
||||
@ -8,7 +8,7 @@ from botocore.exceptions import ClientError
|
||||
from freezegun import freeze_time
|
||||
|
||||
from moto import mock_logs, mock_s3, settings
|
||||
from moto.core.utils import unix_time_millis
|
||||
from moto.core.utils import unix_time_millis, utcnow
|
||||
from moto.logs.models import MAX_RESOURCE_POLICIES_PER_REGION
|
||||
|
||||
TEST_REGION = "us-east-1" if settings.TEST_SERVER_MODE else "us-west-2"
|
||||
@ -518,8 +518,8 @@ def test_put_log_events_in_wrong_order():
|
||||
conn.create_log_group(logGroupName=log_group_name)
|
||||
conn.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
|
||||
|
||||
ts_1 = int(unix_time_millis(datetime.utcnow() - timedelta(days=2)))
|
||||
ts_2 = int(unix_time_millis(datetime.utcnow() - timedelta(days=5)))
|
||||
ts_1 = int(unix_time_millis(utcnow() - timedelta(days=2)))
|
||||
ts_2 = int(unix_time_millis(utcnow() - timedelta(days=5)))
|
||||
|
||||
messages = [
|
||||
{"message": f"Message {idx}", "timestamp": ts}
|
||||
@ -550,7 +550,7 @@ def test_put_log_events_in_the_past(days_ago):
|
||||
conn.create_log_group(logGroupName=log_group_name)
|
||||
conn.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
|
||||
|
||||
timestamp = int(unix_time_millis(datetime.utcnow() - timedelta(days=days_ago)))
|
||||
timestamp = int(unix_time_millis(utcnow() - timedelta(days=days_ago)))
|
||||
|
||||
messages = [{"message": "Message number {}", "timestamp": timestamp}]
|
||||
|
||||
@ -569,7 +569,7 @@ def test_put_log_events_in_the_future(minutes):
|
||||
conn.create_log_group(logGroupName=log_group_name)
|
||||
conn.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
|
||||
|
||||
timestamp = int(unix_time_millis(datetime.utcnow() + timedelta(minutes=minutes)))
|
||||
timestamp = int(unix_time_millis(utcnow() + timedelta(minutes=minutes)))
|
||||
|
||||
messages = [{"message": "Message number {}", "timestamp": timestamp}]
|
||||
|
||||
@ -769,7 +769,7 @@ def test_get_log_events():
|
||||
client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
|
||||
|
||||
data = [
|
||||
(int(unix_time_millis(datetime.utcnow() + timedelta(milliseconds=x))), str(x))
|
||||
(int(unix_time_millis(utcnow() + timedelta(milliseconds=x))), str(x))
|
||||
for x in range(20)
|
||||
]
|
||||
events = [{"timestamp": x, "message": y} for x, y in data]
|
||||
@ -862,7 +862,7 @@ def test_get_log_events_with_start_from_head():
|
||||
client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
|
||||
|
||||
data = [
|
||||
(int(unix_time_millis(datetime.utcnow() + timedelta(milliseconds=x))), str(x))
|
||||
(int(unix_time_millis(utcnow() + timedelta(milliseconds=x))), str(x))
|
||||
for x in range(20)
|
||||
]
|
||||
events = [{"timestamp": x, "message": y} for x, y in data]
|
||||
|
@ -1,9 +1,9 @@
|
||||
import boto3
|
||||
from unittest import TestCase
|
||||
from datetime import timedelta, datetime
|
||||
from datetime import timedelta
|
||||
|
||||
from moto import mock_logs
|
||||
from moto.core.utils import unix_time_millis
|
||||
from moto.core.utils import unix_time_millis, utcnow
|
||||
|
||||
TEST_REGION = "eu-west-1"
|
||||
|
||||
@ -47,8 +47,8 @@ class TestLogFilterParameters(TestLogFilter):
|
||||
|
||||
def test_put_log_events_now(self):
|
||||
ts_1 = int(unix_time_millis())
|
||||
ts_2 = int(unix_time_millis(datetime.utcnow() + timedelta(minutes=5)))
|
||||
ts_3 = int(unix_time_millis(datetime.utcnow() + timedelta(days=1)))
|
||||
ts_2 = int(unix_time_millis(utcnow() + timedelta(minutes=5)))
|
||||
ts_3 = int(unix_time_millis(utcnow() + timedelta(days=1)))
|
||||
|
||||
messages = [
|
||||
{"message": f"Message {idx}", "timestamp": ts}
|
||||
@ -76,7 +76,7 @@ class TestLogFilterParameters(TestLogFilter):
|
||||
assert "Message 2" not in messages
|
||||
|
||||
def test_filter_logs_paging(self):
|
||||
timestamp = int(unix_time_millis(datetime.utcnow()))
|
||||
timestamp = int(unix_time_millis())
|
||||
messages = []
|
||||
for i in range(25):
|
||||
messages.append({"message": f"Message number {i}", "timestamp": timestamp})
|
||||
@ -135,7 +135,7 @@ class TestLogFilterParameters(TestLogFilter):
|
||||
class TestLogsFilterPattern(TestLogFilter):
|
||||
def setUp(self) -> None:
|
||||
super().setUp()
|
||||
now = int(unix_time_millis(datetime.utcnow()))
|
||||
now = int(unix_time_millis())
|
||||
messages = [
|
||||
{"timestamp": now, "message": "hello"},
|
||||
{"timestamp": now, "message": "world"},
|
||||
|
@ -1,12 +1,12 @@
|
||||
import time
|
||||
from datetime import timedelta, datetime
|
||||
from datetime import timedelta
|
||||
|
||||
import boto3
|
||||
import pytest
|
||||
from botocore.exceptions import ClientError
|
||||
|
||||
from moto import mock_logs
|
||||
from moto.core.utils import unix_time, unix_time_millis
|
||||
from moto.core.utils import unix_time, unix_time_millis, utcnow
|
||||
|
||||
|
||||
@mock_logs
|
||||
@ -52,7 +52,7 @@ def test_get_query_results():
|
||||
|
||||
data = [
|
||||
(
|
||||
int(unix_time_millis(datetime.utcnow() - timedelta(minutes=x))),
|
||||
int(unix_time_millis(utcnow() - timedelta(minutes=x))),
|
||||
f"event nr {x}",
|
||||
)
|
||||
for x in range(5)
|
||||
@ -65,8 +65,8 @@ def test_get_query_results():
|
||||
|
||||
query_id = client.start_query(
|
||||
logGroupName="test",
|
||||
startTime=int(unix_time(datetime.utcnow() - timedelta(minutes=10))),
|
||||
endTime=int(unix_time(datetime.utcnow() + timedelta(minutes=10))),
|
||||
startTime=int(unix_time(utcnow() - timedelta(minutes=10))),
|
||||
endTime=int(unix_time(utcnow() + timedelta(minutes=10))),
|
||||
queryString="fields @message",
|
||||
)["queryId"]
|
||||
|
||||
@ -94,8 +94,8 @@ def test_get_query_results():
|
||||
# Only find events from last 2 minutes
|
||||
query_id = client.start_query(
|
||||
logGroupName="test",
|
||||
startTime=int(unix_time(datetime.utcnow() - timedelta(minutes=2, seconds=1))),
|
||||
endTime=int(unix_time(datetime.utcnow() - timedelta(seconds=1))),
|
||||
startTime=int(unix_time(utcnow() - timedelta(minutes=2, seconds=1))),
|
||||
endTime=int(unix_time(utcnow() - timedelta(seconds=1))),
|
||||
queryString="fields @message",
|
||||
)["queryId"]
|
||||
|
||||
@ -119,8 +119,8 @@ def test_describe_completed_query():
|
||||
|
||||
query_id = client.start_query(
|
||||
logGroupName="test",
|
||||
startTime=int(unix_time(datetime.utcnow() + timedelta(minutes=10))),
|
||||
endTime=int(unix_time(datetime.utcnow() + timedelta(minutes=10))),
|
||||
startTime=int(unix_time(utcnow() + timedelta(minutes=10))),
|
||||
endTime=int(unix_time(utcnow() + timedelta(minutes=10))),
|
||||
queryString="fields @message",
|
||||
)["queryId"]
|
||||
|
||||
|
@ -20,6 +20,7 @@ import requests
|
||||
|
||||
from moto import settings, mock_s3, mock_config
|
||||
from moto.moto_api import state_manager
|
||||
from moto.core.utils import utcnow
|
||||
from moto.s3.responses import DEFAULT_REGION_NAME
|
||||
import moto.s3.models as s3model
|
||||
|
||||
@ -1766,7 +1767,7 @@ def test_get_object_if_modified_since():
|
||||
s3_client.get_object(
|
||||
Bucket=bucket_name,
|
||||
Key=key,
|
||||
IfModifiedSince=datetime.datetime.utcnow() + datetime.timedelta(hours=1),
|
||||
IfModifiedSince=utcnow() + datetime.timedelta(hours=1),
|
||||
)
|
||||
err_value = err.value
|
||||
assert err_value.response["Error"] == {"Code": "304", "Message": "Not Modified"}
|
||||
@ -1786,7 +1787,7 @@ def test_get_object_if_unmodified_since():
|
||||
s3_client.get_object(
|
||||
Bucket=bucket_name,
|
||||
Key=key,
|
||||
IfUnmodifiedSince=datetime.datetime.utcnow() - datetime.timedelta(hours=1),
|
||||
IfUnmodifiedSince=utcnow() - datetime.timedelta(hours=1),
|
||||
)
|
||||
err_value = err.value
|
||||
assert err_value.response["Error"]["Code"] == "PreconditionFailed"
|
||||
@ -1840,7 +1841,7 @@ def test_head_object_if_modified_since():
|
||||
s3_client.head_object(
|
||||
Bucket=bucket_name,
|
||||
Key=key,
|
||||
IfModifiedSince=datetime.datetime.utcnow() + datetime.timedelta(hours=1),
|
||||
IfModifiedSince=utcnow() + datetime.timedelta(hours=1),
|
||||
)
|
||||
err_value = err.value
|
||||
assert err_value.response["Error"] == {"Code": "304", "Message": "Not Modified"}
|
||||
@ -1882,7 +1883,7 @@ def test_head_object_if_unmodified_since():
|
||||
s3_client.head_object(
|
||||
Bucket=bucket_name,
|
||||
Key=key,
|
||||
IfUnmodifiedSince=datetime.datetime.utcnow() - datetime.timedelta(hours=1),
|
||||
IfUnmodifiedSince=utcnow() - datetime.timedelta(hours=1),
|
||||
)
|
||||
err_value = err.value
|
||||
assert err_value.response["Error"] == {
|
||||
|
@ -7,6 +7,7 @@ from botocore.client import ClientError
|
||||
import pytest
|
||||
|
||||
from moto import mock_s3
|
||||
from moto.core.utils import utcnow
|
||||
from moto.s3.responses import DEFAULT_REGION_NAME
|
||||
|
||||
|
||||
@ -20,7 +21,7 @@ def test_locked_object():
|
||||
|
||||
s3_client.create_bucket(Bucket=bucket_name, ObjectLockEnabledForBucket=True)
|
||||
|
||||
until = datetime.datetime.utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
until = utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
s3_client.put_object(
|
||||
Bucket=bucket_name,
|
||||
Body=b"test",
|
||||
@ -56,7 +57,7 @@ def test_fail_locked_object():
|
||||
s3_client = boto3.client("s3", config=Config(region_name=DEFAULT_REGION_NAME))
|
||||
|
||||
s3_client.create_bucket(Bucket=bucket_name, ObjectLockEnabledForBucket=False)
|
||||
until = datetime.datetime.utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
until = utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
failed = False
|
||||
try:
|
||||
s3_client.put_object(
|
||||
@ -88,7 +89,7 @@ def test_put_object_lock():
|
||||
|
||||
versions_response = s3_client.list_object_versions(Bucket=bucket_name)
|
||||
version_id = versions_response["Versions"][0]["VersionId"]
|
||||
until = datetime.datetime.utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
until = utcnow() + datetime.timedelta(0, seconds_lock)
|
||||
|
||||
s3_client.put_object_retention(
|
||||
Bucket=bucket_name,
|
||||
@ -275,7 +276,7 @@ def test_put_object_lock_with_versions():
|
||||
put_obj_2 = s3_client.put_object(Bucket=bucket_name, Body=b"test", Key=key_name)
|
||||
version_id_2 = put_obj_2["VersionId"]
|
||||
|
||||
until = datetime.datetime.utcnow() + datetime.timedelta(seconds=seconds_lock)
|
||||
until = utcnow() + datetime.timedelta(seconds=seconds_lock)
|
||||
|
||||
s3_client.put_object_retention(
|
||||
Bucket=bucket_name,
|
||||
|
@ -1,10 +1,10 @@
|
||||
"""Test different server responses."""
|
||||
import datetime
|
||||
import re
|
||||
import threading
|
||||
import time
|
||||
|
||||
import moto.server as server
|
||||
from moto.core.utils import utcnow
|
||||
|
||||
|
||||
def test_sqs_list_identities():
|
||||
@ -85,12 +85,12 @@ def test_no_messages_polling_timeout():
|
||||
test_client = backend.test_client()
|
||||
test_client.put(f"/?Action=CreateQueue&QueueName={queue_name}")
|
||||
wait_seconds = 5
|
||||
start = datetime.datetime.utcnow()
|
||||
start = utcnow()
|
||||
test_client.get(
|
||||
f"/123/{queue_name}?Action=ReceiveMessage&"
|
||||
f"MaxNumberOfMessages=1&WaitTimeSeconds={wait_seconds}"
|
||||
)
|
||||
end = datetime.datetime.utcnow()
|
||||
end = utcnow()
|
||||
duration = end - start
|
||||
assert duration.seconds >= wait_seconds
|
||||
assert duration.seconds <= wait_seconds + (wait_seconds / 2)
|
||||
|
@ -1,11 +1,11 @@
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import timedelta
|
||||
|
||||
import boto3
|
||||
from botocore.exceptions import ClientError
|
||||
import pytest
|
||||
|
||||
from moto import mock_swf
|
||||
from moto.core.utils import unix_time
|
||||
from moto.core.utils import unix_time, utcnow
|
||||
|
||||
|
||||
def setup_swf_environment_boto3():
|
||||
@ -244,7 +244,7 @@ def test_list_open_workflow_executions_boto3():
|
||||
runId=run_id,
|
||||
)
|
||||
|
||||
yesterday = datetime.utcnow() - timedelta(days=1)
|
||||
yesterday = utcnow() - timedelta(days=1)
|
||||
oldest_date = unix_time(yesterday)
|
||||
response = client.list_open_workflow_executions(
|
||||
domain="test-domain",
|
||||
@ -286,7 +286,7 @@ def test_list_closed_workflow_executions_boto3():
|
||||
runId=run_id,
|
||||
)
|
||||
|
||||
yesterday = datetime.utcnow() - timedelta(days=1)
|
||||
yesterday = utcnow() - timedelta(days=1)
|
||||
oldest_date = unix_time(yesterday)
|
||||
response = client.list_closed_workflow_executions(
|
||||
domain="test-domain",
|
||||
|
Loading…
x
Reference in New Issue
Block a user