Remove type=timestamp usages

This change removes the UNIXEpoch and ISO8601 Format classes from
openstack.format as well as all of their usages in Resource classes and
their tests. Additionally, this removes the need to depend on oslo.utils
and iso8601.

Change-Id: I617fb9f0739490a3401f14a654e30b33a476ca59
This commit is contained in:
Brian Curtin 2016-06-08 16:17:48 -04:00
parent 7934570373
commit a93ceb2c4a
70 changed files with 130 additions and 578 deletions

View File

@ -39,8 +39,7 @@ class Snapshot(resource.Resource):
#: Description of snapshot. Default is None.
description = resource.prop("description")
#: The timestamp of this snapshot creation.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop("created_at", type=format.ISO8601)
created_at = resource.prop("created_at")
#: Metadata associated with this snapshot.
metadata = resource.prop("metadata", type=dict)
#: The ID of the volume this snapshot was taken of.

View File

@ -68,8 +68,7 @@ class Volume(resource.Resource):
#: TODO(briancurtin): This is currently undocumented in the API.
attachments = resource.prop("attachments")
#: The timestamp of this volume creation.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop("created_at", type=format.ISO8601)
created_at = resource.prop("created_at")
class VolumeDetail(Volume):

View File

@ -12,7 +12,6 @@
from openstack.cluster import cluster_service
from openstack import format
from openstack import resource
@ -40,11 +39,9 @@ class Action(resource.Resource):
#: Interval in seconds between two consecutive executions.
interval = resource.prop('interval')
#: The time the action was started.
#: *Type: datetime object parsed from a UNIX epoch*
start_at = resource.prop('start_time', type=format.UNIXEpoch)
start_at = resource.prop('start_time')
#: The time the action completed execution.
#: *Type: datetime object parsed from a UNIX epoch*
end_at = resource.prop('end_time', type=format.UNIXEpoch)
end_at = resource.prop('end_time')
#: The timeout in seconds.
timeout = resource.prop('timeout')
#: Current status of the action.
@ -61,8 +58,6 @@ class Action(resource.Resource):
#: A list of actions that can start only after this action has finished.
depended_by = resource.prop('depended_by', type=list)
#: Timestamp when the action is created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Timestamp when the action was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -11,7 +11,6 @@
# under the License.
from openstack.cluster import cluster_service
from openstack import format
from openstack import resource
@ -36,11 +35,9 @@ class Policy(resource.Resource):
#: The type name of the policy.
type = resource.prop('type')
#: The timestamp when the policy is created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The timestamp when the policy was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')
#: The specification of the policy.
spec = resource.prop('spec', type=dict)
#: A dictionary containing runtime data of the policy.

View File

@ -11,7 +11,6 @@
# under the License.
from openstack.cluster import cluster_service
from openstack import format
from openstack import resource
@ -40,8 +39,6 @@ class Profile(resource.Resource):
#: A collection of key-value pairs that are attached to the profile.
metadata = resource.prop('metadata', type=dict)
#: Timestamp of when the profile was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Timestamp of when the profile was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,9 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack.cluster import cluster_service
from openstack import format
from openstack import resource
@ -44,11 +42,9 @@ class Receiver(resource.Resource):
#: The name of the targeted action.
action = resource.prop('action')
#: Timestamp of when the receiver was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Timestamp of when the receiver was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')
#: The credential of the impersonated user.
actor = resource.prop('actor', type=dict)
#: A dictionary containing key-value pairs that are provided to the

View File

@ -11,7 +11,6 @@
# under the License.
from openstack.compute import compute_service
from openstack import format
from openstack import resource
@ -39,5 +38,4 @@ class Extension(resource.Resource):
#: A URL pointing to the namespace for this extension.
namespace = resource.prop('namespace')
#: Timestamp when this extension was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')

View File

@ -12,7 +12,6 @@
from openstack.compute import compute_service
from openstack.compute.v2 import metadata
from openstack import format
from openstack import resource
@ -34,8 +33,7 @@ class Image(resource.Resource, metadata.MetadataMixin):
#: The name of this image.
name = resource.prop('name')
#: Timestamp when the image was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created', type=format.ISO8601)
created_at = resource.prop('created')
#: Metadata pertaining to this image. *Type: dict*
metadata = resource.prop('metadata', type=dict)
#: The mimimum disk size. *Type: int*
@ -48,8 +46,7 @@ class Image(resource.Resource, metadata.MetadataMixin):
#: The status of this image.
status = resource.prop('status')
#: Timestamp when the image was updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')
#: Size of the image in bytes. *Type: int*
size = resource.prop('OS-EXT-IMG-SIZE:size', type=int)

View File

@ -12,7 +12,6 @@
from openstack.compute import compute_service
from openstack.compute.v2 import metadata
from openstack import format
from openstack import resource
from openstack import utils
@ -41,8 +40,7 @@ class Server(resource.Resource, metadata.MetadataMixin):
#: of the IP address. *Type: dict*
addresses = resource.prop('addresses', type=dict)
#: Timestamp of when the server was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created', type=format.ISO8601)
created_at = resource.prop('created')
#: The flavor reference, as a ID or full URL, for the flavor to use for
#: this server.
flavor_id = resource.prop('flavorRef')
@ -69,8 +67,7 @@ class Server(resource.Resource, metadata.MetadataMixin):
#: ``SUSPENDED``, ``UNKNOWN``, or ``VERIFY_RESIZE``.
status = resource.prop('status')
#: Timestamp of when this server was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')
#: The user ID associated with this server.
user_id = resource.prop('user_id')

View File

