Skip to content

Commit 3537e9b

Browse files
committed
Support more types to represent a date
1 parent 75a342e commit 3537e9b

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

telethon/tl/tlobject.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from datetime import datetime
1+
import struct
2+
from datetime import datetime, date
23
from threading import Event
34

45

@@ -125,6 +126,23 @@ def serialize_bytes(data):
125126
r.append(bytes(padding))
126127
return b''.join(r)
127128

129+
@staticmethod
130+
def serialize_datetime(dt):
131+
if not dt:
132+
return b'\0\0\0\0'
133+
134+
if isinstance(dt, datetime):
135+
dt = int(dt.timestamp())
136+
elif isinstance(dt, date):
137+
dt = int(datetime(dt.year, dt.month, dt.day, dt).timestamp())
138+
elif isinstance(dt, float):
139+
dt = int(dt)
140+
141+
if isinstance(dt, int):
142+
return struct.pack('<I', dt)
143+
144+
raise TypeError('Cannot interpret "{}" as a date.'.format(dt))
145+
128146
# These should be overrode
129147
def to_dict(self, recursive=True):
130148
return {}

telethon_generator/tl_generator.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -540,11 +540,7 @@ def write_to_bytes(builder, arg, args, name=None):
540540
builder.write('TLObject.serialize_bytes({})'.format(name))
541541

542542
elif 'date' == arg.type: # Custom format
543-
# 0 if datetime is None else int(datetime.timestamp())
544-
builder.write(
545-
r"b'\0\0\0\0' if {0} is None else "
546-
r"struct.pack('<I', int({0}.timestamp()))".format(name)
547-
)
543+
builder.write('TLObject.serialize_datetime({})'.format(name))
548544

549545
else:
550546
# Else it may be a custom type

0 commit comments

Comments
 (0)