Merge pull request #415 from dkg/tz-aware-datetime
This commit is contained in:
@@ -7,8 +7,9 @@ import copy
|
||||
import hashlib
|
||||
import os
|
||||
import re
|
||||
import warnings
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import six
|
||||
|
||||
@@ -763,11 +764,13 @@ class PubKeyV4(PubKey):
|
||||
|
||||
@created.register(datetime)
|
||||
def created_datetime(self, val):
|
||||
if val.tzinfo is None:
|
||||
warnings.warn("Passing TZ-naive datetime object to PubKeyV4 packet")
|
||||
self._created = val
|
||||
|
||||
@created.register(int)
|
||||
def created_int(self, val):
|
||||
self.created = datetime.utcfromtimestamp(val)
|
||||
self.created = datetime.fromtimestamp(val, timezone.utc)
|
||||
|
||||
@created.register(bytes)
|
||||
@created.register(bytearray)
|
||||
@@ -846,7 +849,7 @@ class PubKeyV4(PubKey):
|
||||
|
||||
def __init__(self):
|
||||
super(PubKeyV4, self).__init__()
|
||||
self.created = datetime.utcnow()
|
||||
self.created = datetime.now(timezone.utc)
|
||||
self.pkalg = 0
|
||||
self.keymaterial = None
|
||||
|
||||
@@ -1183,11 +1186,13 @@ class LiteralData(Packet):
|
||||
|
||||
@mtime.register(datetime)
|
||||
def mtime_datetime(self, val):
|
||||
if val.tzinfo is None:
|
||||
warnings.warn("Passing TZ-naive datetime object to LiteralData packet")
|
||||
self._mtime = val
|
||||
|
||||
@mtime.register(int)
|
||||
def mtime_int(self, val):
|
||||
self.mtime = datetime.utcfromtimestamp(val)
|
||||
self.mtime = datetime.fromtimestamp(val, timezone.utc)
|
||||
|
||||
@mtime.register(bytes)
|
||||
@mtime.register(bytearray)
|
||||
@@ -1208,7 +1213,7 @@ class LiteralData(Packet):
|
||||
super(LiteralData, self).__init__()
|
||||
self.format = 'b'
|
||||
self.filename = ''
|
||||
self.mtime = datetime.utcnow()
|
||||
self.mtime = datetime.now(timezone.utc)
|
||||
self._contents = bytearray()
|
||||
|
||||
def __bytearray__(self):
|
||||
|
||||
@@ -4,9 +4,11 @@ Signature SubPackets
|
||||
"""
|
||||
import binascii
|
||||
import calendar
|
||||
import warnings
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import timedelta
|
||||
from datetime import timezone
|
||||
|
||||
import six
|
||||
|
||||
@@ -229,11 +231,13 @@ class CreationTime(Signature):
|
||||
|
||||
@created.register(datetime)
|
||||
def created_datetime(self, val):
|
||||
if val.tzinfo is None:
|
||||
warnings.warn("Passing TZ-naive datetime object to CreationTime subpacket")
|
||||
self._created = val
|
||||
|
||||
@created.register(int)
|
||||
def created_int(self, val):
|
||||
self.created = datetime.utcfromtimestamp(val)
|
||||
self.created = datetime.fromtimestamp(val, timezone.utc)
|
||||
|
||||
@created.register(bytearray)
|
||||
def created_bytearray(self, val):
|
||||
@@ -241,7 +245,7 @@ class CreationTime(Signature):
|
||||
|
||||
def __init__(self):
|
||||
super(CreationTime, self).__init__()
|
||||
self.created = datetime.utcnow()
|
||||
self.created = datetime.now(timezone.utc)
|
||||
|
||||
def __bytearray__(self):
|
||||
_bytes = super(CreationTime, self).__bytearray__()
|
||||
|
||||
14
pgpy/pgp.py
14
pgpy/pgp.py
@@ -20,7 +20,7 @@ import weakref
|
||||
|
||||
import six
|
||||
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from cryptography.hazmat.primitives import hashes
|
||||
|
||||
@@ -179,7 +179,7 @@ class PGPSignature(Armorable, ParentRef, PGPObject):
|
||||
"""
|
||||
expires_at = self.expires_at
|
||||
if expires_at is not None and expires_at != self.created:
|
||||
return expires_at < datetime.utcnow()
|
||||
return expires_at < datetime.now(timezone.utc)
|
||||
|
||||
return False
|
||||
|
||||
@@ -321,7 +321,7 @@ class PGPSignature(Armorable, ParentRef, PGPObject):
|
||||
sig = PGPSignature()
|
||||
|
||||
if created is None:
|
||||
created=datetime.utcnow()
|
||||
created=datetime.now(timezone.utc)
|
||||
sigpkt = SignatureV4()
|
||||
sigpkt.header.tag = 2
|
||||
sigpkt.header.version = 4
|
||||
@@ -720,7 +720,7 @@ class PGPUID(ParentRef):
|
||||
return
|
||||
mostrecent = None
|
||||
attestations = []
|
||||
now = datetime.utcnow()
|
||||
now = datetime.now(timezone.utc)
|
||||
fpr = self.parent.fingerprint
|
||||
keyid = self.parent.fingerprint.keyid
|
||||
for sig in self._signatures:
|
||||
@@ -1122,7 +1122,7 @@ class PGPMessage(Armorable, PGPObject):
|
||||
charset = kwargs.pop('encoding', None)
|
||||
|
||||
filename = ''
|
||||
mtime = datetime.utcnow()
|
||||
mtime = datetime.now(timezeone.utc)
|
||||
|
||||
msg = PGPMessage()
|
||||
|
||||
@@ -1136,7 +1136,7 @@ class PGPMessage(Armorable, PGPObject):
|
||||
if file and os.path.isfile(message):
|
||||
filename = message
|
||||
message = bytearray(os.path.getsize(filename))
|
||||
mtime = datetime.utcfromtimestamp(os.path.getmtime(filename))
|
||||
mtime = datetime.fromtimestamp(os.path.getmtime(filename), timezone.utc)
|
||||
|
||||
with open(filename, 'rb') as mf:
|
||||
mf.readinto(message)
|
||||
@@ -1418,7 +1418,7 @@ class PGPKey(Armorable, ParentRef, PGPObject):
|
||||
"""``True`` if this key is expired, otherwise ``False``"""
|
||||
expires = self.expires_at
|
||||
if expires is not None:
|
||||
return expires <= datetime.utcnow()
|
||||
return expires <= datetime.now(timezone.utc)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import pytest
|
||||
|
||||
import glob
|
||||
import os
|
||||
from datetime import datetime
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from pgpy.constants import HashAlgorithm
|
||||
from pgpy.constants import PubKeyAlgorithm
|
||||
@@ -187,7 +187,7 @@ block_attrs = {
|
||||
b'\x55\x5d'),
|
||||
('cipherprefs', []),
|
||||
('compprefs', []),
|
||||
('created', datetime.utcfromtimestamp(1402615373)),
|
||||
('created', datetime.fromtimestamp(1402615373, timezone.utc)),
|
||||
('embedded', False),
|
||||
('exportable', True),
|
||||
('features', set()),
|
||||
|
||||
@@ -14,7 +14,7 @@ import itertools
|
||||
import os
|
||||
import time
|
||||
import warnings
|
||||
from datetime import datetime, timedelta
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from pgpy import PGPKey
|
||||
from pgpy import PGPMessage
|
||||
@@ -325,7 +325,7 @@ class TestPGPKey_Management(object):
|
||||
key = self.keys[pkspec]
|
||||
uid = PGPUID.new('T. Keyerson', 'Secondary UID', 'testkey@localhost.local')
|
||||
|
||||
expiration = datetime.utcnow() + timedelta(days=2)
|
||||
expiration = datetime.now(timezone.utc) + timedelta(days=2)
|
||||
|
||||
# add all of the sbpackets that only work on self-certifications
|
||||
with warnings.catch_warnings():
|
||||
@@ -697,7 +697,7 @@ class TestPGPKey_Actions(object):
|
||||
# assert sig.sig.signer_uid == "{:s}".format(sec.userids[0])
|
||||
assert next(iter(sig._signature.subpackets['SignersUserID'])).userid == "{:s}".format(targette_sec.userids[0])
|
||||
# if not sig.is_expired:
|
||||
# time.sleep((sig.expires_at - datetime.utcnow()).total_seconds())
|
||||
# time.sleep((sig.expires_at - datetime.now(timezone.utc)).total_seconds())
|
||||
assert sig.is_expired is False
|
||||
|
||||
self.sigs['string'] = sig
|
||||
@@ -738,7 +738,7 @@ class TestPGPKey_Actions(object):
|
||||
|
||||
def test_sign_ctmessage(self, targette_sec, targette_pub, ctmessage):
|
||||
# test signing a cleartext message
|
||||
expire_at = datetime.utcnow() + timedelta(days=1)
|
||||
expire_at = datetime.now(timezone.utc) + timedelta(days=1)
|
||||
|
||||
sig = targette_sec.sign(ctmessage, expires=expire_at)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user