@ -10,15 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import numbers
import time
from iso8601 import iso8601
import six
from oslo_utils import timeutils
class Formatter(object):
@ -33,82 +24,6 @@ class Formatter(object):
raise NotImplementedError
class ISO8601(Formatter):
@classmethod
def serialize(cls, value):
"""Convert a datetime to an ISO8601 string"""
if isinstance(value, datetime):
return value.isoformat()
elif isinstance(value, six.string_types):
# If we're already given a string, keep it as-is.
# This happens when a string comes back in a response body,
# as opposed to the datetime case above which happens when
# a user is setting a datetime for a request.
return value
else:
raise ValueError("Unable to serialize ISO8601: %s" % value)
@classmethod
def deserialize(cls, value):
"""Convert an ISO8601 string to a datetime object"""
if isinstance(value, six.string_types):
return timeutils.parse_isotime(value)
else:
raise ValueError("Unable to deserialize ISO8601: %s" % value)
class UNIXEpoch(Formatter):
EPOCH = datetime(1970, 1, 1, tzinfo=iso8601.UTC)
@classmethod
def serialize(cls, value):
"""Convert a datetime to a UNIX epoch"""
if isinstance(value, datetime):
# Do not try to format using %s as it's platform dependent.
return (value - cls.EPOCH).total_seconds()
elif isinstance(value, numbers.Number):
return value
else:
raise ValueError("Unable to serialize UNIX epoch: %s" % value)
@classmethod
def deserialize(cls, value):
"""Convert a UNIX epoch into a datetime object"""
try:
value = float(value)
except ValueError:
raise ValueError("Unable to deserialize UNIX epoch: %s" % value)
# gmtime doesn't respect microseconds so we need to parse them out
# if they're there and build the datetime appropriately with the
# proper precision.
# NOTES:
# 1. datetime.fromtimestamp sort of solves this but using localtime
# instead of UTC, which we need.
# 2. On Python 2 we can't just str(value) as it truncates digits
# that are significant to us.
parsed_value = "%000000f" % value
decimal = parsed_value.find(".")
if decimal == -1:
microsecond = 0
else:
# Some examples of these timestamps include less precision
# than the allowable 6 digits that can represent microseconds,
# so since we have a string we need to construct a real
# count of microseconds instead of just converting the
# stringified amount to an int.
fractional_second = float(parsed_value[decimal:]) * 1e6
microsecond = int(fractional_second)
gmt = time.gmtime(value)
return datetime(*gmt[:6], microsecond=microsecond,
tzinfo=iso8601.UTC)
class BoolStr(Formatter):
@classmethod

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.identity import identity_service
from openstack import resource
@ -42,8 +41,7 @@ class Extension(resource.Resource):
#: *Type: string*
namespace = resource.prop('namespace')
#: The last time the extension has been modified (update date).
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')
@classmethod
def list(cls, session, **params):

View File

@ -11,7 +11,6 @@
# under the License.
from openstack import format
from openstack.identity import identity_service
from openstack import resource
@ -35,8 +34,7 @@ class Trust(resource.Resource):
#: Specifies the expiration time of the trust. A trust may be revoked
#: ahead of expiration. If the value represents a time in the past,
#: the trust is deactivated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
expires_at = resource.prop('expires_at', type=format.ISO8601)
expires_at = resource.prop('expires_at')
#: ID of the trust object. *Type: string*
id = resource.prop('id')
#: If ``impersonation`` is set to true, then the ``user`` attribute

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.image import image_service
from openstack import resource
@ -40,8 +39,7 @@ class Image(resource.Resource):
#: A URL to copy an image from
copy_from = resource.prop('copy_from')
#: The timestamp when this image was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Valid values are: aki, ari, ami, raw, iso, vhd, vdi, qcow2, or vmdk.
#: The disk format of a VM image is the format of the underlying
#: disk image. Virtual appliance vendors have different formats for
@ -72,5 +70,4 @@ class Image(resource.Resource):
#: The image status.
status = resource.prop('status')
#: The timestamp when this image was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.image import image_service
from openstack import resource
from openstack import utils
@ -44,8 +43,7 @@ class Image(resource.Resource):
#: the image is just a blob of unstructured data.
container_format = resource.prop('container_format')
#: The date and time when the image was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Valid values are: aki, ari, ami, raw, iso, vhd, vdi, qcow2, or vmdk.
#: The disk format of a VM image is the format of the underlying
#: disk image. Virtual appliance vendors have different formats
@ -75,8 +73,7 @@ class Image(resource.Resource):
#: Tags, if any, that are associated with the image.
tags = resource.prop('tags')
#: The date and time when the image was updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')
#: The virtual size of the image.
virtual_size = resource.prop('virtual_size')
#: The image visibility.

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.image import image_service
from openstack import resource
@ -30,12 +29,10 @@ class Member(resource.Resource):
# Properties
#: The date and time when the member was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: Image ID stored through the image API. Typically a UUID.
image_id = resource.prop('image_id')
#: The status of the image.
status = resource.prop('status')
#: The date and time when the member was updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.key_manager import key_manager_service
from openstack import resource
@ -32,8 +31,7 @@ class Container(resource.Resource):
#: A URI for this container
container_ref = resource.prop('container_ref')
#: The timestamp when this container was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created', type=format.ISO8601)
created_at = resource.prop('created')
#: The name of this container
name = resource.prop('name')
#: A list of references to secrets in this container
@ -43,5 +41,4 @@ class Container(resource.Resource):
#: The type of this container
type = resource.prop('type')
#: The timestamp when this container was updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.key_manager import key_manager_service
from openstack import resource
@ -37,8 +36,7 @@ class Secret(resource.Resource):
#: A list of content types
content_types = resource.prop('content_types')
#: Once this timestamp has past, the secret will no longer be available.
#: *Type: datetime object parsed from ISO 8601 formatted string*
expires_at = resource.prop('expiration', type=format.ISO8601)
expires_at = resource.prop('expiration')
#: The type/mode of the algorithm associated with the secret information.
mode = resource.prop('mode')
#: The name of the secret set by the user
@ -48,5 +46,4 @@ class Secret(resource.Resource):
#: The status of this secret
status = resource.prop('status')
#: A timestamp when this secret was updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')

View File

@ -9,7 +9,7 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.metric import metric_service
from openstack import resource
@ -37,13 +37,9 @@ class Generic(resource.Resource):
#: The ID of the project
project_id = resource.prop('project_id')
#: Timestamp when this resource was started
#: *Type: datetime object parsed from ISO 8601 formatted string*
started_at = resource.prop('started_at',
type=format.ISO8601)
started_at = resource.prop('started_at')
#: Timestamp when this resource was ended
#: *Type: datetime object parsed from ISO 8601 formatted string*
ended_at = resource.prop('ended_at',
type=format.ISO8601)
ended_at = resource.prop('ended_at')
#: A dictionary of metrics collected on this resource
metrics = resource.prop('metrics', type=dict)

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -38,14 +37,11 @@ class Agent(resource.Resource):
#: Network agent configuration data specific to the agent_type.
configuration = resource.prop('configurations')
#: Timestamp when the network agent was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The network agent description.
description = resource.prop('description')
#: Timestamp when the network agent's heartbeat was last seen.
#: *Type: datetime object parsed from ISO 8601 formatted string*
last_heartbeat_at = resource.prop('heartbeat_timestamp',
type=format.ISO8601)
last_heartbeat_at = resource.prop('heartbeat_timestamp')
#: The host the agent is running on.
host = resource.prop('host')
#: The administrative state of the network agent, which is up
@ -55,7 +51,6 @@ class Agent(resource.Resource):
#: *Type: bool*
is_alive = resource.prop('alive', type=bool)
#: Timestamp when the network agent was last started.
#: *Type: datetime object parsed from ISO 8601 formatted string*
started_at = resource.prop('started_at', type=format.ISO8601)
started_at = resource.prop('started_at')
#: The messaging queue topic the network agent subscribes to.
topic = resource.prop('topic')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -38,5 +37,4 @@ class Extension(resource.Resource):
#: A URL pointing to the namespace for this extension.
namespace = resource.prop('namespace')
#: Timestamp when the extension was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated', type=format.ISO8601)
updated_at = resource.prop('updated')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -36,8 +35,7 @@ class Network(resource.Resource):
#: *Type: list of availability zone names*
availability_zones = resource.prop('availability_zones')
#: Timestamp when the network was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The network description.
description = resource.prop('description')
#: The ID of the IPv4 address scope for the network.
@ -85,5 +83,4 @@ class Network(resource.Resource):
#: *Type: list of strs of the subnet IDs*
subnet_ids = resource.prop('subnets', type=list)
#: Timestamp when the network was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -58,8 +57,7 @@ class Port(resource.Resource):
#: visible to only port owners and administrative users.
binding_vnic_type = resource.prop('binding:vnic_type')
#: Timestamp when the port was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The port description.
description = resource.prop('description')
#: Device ID of this port.
@ -97,5 +95,4 @@ class Port(resource.Resource):
#: The port status. Value is ``ACTIVE`` or ``DOWN``.
status = resource.prop('status')
#: Timestamp when the port was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -34,8 +33,7 @@ class Subnet(resource.Resource):
#: The CIDR.
cidr = resource.prop('cidr')
#: Timestamp when the subnet was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The subnet description.
description = resource.prop('description')
#: A list of DNS nameservers.
@ -63,5 +61,4 @@ class Subnet(resource.Resource):
#: The subnet pool ID from which to obtain a CIDR.
subnet_pool_id = resource.prop('subnetpool_id')
#: Timestamp when the subnet was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.network import network_service
from openstack import resource
@ -32,8 +31,7 @@ class SubnetPool(resource.Resource):
#: The ID of the address scope associated with the subnet pool.
address_scope_id = resource.prop('address_scope_id')
#: Timestamp when the subnet pool was created.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('created_at', type=format.ISO8601)
created_at = resource.prop('created_at')
#: The length of the prefix to allocate when the cidr or prefixlen
#: attributes are omitted when creating a subnet. *Type: int*
default_prefix_length = resource.prop('default_prefixlen', type=int)
@ -69,5 +67,4 @@ class SubnetPool(resource.Resource):
#: *Type: list*
prefixes = resource.prop('prefixes', type=list)
#: Timestamp when the subnet pool was last updated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_at', type=format.ISO8601)
updated_at = resource.prop('updated_at')

View File

@ -11,7 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.object_store.v1 import _base
from openstack import resource
@ -40,5 +39,4 @@ class Account(_base.BaseResource):
#: this header is not returned by this operation.
meta_temp_url_key_2 = resource.header("x-account-meta-temp-url-key-2")
#: The timestamp of the transaction.
#: *Type: datetime object parsed from a UNIX epoch*
timestamp = resource.header("x-timestamp", type=format.UNIXEpoch)
timestamp = resource.header("x-timestamp")

View File

@ -11,7 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.object_store.v1 import _base
from openstack import resource
@ -53,8 +52,7 @@ class Container(_base.BaseResource):
#: The count of bytes used in total.
bytes_used = resource.header("x-container-bytes-used", type=int)
#: The timestamp of the transaction.
#: *Type: datetime object parsed from a UNIX epoch*
timestamp = resource.header("x-timestamp", type=format.UNIXEpoch)
timestamp = resource.header("x-timestamp")
# Request headers (when id=None)
#: If set to True, Object Storage queries all replicas to return the

View File

@ -13,7 +13,6 @@
import copy
from openstack import format
from openstack.object_store import object_store_service
from openstack.object_store.v1 import _base
from openstack import resource
@ -82,8 +81,7 @@ class Object(_base.BaseResource):
#: Used with temporary URLs to specify the expiry time of the
#: signature. For more information about temporary URLs, see
#: OpenStack Object Storage API v1 Reference.
#: *Type: datetime object parsed from ISO 8601 formatted string*
expires_at = resource.header("expires", type=format.ISO8601)
expires_at = resource.header("expires")
#: If you include the multipart-manifest=get query parameter and
#: the object is a large object, the object contents are not
#: returned. Instead, the manifest is returned in the
@ -133,15 +131,13 @@ class Object(_base.BaseResource):
#: If set, the time when the object will be deleted by the system
#: in the format of a UNIX Epoch timestamp.
#: If not set, this header is not returned by this operation.
#: *Type: datetime object parsed from a UNIX epoch*
delete_at = resource.header("x-delete-at", type=format.UNIXEpoch)
delete_at = resource.header("x-delete-at")
#: If set, to this is a dynamic large object manifest object.
#: The value is the container and object name prefix of the
#: segment objects in the form container/prefix.
object_manifest = resource.header("x-object-manifest")
#: The timestamp of the transaction.
#: *Type: datetime object parsed from a UNIX epoch*
timestamp = resource.header("x-timestamp", type=format.UNIXEpoch)
timestamp = resource.header("x-timestamp")
#: The date and time that the object was created or the last
#: time that the metadata was changed.
last_modified_at = resource.header("last_modified", alias="last-modified")

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack.orchestration import orchestration_service
from openstack import resource
@ -52,5 +51,4 @@ class Resource(resource.Resource):
#: A string that explains why the resource is in its current status.
status_reason = resource.prop('resource_status_reason')
#: Timestamp of the last update made to the resource.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_time', type=format.ISO8601)
updated_at = resource.prop('updated_time')

View File

@ -11,7 +11,6 @@
# under the License.
from openstack import exceptions
from openstack import format
from openstack.orchestration import orchestration_service
from openstack import resource
from openstack import utils
@ -37,8 +36,7 @@ class Stack(resource.Resource):
#: required by the stack.
capabilities = resource.prop('capabilities')
#: Timestamp of the stack creation.
#: *Type: datetime object parsed from ISO 8601 formatted string*
created_at = resource.prop('creation_time', type=format.ISO8601)
created_at = resource.prop('creation_time')
#: A text description of the stack.
description = resource.prop('description')
#: Whether the stack will support a rollback operation on stack
@ -67,8 +65,7 @@ class Stack(resource.Resource):
#: Stack operation timeout in minutes.
timeout_mins = resource.prop('timeout_mins')
#: Timestamp of last update on the stack.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('updated_time', type=format.ISO8601)
updated_at = resource.prop('updated_time')
def _action(self, session, body):
"""Perform stack actions"""

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack import resource
from openstack.telemetry import telemetry_service
from openstack import utils
@ -56,8 +55,7 @@ class Alarm(resource.Resource):
#: The state off the alarm
state = resource.prop('state')
#: The timestamp of the last alarm state change.
#: *Type: datetime object parsed from ISO 8601 formatted string*
state_changed_at = resource.prop('state_timestamp', type=format.ISO8601)
state_changed_at = resource.prop('state_timestamp')
# TODO(briancurtin): undocumented
threshold_rule = resource.prop('threshold_rule', type=dict)
#: Describe time constraints for the alarm
@ -65,8 +63,7 @@ class Alarm(resource.Resource):
#: Explicit type specifier to select which rule to follow
type = resource.prop('type')
#: The timestamp of the last alarm definition update.
#: *Type: datetime object parsed from ISO 8601 formatted string*
updated_at = resource.prop('timestamp', type=format.ISO8601)
updated_at = resource.prop('timestamp')
#: The ID of the user who created the alarm
user_id = resource.prop('user_id')

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack import resource
from openstack.telemetry import telemetry_service
@ -37,8 +36,7 @@ class AlarmChange(resource.Resource):
#: The project ID of the initiating identity
project_id = resource.prop('project_id')
#: The time/date of the alarm change.
#: *Type: datetime object parsed from ISO 8601 formatted string*
triggered_at = resource.prop('timestamp', type=format.ISO8601)
triggered_at = resource.prop('timestamp')
#: The type of change
type = resource.prop('type')
#: The user ID of the initiating identity

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack import resource
from openstack.telemetry import telemetry_service
@ -28,14 +27,10 @@ class Resource(resource.Resource):
# Properties
#: UTC date & time not later than the first sample known
#: for this resource.
#: *Type: datetime object parsed from ISO 8601 formatted string*
first_sample_at = resource.prop('first_sample_timestamp',
type=format.ISO8601)
first_sample_at = resource.prop('first_sample_timestamp')
#: UTC date & time not earlier than the last sample known
#: for this resource.
#: *Type: datetime object parsed from ISO 8601 formatted string*
last_sample_at = resource.prop('last_sample_timestamp',
type=format.ISO8601)
last_sample_at = resource.prop('last_sample_timestamp')
#: A list containing a self link and associated meter links
links = resource.prop('links')
#: Arbitrary metadata associated with the resource

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack import resource
from openstack.telemetry import telemetry_service
@ -29,15 +28,13 @@ class Sample(resource.Resource):
#: The meter name this sample is for
counter_name = resource.prop('meter', alias='counter_name')
#: When the sample has been generated.
#: *Type: datetime object parsed from ISO 8601 formatted string*
generated_at = resource.prop('timestamp', type=format.ISO8601)
generated_at = resource.prop('timestamp')
#: Arbitrary metadata associated with the sample
metadata = resource.prop('metadata', alias='resource_metadata')
#: The ID of the project this sample was taken for
project_id = resource.prop('project_id')
#: When the sample has been recorded.
#: *Type: datetime object parsed from ISO 8601 formatted string*
recorded_at = resource.prop('recorded_at', type=format.ISO8601)
recorded_at = resource.prop('recorded_at')
#: The ID of the resource this sample was taken for
resource_id = resource.prop('resource_id')
#: The name of the source that identifies where the sample comes from

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from openstack import format
from openstack import resource
from openstack.telemetry import telemetry_service
@ -38,11 +37,9 @@ class Statistics(resource.Resource):
#: The difference, in seconds, between the oldest and newest timestamp
duration = resource.prop('duration')
#: UTC date and time of the oldest timestamp, or the query end time.
#: *Type: datetime object parsed from ISO 8601 formatted string*
duration_end_at = resource.prop('duration_end', type=format.ISO8601)
duration_end_at = resource.prop('duration_end')
#: UTC date and time of the earliest timestamp, or the query start time.
#: *Type: datetime object parsed from ISO 8601 formatted string*
duration_start_at = resource.prop('duration_start', type=format.ISO8601)
duration_start_at = resource.prop('duration_start')
#: Dictionary of field names for group, if groupby statistics are requested
group_by = resource.prop('groupby')
#: The maximum volume seen in the data
@ -52,11 +49,9 @@ class Statistics(resource.Resource):
#: The difference, in seconds, between the period start and end
period = resource.prop('period')
#: UTC date and time of the period end.
#: *Type: datetime object parsed from ISO 8601 formatted string*
period_end_at = resource.prop('period_end', type=format.ISO8601)
period_end_at = resource.prop('period_end')
#: UTC date and time of the period start.
#: *Type: datetime object parsed from ISO 8601 formatted string*
period_start_at = resource.prop('period_start', type=format.ISO8601)
period_start_at = resource.prop('period_start')
#: The total of all of the volume values seen in the data
sum = resource.prop('sum')
#: The unit type of the data set

View File

@ -10,7 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import uuid
from openstack.tests.functional import base
@ -80,7 +79,6 @@ class TestObject(base.BaseFunctionalTest):
self.assertEqual('v0', obj.metadata['k0'])
self.assertEqual('attachment', obj.content_disposition)
self.assertEqual('deflate', obj.content_encoding)
self.assertIsInstance(obj.delete_at, datetime.datetime)
# unset system metadata
self.conn.object_store.delete_object_metadata(

View File

@ -9,7 +9,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
@ -58,9 +57,7 @@ class TestSnapshot(testtools.TestCase):
sot = snapshot.Snapshot(SNAPSHOT)
self.assertEqual(SNAPSHOT["id"], sot.id)
self.assertEqual(SNAPSHOT["status"], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(SNAPSHOT["created_at"], sot.created_at)
self.assertEqual(SNAPSHOT["metadata"], sot.metadata)
self.assertEqual(SNAPSHOT["volume_id"], sot.volume_id)
self.assertEqual(SNAPSHOT["size"], sot.size)

View File

@ -11,7 +11,6 @@
# under the License.
import copy
import datetime
import testtools
@ -74,9 +73,7 @@ class TestVolume(testtools.TestCase):
self.assertEqual(VOLUME["attachments"], sot.attachments)
self.assertEqual(VOLUME["availability_zone"], sot.availability_zone)
self.assertFalse(sot.is_bootable)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(VOLUME["created_at"], sot.created_at)
self.assertEqual(VOLUME["description"], sot.description)
self.assertEqual(VOLUME["volume_type"], sot.volume_type)
self.assertEqual(VOLUME["snapshot_id"], sot.snapshot_id)

View File

@ -10,9 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import iso8601
import testtools
from openstack.cluster.v1 import action
@ -65,12 +62,8 @@ class TestAction(testtools.TestCase):
self.assertEqual(FAKE['cause'], sot.cause)
self.assertEqual(FAKE['owner'], sot.owner_id)
self.assertEqual(FAKE['interval'], sot.interval)
self.assertEqual(datetime.datetime(2016, 1, 21, 22, 7, 35, 486720,
tzinfo=iso8601.UTC),
sot.start_at)
self.assertEqual(datetime.datetime(2016, 1, 21, 22, 7, 35, 486720,
tzinfo=iso8601.UTC),
sot.end_at)
self.assertEqual(FAKE['start_time'], sot.start_at)
self.assertEqual(FAKE['end_time'], sot.end_at)
self.assertEqual(FAKE['timeout'], sot.timeout)
self.assertEqual(FAKE['status'], sot.status)
self.assertEqual(FAKE['status_reason'], sot.status_reason)
@ -78,9 +71,5 @@ class TestAction(testtools.TestCase):
self.assertEqual(FAKE['outputs'], sot.outputs)
self.assertEqual(FAKE['depends_on'], sot.depends_on)
self.assertEqual(FAKE['depended_by'], sot.depended_by)
dt = datetime.datetime(2015, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['created_at'], sot.created_at)
self.assertEqual(FAKE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.cluster.v1 import policy
@ -62,9 +60,5 @@ class TestPolicy(testtools.TestCase):
self.assertEqual(FAKE['name'], sot.name)
self.assertEqual(FAKE['spec'], sot.spec)
self.assertEqual(FAKE['data'], sot.data)
dt = datetime.datetime(2015, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['created_at'], sot.created_at)
self.assertEqual(FAKE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.cluster.v1 import profile
@ -65,9 +63,5 @@ class TestProfile(testtools.TestCase):
self.assertEqual(FAKE['metadata'], sot.metadata)
self.assertEqual(FAKE['spec'], sot.spec)
self.assertEqual(FAKE['type'], sot.type_name)
dt = datetime.datetime(2015, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['created_at'], sot.created_at)
self.assertEqual(FAKE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.cluster.v1 import receiver
@ -66,12 +64,8 @@ class TestReceiver(testtools.TestCase):
self.assertEqual(FAKE['cluster_id'], sot.cluster_id)
self.assertEqual(FAKE['action'], sot.action)
self.assertEqual(FAKE['params'], sot.params)
dt = datetime.datetime(2015, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 10, 10, 12, 46, 36, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['created_at'], sot.created_at)
self.assertEqual(FAKE['updated_at'], sot.updated_at)
self.assertEqual(FAKE['user'], sot.user_id)
self.assertEqual(FAKE['project'], sot.project_id)
self.assertEqual(FAKE['domain'], sot.domain_id)

View File

@ -9,7 +9,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
@ -48,6 +47,4 @@ class TestExtension(testtools.TestCase):
self.assertEqual(EXAMPLE['links'], sot.links)
self.assertEqual(EXAMPLE['name'], sot.name)
self.assertEqual(EXAMPLE['namespace'], sot.namespace)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)

View File

@ -9,7 +9,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
@ -71,9 +70,7 @@ class TestImage(testtools.TestCase):
def test_make_detail(self):
sot = image.ImageDetail(DETAIL_EXAMPLE)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(DETAIL_EXAMPLE['created'], sot.created_at)
self.assertEqual(DETAIL_EXAMPLE['id'], sot.id)
self.assertEqual(DETAIL_EXAMPLE['links'], sot.links)
self.assertEqual(DETAIL_EXAMPLE['metadata'], sot.metadata)
@ -82,7 +79,5 @@ class TestImage(testtools.TestCase):
self.assertEqual(DETAIL_EXAMPLE['name'], sot.name)
self.assertEqual(DETAIL_EXAMPLE['progress'], sot.progress)
self.assertEqual(DETAIL_EXAMPLE['status'], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(DETAIL_EXAMPLE['updated'], sot.updated_at)
self.assertEqual(DETAIL_EXAMPLE['OS-EXT-IMG-SIZE:size'], sot.size)

View File

@ -11,7 +11,6 @@
# under the License.
import copy
import datetime
import mock
import testtools
@ -66,9 +65,7 @@ class TestServer(testtools.TestCase):
self.assertEqual(EXAMPLE['accessIPv4'], sot.access_ipv4)
self.assertEqual(EXAMPLE['accessIPv6'], sot.access_ipv6)
self.assertEqual(EXAMPLE['addresses'], sot.addresses)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created'], sot.created_at)
self.assertEqual(EXAMPLE['flavorRef'], sot.flavor_id)
self.assertEqual(EXAMPLE['hostId'], sot.host_id)
self.assertEqual(EXAMPLE['id'], sot.id)
@ -79,9 +76,7 @@ class TestServer(testtools.TestCase):
self.assertEqual(EXAMPLE['progress'], sot.progress)
self.assertEqual(EXAMPLE['tenant_id'], sot.project_id)
self.assertEqual(EXAMPLE['status'], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)
self.assertEqual(EXAMPLE['user_id'], sot.user_id)
def test_detail(self):

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -49,9 +47,7 @@ class TestExtension(testtools.TestCase):
self.assertEqual(EXAMPLE['links'], sot.links)
self.assertEqual(EXAMPLE['name'], sot.name)
self.assertEqual(EXAMPLE['namespace'], sot.namespace)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)
def test_list(self):
resp = mock.Mock()

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.identity.v3 import trust
@ -46,9 +44,7 @@ class TestTrust(testtools.TestCase):
sot = trust.Trust(EXAMPLE)
self.assertEqual(EXAMPLE['project_id'],
sot.project_id)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.expires_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['expires_at'], sot.expires_at)
self.assertEqual(EXAMPLE['id'], sot.id)
self.assertTrue(sot.is_impersonation)
self.assertEqual(EXAMPLE['trustee_user_id'], sot.trustee_user_id)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.image.v1 import image
@ -69,9 +67,5 @@ class TestImage(testtools.TestCase):
self.assertTrue(sot.is_protected)
self.assertEqual(EXAMPLE['size'], sot.size)
self.assertEqual(EXAMPLE['status'], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -56,9 +54,7 @@ class TestImage(testtools.TestCase):
self.assertEqual(IDENTIFIER, sot.id)
self.assertEqual(EXAMPLE['checksum'], sot.checksum)
self.assertEqual(EXAMPLE['container_format'], sot.container_format)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['disk_format'], sot.disk_format)
self.assertEqual(EXAMPLE['min_disk'], sot.min_disk)
self.assertEqual(EXAMPLE['name'], sot.name)
@ -67,9 +63,7 @@ class TestImage(testtools.TestCase):
self.assertFalse(sot.is_protected)
self.assertEqual(EXAMPLE['status'], sot.status)
self.assertEqual(EXAMPLE['tags'], sot.tags)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)
self.assertEqual(EXAMPLE['virtual_size'], sot.virtual_size)
self.assertEqual(EXAMPLE['visibility'], sot.visibility)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.image.v2 import member
@ -43,11 +41,7 @@ class TestMember(testtools.TestCase):
def test_make_it(self):
sot = member.Member(EXAMPLE)
self.assertEqual(IDENTIFIER, sot.id)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['image_id'], sot.image_id)
self.assertEqual(EXAMPLE['status'], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.key_manager.v1 import container
@ -45,14 +43,10 @@ class TestContainer(testtools.TestCase):
def test_make_it(self):
sot = container.Container(EXAMPLE)
self.assertEqual(EXAMPLE['container_ref'], sot.container_ref)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created'], sot.created_at)
self.assertEqual(EXAMPLE['name'], sot.name)
self.assertEqual(EXAMPLE['secret_refs'], sot.secret_refs)
self.assertEqual(EXAMPLE['status'], sot.status)
self.assertEqual(EXAMPLE['type'], sot.type)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)
self.assertEqual(EXAMPLE['container_ref'], sot.id)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.key_manager.v1 import secret
@ -49,14 +47,10 @@ class TestSecret(testtools.TestCase):
self.assertEqual(EXAMPLE['algorithm'], sot.algorithm)
self.assertEqual(EXAMPLE['bit_length'], sot.bit_length)
self.assertEqual(EXAMPLE['content_types'], sot.content_types)
dt = datetime.datetime(2017, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.expires_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['expiration'], sot.expires_at)
self.assertEqual(EXAMPLE['mode'], sot.mode)
self.assertEqual(EXAMPLE['name'], sot.name)
self.assertEqual(EXAMPLE['secret_ref'], sot.secret_ref)
self.assertEqual(EXAMPLE['status'], sot.status)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)
self.assertEqual(EXAMPLE['secret_ref'], sot.id)

View File

@ -9,7 +9,6 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
@ -53,7 +52,5 @@ class TestResource(testtools.TestCase):
self.assertEqual(EXAMPLE_GENERIC['type'], r.type)
self.assertEqual(EXAMPLE_GENERIC['id'], r.id)
self.assertEqual(EXAMPLE_GENERIC['metrics'], r.metrics)
dt = datetime.datetime(2015, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, r.started_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE_GENERIC['started_at'], r.started_at)
self.assertEqual(EXAMPLE_GENERIC['ended_at'], r.ended_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import agent
@ -57,17 +55,10 @@ class TestAgent(testtools.TestCase):
sot.availability_zone)
self.assertEqual(EXAMPLE['binary'], sot.binary)
self.assertEqual(EXAMPLE['configurations'], sot.configuration)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 8, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt,
sot.last_heartbeat_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['heartbeat_timestamp'], sot.last_heartbeat_at)
self.assertEqual(EXAMPLE['host'], sot.host)
self.assertEqual(EXAMPLE['id'], sot.id)
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.started_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['started_at'], sot.started_at)
self.assertEqual(EXAMPLE['topic'], sot.topic)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import extension
@ -49,6 +47,4 @@ class TestExtension(testtools.TestCase):
self.assertEqual(EXAMPLE['links'], sot.links)
self.assertEqual(EXAMPLE['name'], sot.name)
self.assertEqual(EXAMPLE['namespace'], sot.namespace)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['updated'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import network
@ -85,10 +83,6 @@ class TestNetwork(testtools.TestCase):
self.assertEqual(EXAMPLE['ipv6_address_scope'],
sot.ipv6_address_scope_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)
self.assertFalse(sot.is_default)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import port
@ -85,9 +83,5 @@ class TestPort(testtools.TestCase):
self.assertEqual(EXAMPLE['dns_assignment'], sot.dns_assignment)
self.assertEqual(EXAMPLE['dns_name'], sot.dns_name)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import subnet
@ -69,9 +67,5 @@ class TestSubnet(testtools.TestCase):
self.assertEqual(EXAMPLE['tenant_id'], sot.project_id)
self.assertEqual(EXAMPLE['subnetpool_id'], sot.subnet_pool_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.network.v2 import subnet_pool
@ -67,10 +65,6 @@ class TestSubnetpool(testtools.TestCase):
self.assertTrue(sot.is_shared)
self.assertEqual(EXAMPLE['address_scope_id'], sot.address_scope_id)
self.assertEqual(EXAMPLE['description'], sot.description)
dt = datetime.datetime(2016, 3, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
dt = datetime.datetime(2016, 7, 9, 12, 14, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['created_at'], sot.created_at)
self.assertEqual(EXAMPLE['updated_at'], sot.updated_at)
self.assertTrue(sot.is_default)

View File

@ -10,9 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import iso8601
import testtools
from openstack.object_store.v1 import account
@ -56,6 +53,4 @@ class TestAccount(testtools.TestCase):
sot.account_container_count)
self.assertEqual(int(ACCOUNT_EXAMPLE['x-account-object-count']),
sot.account_object_count)
self.assertEqual(datetime(2016, 1, 21, 21, 59, 15, 889370,
tzinfo=iso8601.UTC),
sot.timestamp)
self.assertEqual(ACCOUNT_EXAMPLE['x-timestamp'], sot.timestamp)

View File

@ -10,9 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import iso8601
import mock
import testtools
@ -116,9 +113,7 @@ class TestContainer(testtools.TestCase):
sot.sync_key)
self.assertEqual(HEAD_EXAMPLE['x-versions-location'],
sot.versions_location)
self.assertEqual(datetime(2016, 1, 21, 22, 7, 35, 486720,
tzinfo=iso8601.UTC),
sot.timestamp)
self.assertEqual(HEAD_EXAMPLE['x-timestamp'], sot.timestamp)
@mock.patch("openstack.resource.Resource.list")
def test_list(self, fake_list):

View File

@ -10,9 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import iso8601
import mock
import testtools
@ -98,13 +95,9 @@ class TestObject(testtools.TestCase):
self.assertEqual(headers['accept-ranges'], sot.accept_ranges)
self.assertEqual(headers['last-modified'], sot.last_modified_at)
self.assertEqual(headers['etag'], sot.etag)
self.assertEqual(datetime(2016, 1, 21, 22, 10, 56, 281120,
tzinfo=iso8601.UTC),
sot.timestamp)
self.assertEqual(headers['x-timestamp'], sot.timestamp)
self.assertEqual(headers['content-type'], sot.content_type)
self.assertEqual(datetime(2016, 1, 21, 22, 43, 46, 167440,
tzinfo=iso8601.UTC),
sot.delete_at)
self.assertEqual(headers['x-delete-at'], sot.delete_at)
def test_get(self):
sot = obj.Object.new(container=CONTAINER_NAME, name=OBJECT_NAME)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.orchestration.v1 import resource
@ -64,6 +62,4 @@ class TestResource(testtools.TestCase):
self.assertEqual(FAKE['resource_type'], sot.resource_type)
self.assertEqual(FAKE['status'], sot.status)
self.assertEqual(FAKE['status_reason'], sot.status_reason)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['updated_time'], sot.updated_at)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import six
import testtools
@ -69,9 +67,7 @@ class TestStack(testtools.TestCase):
def test_make_it(self):
sot = stack.Stack(FAKE)
self.assertEqual(FAKE['capabilities'], sot.capabilities)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.created_at.replace(tzinfo=None))
self.assertEqual(FAKE['creation_time'], sot.created_at)
self.assertEqual(FAKE['description'], sot.description)
self.assertTrue(sot.is_rollback_disabled)
self.assertEqual(FAKE['id'], sot.id)
@ -89,9 +85,7 @@ class TestStack(testtools.TestCase):
self.assertEqual(FAKE['template_url'],
sot.template_url)
self.assertEqual(FAKE['timeout_mins'], sot.timeout_mins)
dt = datetime.datetime(2015, 3, 9, 12, 30, 00, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(FAKE['updated_time'], sot.updated_at)
def test_create(self):
resp = mock.Mock()

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -84,12 +82,8 @@ class TestAlarm(testtools.TestCase):
self.assertFalse(sot.is_repeat_actions)
self.assertEqual(EXAMPLE['severity'], sot.severity)
self.assertEqual(EXAMPLE['state'], sot.state)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.state_changed_at.replace(tzinfo=None))
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.updated_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['state_timestamp'], sot.state_changed_at)
self.assertEqual(EXAMPLE['timestamp'], sot.updated_at)
self.assertEqual(EXAMPLE['threshold_rule'], sot.threshold_rule)
self.assertEqual(EXAMPLE['time_constraints'], sot.time_constraints)
self.assertEqual(EXAMPLE['type'], sot.type)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -52,9 +50,7 @@ class TestAlarmChange(testtools.TestCase):
self.assertEqual(IDENTIFIER, sot.event_id)
self.assertEqual(EXAMPLE['on_behalf_of'], sot.on_behalf_of_id)
self.assertEqual(EXAMPLE['project_id'], sot.project_id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.triggered_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['timestamp'], sot.triggered_at)
self.assertEqual(EXAMPLE['type'], sot.type)
self.assertEqual(EXAMPLE['user_id'], sot.user_id)
@ -73,8 +69,6 @@ class TestAlarmChange(testtools.TestCase):
self.assertEqual(IDENTIFIER, first.event_id)
self.assertEqual(EXAMPLE['on_behalf_of'], first.on_behalf_of_id)
self.assertEqual(EXAMPLE['project_id'], first.project_id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, first.triggered_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['timestamp'], first.triggered_at)
self.assertEqual(EXAMPLE['type'], first.type)
self.assertEqual(EXAMPLE['user_id'], first.user_id)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import testtools
from openstack.telemetry.v2 import resource
@ -48,12 +46,10 @@ class TestResource(testtools.TestCase):
def test_make_it(self):
sot = resource.Resource(EXAMPLE)
self.assertEqual(EXAMPLE['resource_id'], sot.id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.first_sample_at.replace(tzinfo=None))
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.last_sample_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['first_sample_timestamp'],
sot.first_sample_at)
self.assertEqual(EXAMPLE['last_sample_timestamp'],
sot.last_sample_at)
self.assertEqual(EXAMPLE['links'], sot.links)
self.assertEqual(EXAMPLE['metadata'], sot.metadata)
self.assertEqual(EXAMPLE['project_id'], sot.project_id)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -68,14 +66,10 @@ class TestSample(testtools.TestCase):
self.assertEqual(SAMPLE['metadata'], sot.metadata)
self.assertEqual(SAMPLE['counter_name'], sot.counter_name)
self.assertEqual(SAMPLE['project_id'], sot.project_id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.recorded_at.replace(tzinfo=None))
self.assertEqual(SAMPLE['recorded_at'], sot.recorded_at)
self.assertEqual(SAMPLE['resource_id'], sot.resource_id)
self.assertEqual(SAMPLE['source'], sot.source)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.generated_at.replace(tzinfo=None))
self.assertEqual(SAMPLE['timestamp'], sot.generated_at)
self.assertEqual(SAMPLE['type'], sot.type)
self.assertEqual(SAMPLE['unit'], sot.unit)
self.assertEqual(SAMPLE['user_id'], sot.user_id)
@ -89,15 +83,11 @@ class TestSample(testtools.TestCase):
self.assertEqual(OLD_SAMPLE['counter_unit'], sot.unit)
self.assertEqual(OLD_SAMPLE['counter_volume'], sot.volume)
self.assertEqual(OLD_SAMPLE['project_id'], sot.project_id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.recorded_at.replace(tzinfo=None))
self.assertEqual(OLD_SAMPLE['recorded_at'], sot.recorded_at)
self.assertEqual(OLD_SAMPLE['resource_id'], sot.resource_id)
self.assertEqual(OLD_SAMPLE['resource_metadata'], sot.metadata)
self.assertEqual(OLD_SAMPLE['source'], sot.source)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, sot.generated_at.replace(tzinfo=None))
self.assertEqual(OLD_SAMPLE['timestamp'], sot.generated_at)
self.assertEqual(OLD_SAMPLE['user_id'], sot.user_id)
def test_list(self):
@ -113,14 +103,10 @@ class TestSample(testtools.TestCase):
self.assertEqual(SAMPLE['metadata'], first.metadata)
self.assertEqual(SAMPLE['counter_name'], first.counter_name)
self.assertEqual(SAMPLE['project_id'], first.project_id)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, first.recorded_at.replace(tzinfo=None))
self.assertEqual(SAMPLE['recorded_at'], first.recorded_at)
self.assertEqual(SAMPLE['resource_id'], first.resource_id)
self.assertEqual(SAMPLE['source'], first.source)
dt = datetime.datetime(2015, 3, 9, 12, 15, 57, 233772).replace(
tzinfo=None)
self.assertEqual(dt, first.generated_at.replace(tzinfo=None))
self.assertEqual(SAMPLE['timestamp'], first.generated_at)
self.assertEqual(SAMPLE['type'], first.type)
self.assertEqual(SAMPLE['unit'], first.unit)
self.assertEqual(SAMPLE['user_id'], first.user_id)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import datetime
import mock
import testtools
@ -56,22 +54,14 @@ class TestStatistics(testtools.TestCase):
self.assertEqual(EXAMPLE['avg'], sot.avg)
self.assertEqual(EXAMPLE['count'], sot.count)
self.assertEqual(EXAMPLE['duration'], sot.duration)
dt = datetime.datetime(2015, 3, 9, 12, 45, 00, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.duration_end_at.replace(tzinfo=None))
dt = datetime.datetime(2015, 3, 9, 12, 15, 00, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.duration_start_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['duration_end'], sot.duration_end_at)
self.assertEqual(EXAMPLE['duration_start'], sot.duration_start_at)
self.assertEqual(EXAMPLE['groupby'], sot.group_by)
self.assertEqual(EXAMPLE['max'], sot.max)
self.assertEqual(EXAMPLE['min'], sot.min)
self.assertEqual(EXAMPLE['period'], sot.period)
dt = datetime.datetime(2015, 3, 9, 12, 45, 00, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.period_end_at.replace(tzinfo=None))
dt = datetime.datetime(2015, 3, 9, 12, 15, 00, 000000).replace(
tzinfo=None)
self.assertEqual(dt, sot.period_start_at.replace(tzinfo=None))
self.assertEqual(EXAMPLE['period_end'], sot.period_end_at)
self.assertEqual(EXAMPLE['period_start'], sot.period_start_at)
self.assertEqual(EXAMPLE['sum'], sot.sum)
self.assertEqual(EXAMPLE['unit'], sot.unit)

View File

@ -10,8 +10,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
from iso8601 import iso8601
import testtools
from openstack import format
@ -38,69 +36,3 @@ class TestBoolStrFormatter(testtools.TestCase):
self.assertRaises(ValueError, format.BoolStr.serialize, None)
self.assertRaises(ValueError, format.BoolStr.serialize, '')
self.assertRaises(ValueError, format.BoolStr.serialize, 'True')
class TestISO8601Formatter(testtools.TestCase):
def test_deserialize(self):
self.assertEqual(
format.ISO8601.deserialize("2015-06-27T05:09:43"),
datetime(2015, 6, 27, 5, 9, 43, tzinfo=iso8601.UTC))
self.assertEqual(
format.ISO8601.deserialize("2012-03-28T21:31:02Z"),
datetime(2012, 3, 28, 21, 31, 2, tzinfo=iso8601.UTC))
self.assertEqual(
format.ISO8601.deserialize("2013-09-23T13:53:12.774549"),
datetime(2013, 9, 23, 13, 53, 12, 774549, tzinfo=iso8601.UTC))
self.assertEqual(
format.ISO8601.deserialize("2015-08-27T09:49:58-05:00"),
datetime(2015, 8, 27, 9, 49, 58,
tzinfo=iso8601.FixedOffset(-5, 0, "-05:00")))
def test_serialize(self):
self.assertEqual(
format.ISO8601.serialize(
datetime(2015, 6, 27, 5, 9, 43, tzinfo=iso8601.UTC)),
"2015-06-27T05:09:43+00:00")
self.assertEqual(
format.ISO8601.serialize(
datetime(2012, 3, 28, 21, 31, 2, tzinfo=iso8601.UTC)),
"2012-03-28T21:31:02+00:00")
self.assertEqual(
format.ISO8601.serialize(
datetime(2013, 9, 23, 13, 53, 12, 774549, tzinfo=iso8601.UTC)),
"2013-09-23T13:53:12.774549+00:00")
self.assertEqual(
format.ISO8601.serialize(
datetime(2015, 8, 27, 9, 49, 58,
tzinfo=iso8601.FixedOffset(-5, 0, "-05:00"))),
"2015-08-27T09:49:58-05:00")
class TestUNIXEpochFormatter(testtools.TestCase):
def test_deserialize(self):
self.assertEqual(format.UNIXEpoch.deserialize(1453412616.02406),
datetime(2016, 1, 21, 21, 43, 36, 24060,
tzinfo=iso8601.UTC))
self.assertEqual(format.UNIXEpoch.deserialize(1389453423.35964),
datetime(2014, 1, 11, 15, 17, 3, 359640,
tzinfo=iso8601.UTC))
self.assertEqual(format.UNIXEpoch.deserialize(1389453423),
datetime(2014, 1, 11, 15, 17, 3, tzinfo=iso8601.UTC))
self.assertRaises(ValueError, format.UNIXEpoch.deserialize, "lol")
def test_serialize(self):
self.assertEqual(
format.UNIXEpoch.serialize(
datetime(2016, 1, 21, 21, 43, 36, 24060, tzinfo=iso8601.UTC)),
1453412616.02406)
self.assertEqual(
format.UNIXEpoch.serialize(
datetime(2014, 1, 11, 15, 17, 3, 359640, tzinfo=iso8601.UTC)),
1389453423.35964)
self.assertEqual(
format.UNIXEpoch.serialize(
datetime(2014, 1, 11, 15, 17, 3, tzinfo=iso8601.UTC)),
1389453423)
self.assertRaises(ValueError, format.UNIXEpoch.serialize, "lol")

View File

@ -4,7 +4,5 @@
pbr>=1.6 # Apache-2.0
six>=1.9.0 # MIT
stevedore>=1.10.0 # Apache-2.0
oslo.utils>=3.11.0 # Apache-2.0
os-client-config>=1.13.1 # Apache-2.0
keystoneauth1>=2.1.0 # Apache-2.0
iso8601>=0.1.11 # MIT