Commit Graph

571 Commits

Author SHA1 Message Date
Lonami Exo
6242cc8159 Fix .tgread_object not seeking back on TypeNotFoundError 2017-10-12 18:52:04 +02:00
Lonami Exo
59c61cab2f Replace int.from_bytes with struct.unpack for consistency 2017-10-12 18:41:58 +02:00
Lonami Exo
bff2e6981e Fix ._pop_request_of_type failing on not-found requests 2017-10-12 18:03:10 +02:00
Lonami Exo
7bb7cb039f Fix handle RpcResult not always returning a bool 2017-10-12 17:58:37 +02:00
Lonami Exo
0c1170ee61 Replace hardcoded reads with TLObject's .read() 2017-10-12 16:40:59 +02:00
Lonami Exo
3a4662c3bf Remove forgotten print call from authenticator.py 2017-10-12 16:07:25 +02:00
Lonami Exo
301da16f29 Fix pong response not reading all data from the buffer 2017-10-11 21:09:09 +02:00
Lonami Exo
da51e71def Fix .get_input_entity returning marked IDs (closes #314) 2017-10-09 19:40:39 +02:00
Lonami Exo
db623e37fd Except ConnectionResetError on ._reconnect (fix #309) 2017-10-09 13:23:39 +02:00
Lonami Exo
e2ac18b7bc Use larger chunks when downloading/uploading files 2017-10-09 13:19:03 +02:00
Lonami Exo
a7622324dd Remove unnecessary offset_index variable on .download_file 2017-10-09 12:00:14 +02:00
Lonami Exo
6f1c05633e Join all threads when calling .disconnect() (fix #252) 2017-10-09 11:47:10 +02:00
Lonami Exo
f984aae391 Except ProxyConnectionError on ReadThread (fix #307) 2017-10-09 11:37:08 +02:00
Lonami Exo
2a1a4508b8 Allow overriding DocumentAttributes on .send_file (fix #294) 2017-10-09 11:20:31 +02:00
Lonami Exo
4673a02ce6 Stop calling .process_entities where not needed 2017-10-09 11:20:31 +02:00
Lonami Exo
401de913af Fix EntityDatabase failing with InputPeer keys 2017-10-09 11:20:31 +02:00
Joscha Götzer
4a482b3506 .get_drafts() and a custom Draft class (#310) 2017-10-09 09:54:48 +02:00
Lonami Exo
1f54cbfb5a Make str(TLObject) return valid code to generate it back 2017-10-08 17:51:29 +02:00
Lonami Exo
48c8837f19 Don't look on all dialogs on .get_entity miss 2017-10-08 16:25:50 +02:00
Lonami Exo
15e90dcb69 Allow specifying a threshold to handle flood waits 2017-10-08 16:15:30 +02:00
Lonami Exo
83677fc927 Enhance and use .get_input_photo on the generated code 2017-10-08 13:45:14 +02:00
Lonami Exo
62aec947c0 Chang auto-reconnect condition (fix #303) 2017-10-08 10:52:56 +02:00
Lonami Exo
244a47cddd Fix consuming all retries on Requests returning False/empty list 2017-10-07 18:54:30 +02:00
Joscha Götzer
7b5d409c49 Warn users on .add_update_handler if no workers are running (#300) 2017-10-07 17:55:37 +02:00
Lonami Exo
91a5d20e93 Replace .on_response with static .from_reader for all types 2017-10-07 13:26:09 +02:00
Lonami Exo
a17def8026 Use basename instead abspath for filename attribute (#294) 2017-10-06 21:48:53 +02:00
Lonami Exo
6d877549cb Cleanup utils.get_peer_id 2017-10-06 21:47:10 +02:00
Lonami Exo
3bf70692b4 Fix TelegramClient.get_input_entity always failing/missing return 2017-10-06 21:43:04 +02:00
Lonami Exo
79e36c98bd Fix EntityDatabase.get_input_peer not actually working 2017-10-06 21:42:04 +02:00
Lonami Exo
804a29d0bc Fix get_input_entity from peer ID not actually working 2017-10-06 21:05:02 +02:00
Lonami Exo
9d394ab18b Send MsgsAck in the same container along with the requests 2017-10-06 11:36:39 +02:00
Lonami Exo
1d8a02685f Update to v0.15.1 2017-10-05 13:58:26 +02:00
Lonami Exo
7aa21dbd07 Fix .get_dialogs to never return more than limit 2017-10-05 13:55:58 +02:00
Lonami
427a6aabaa Merge pull request #296 from LonamiWebs/entity-db
Use a custom database for entities
2017-10-05 13:46:16 +02:00
Lonami Exo
dde196d8e4 Swallow errors when processing entities
Some bug was causing an infinite lock due to the entity
database failing with InputPeerSelf, since adding a full
entity to the database wasn't disallowing self, and so
wasn't utils get_peer_id. Although last commit fixed that,
just in case, swallow errors there.
2017-10-05 13:34:44 +02:00
Lonami Exo
1fb3d0d00c Fix EntityDatabase failing to cache self user 2017-10-05 13:34:11 +02:00
Lonami Exo
4f2a44231a Allow disabling the EntityDatabase fully or partially 2017-10-05 13:06:51 +02:00
Lonami Exo
99cc0778bb Allow EntityDatabase to be accessed by phone 2017-10-05 13:01:00 +02:00
Lonami Exo
a8edacd34a Fix get_peer_id going into infinite recursion for InputPeerSelf 2017-10-05 12:59:44 +02:00
Lonami Exo
16f929b8b6 Fix .get_peer_id not working with full entities 2017-10-05 12:33:24 +02:00
Lonami Exo
10eca82143 Fix process_entities not working on list of entities 2017-10-05 12:29:52 +02:00
Lonami Exo
d2e244817a Make EntityDatabase.get a no-op if key is an entity already 2017-10-05 12:28:04 +02:00
Lonami Exo
e5c4df98df Use EntityDatabase on TelegramClient.get_entity instead lru_cache 2017-10-05 12:27:32 +02:00
Lonami Exo
a0fc5ed54e Use EntityDatabase in the Session class 2017-10-04 21:02:45 +02:00
Lonami Exo
a98dc9d95b Try passing socks.GeneralProxyError to the main thread 2017-10-04 14:09:46 +02:00
Lonami Exo
5be9df0eec Add a basic EntityDatabase class 2017-10-04 13:58:36 +02:00
Joscha Götzer
6c375a7aed Add method to .delete_messages() (#282) 2017-10-02 18:59:29 +02:00
3bl3gamer
0f019f0476 Rename last subclass_of_id to upper case (#285) 2017-10-02 13:26:55 +02:00
Lonami Exo
ba147bbe10 Fix TgClient.get_input* not calling utils.get_input* when needed 2017-10-01 21:15:49 +02:00
Lonami Exo
43f796caab Fix .get_dialogs() failing on Windows 2017-10-01 21:02:41 +02:00
Lonami Exo
d98fd6a424 Fix workers not stopping on .disconnect(), start them on login 2017-10-01 19:56:24 +02:00
Lonami Exo
62ea77cbea Fix opposite condition on .get_dialogs 2017-10-01 19:45:42 +02:00
Lonami Exo
e717256937 Always use session ip address and port when connecting 2017-10-01 19:26:20 +02:00
Lonami Exo
269949595f Allow phone as int on .sign_in (#278) 2017-10-01 19:02:53 +02:00
Lonami Exo
354ea1c0c8 Add ChannelPrivateError error 2017-10-01 18:53:12 +02:00
Lonami Exo
8c3a2470ed Update to v0.15 2017-10-01 17:38:48 +02:00
Lonami Exo
d30fdbe778 Support "string" peers on .get_input_entity 2017-10-01 16:59:18 +02:00
Lonami Exo
8df4d7c4a5 Internal methods should use .get_input_entity 2017-10-01 16:54:11 +02:00
Lonami Exo
1cdf879888 Fix .get_input_entity failing for chats 2017-10-01 16:53:47 +02:00
Lonami Exo
1ded6d9d06 Expand Updates into Update objects before calling handlers 2017-10-01 16:30:27 +02:00
Lonami Exo
c61e168de4 Rename invoke to __call__ 2017-10-01 16:04:14 +02:00
Lonami Exo
36dabc4928 Process entities from the MtProtoSender instead TelegramBareClient
This way, update objects will also be processed when they occur.
2017-10-01 16:02:29 +02:00
Lonami Exo
71b6e527a6 Allow using parenthesis or spaces in phones when .get_entity 2017-10-01 15:50:23 +02:00
Lonami Exo
5b6f9b6542 Add a new .get_input_entity method and use it on .get_entity 2017-10-01 14:19:04 +02:00
Lonami Exo
9bccd17881 Add an option to allow not saving/processing found entities 2017-10-01 13:32:27 +02:00
Lonami Exo
e4c5396c04 Add cross-thread safety when saving the session 2017-10-01 13:27:08 +02:00
Lonami Exo
a737f33324 Save all found entities to the session file 2017-10-01 13:27:08 +02:00
Lonami Exo
9445d2ba53 More enhancements on .sign_in from different clients (#278) 2017-10-01 11:37:18 +02:00
Lonami Exo
1d250a5441 Allow overriding phone on .sign_in (fix #278) 2017-10-01 11:31:26 +02:00
Lonami Exo
1d159908c7 Fix RPC excepts (e.g. UserMigrate) being in the wrong try 2017-10-01 11:25:56 +02:00
Lonami Exo
68e7d481f4 Add support to get all dialogs at once 2017-10-01 11:25:12 +02:00
Lonami Exo
a5ab49c707 Remove sleep on ServerError as per @danog's recommendation 2017-09-30 19:02:12 +02:00
Lonami Exo
33dbac6350 Add some missing BadRequest errors 2017-09-30 19:00:32 +02:00
Lonami Exo
c9dff552b8 Except ServerErrors and sleep a bit before retrying 2017-09-30 18:51:25 +02:00
Lonami Exo
76e5206acc Raise ValueError if an unknown **kwarg is given 2017-09-30 18:45:56 +02:00
Lonami Exo
f1bca0fd06 Fix setting None update workers not causing all threads to stop 2017-09-30 18:44:37 +02:00
Lonami Exo
8c3c990e74 Remove UpdateState .set and .check error 2017-09-30 18:39:31 +02:00
Lonami Exo
933ae01d85 Change condition to perform automatic reconnection 2017-09-30 18:33:34 +02:00
Lonami Exo
b6bc9ac39b Rename ._connect_lock to ._reconnect_lock 2017-09-30 18:25:09 +02:00
Lonami Exo
671ac1cdb7 Fix **kwargs not being passed to TelegramBareClient 2017-09-30 18:02:08 +02:00
Lonami Exo
4cd7e1711e Rename cdn parameter to _cdn 2017-09-30 17:57:39 +02:00
Lonami Exo
d28f370ab6 Add ._get_cdn_client as alternative ._get_exported_client version 2017-09-30 17:51:07 +02:00
Lonami Exo
a35c4b15db Cache exported Sessions instead whole clients 2017-09-30 16:32:10 +02:00
Lonami Exo
c1c6df9fd0 Fix invoke not raising ValueError when retries reach 0 2017-09-30 16:18:16 +02:00
Lonami Exo
8ecd2c2e06 Call .sync_updates on .connect iff exported_auth is None
Calling this method on exported clients would trigger a
UserMigrateError because it was being used on a non-native
data center. For .connects like this, don't attempt syncing
updates.
2017-09-30 16:11:16 +02:00
Lonami Exo
18e485ded2 Set default TelegramBareClient behaviour to not spawn ReadThread 2017-09-30 15:53:47 +02:00
Lonami Exo
0a567fcd7c Make creating a new sender cleaner 2017-09-30 12:08:06 +02:00
Lonami Exo
5da300ca84 Make MtProtoSender not thread-safe
Rationale: a new connection should be spawned if one desires to
send and receive requests in parallel, which would otherwise cause
one of either threads to lock.
2017-09-30 11:50:11 +02:00
Lonami Exo
003e231239 Attempt at cleaning up TelegramBareClient.invoke() 2017-09-30 11:45:35 +02:00
Lonami Exo
61033b2f56 Allow disabling spawning a second thread 2017-09-30 11:28:15 +02:00
Lonami Exo
a3ae56ca9e Use a timeout when worker threads are polling 2017-09-30 11:21:07 +02:00
Lonami Exo
7cef5885fa Rename process_updates/polling to workers 2017-09-30 11:17:31 +02:00
Lonami Exo
72b7e99222 Ensure the worker threads have updates once they acquire the lock 2017-09-30 10:59:33 +02:00
Lonami Exo
9560bcc324 Remove "if background thread" check as it isn't exposed anymore 2017-09-30 10:27:46 +02:00
Lonami Exo
b87a798dd5 Spawn new worker threads to handle updates instead using ReadThread 2017-09-30 10:27:46 +02:00
Lonami Exo
479afddf50 Move core functionality to the TelegramBareClient
Rationale: the intended behaviour of the TelegramClient will now
be to focus on abstracting the users from manually importing
requests and types to work with Telegram's API. Thus, all the
core functionality has been moved to the TelegramBareClient,
which will now be responsible of spawning new threads or
connections and even handling updates.

This way there is a clear distinction between the two clients,
TelegramClient is the one meant to be exposed to the end user,
since it provides all the mentioned abstractions, while the
TelegramBareClient is the "basic" client needed to work with
the API in a comfortable way.

There is still a need for an MtProtoSender, which still even
lower level, and knows as little as possible of what requests
are. This handles parsing the messages received from the
server so that their result can be understood.
2017-09-30 10:27:46 +02:00
Lonami Exo
b61deb5cfb Delete methods to create_new_connection and invoke_on_dc 2017-09-30 10:27:46 +02:00
Lonami Exo
0a693c705a Create a new connection when called from a different thread
This allows to invoke several requests in parallel while not
waiting for other requests to be written to the network.
2017-09-30 10:27:46 +02:00
Lonami Exo
ee08232473 Fix UpdateState.check_error popping the wrong side 2017-09-30 10:27:16 +02:00
Lonami Exo
6df38da793 Fix session failing to load if no auth_key present 2017-09-29 19:54:40 +02:00
Lonami Exo
56103845de Fix LogOutRequest consuming all retries (#270) 2017-09-29 13:58:15 +02:00
Lonami Exo
61e5c73658 Update to v0.14.2 2017-09-29 13:13:05 +02:00
Lonami Exo
afc4bd9cab Rename constructor/subclass_of_id to upper case, keep only static 2017-09-29 13:11:33 +02:00
Lonami Exo
b3f04fd359 Raise AssertionError instead TypeNotFoundError on authenticator 2017-09-29 13:07:21 +02:00
Lonami Exo
3c7dd25982 Revert "if * is None" check (8bff10d) on get_input_* due to 423efc4 2017-09-29 12:02:26 +02:00
Lonami Exo
dc5bbc1719 Update to v0.14.1 2017-09-28 12:02:47 +02:00
Lonami Exo
cc337328c6 Rename handmade Message class to TLMessage to avoid confusion 2017-09-28 11:59:24 +02:00
Lonami Exo
71c2a82b3d Completely remove BinaryWriter from the project 2017-09-28 11:49:45 +02:00
Lonami Exo
2fd03e5422 Stop using BinaryWriter on MtProtoPlainSender 2017-09-28 11:43:06 +02:00
Lonami Exo
fe30f63d5d Use autogen code on the authenticator instead hardcoding requests 2017-09-28 11:36:51 +02:00
Lonami Exo
fb0898b9cb Don't distinguish between str and bytes when serializing
This makes it easier to use some requests like ReqPqRequest which
needs a string of bytes, not a valid utf-8 string per se.
2017-09-28 09:55:29 +02:00
Lonami Exo
1518be0b95 Use .appendleft(x) for deque instead .insert(0, x) (fix #268) 2017-09-28 09:30:47 +02:00
Lonami Exo
c667a00281 Avoid using BinaryWriter where possible 2017-09-27 21:23:59 +02:00
Lonami Exo
8a605f21e6 Remove BinaryWriter dependency on MessageContainer 2017-09-27 21:06:01 +02:00
Lonami Exo
833aeb86eb Fix auth_key is unsigned 2017-09-27 21:04:52 +02:00
Lonami Exo
bd3dd371a2 Create a proper Message class (msg_id, seqno, body; only .to_bytes()) 2017-09-27 21:01:20 +02:00
Lonami Exo
b0839a028e Update to v0.14 2017-09-27 13:51:59 +02:00
Lonami Exo
795cb98909 Move MessageContainer.on_send inside its .to_bytes 2017-09-27 13:49:58 +02:00
Lonami Exo
6df9fc558e Create and use a new GzipPacked class, also when sending 2017-09-27 13:46:53 +02:00
Lonami Exo
7b736aa6ef Fix MessageContainer having the wrong constructor id 2017-09-27 13:46:02 +02:00
Lonami Exo
efca981312 Fix adding a request twice (or container) to ._pending_receive 2017-09-27 13:26:35 +02:00
Lonami Exo
0c11967232 Remove unused .shaes attribute from CdnDecrypter 2017-09-27 12:11:16 +02:00
Lonami Exo
657e8a70c9 Fix CdnDecrypter incorrectly accessing clients' timeout (closes #265) 2017-09-27 12:08:37 +02:00
Lonami Exo
98c2e1dd4f Replace 4 .append calls with a single one when serializing bytes 2017-09-26 14:41:11 +02:00
Lonami Exo
b83cd98ba0 Replace TLObject.on_send with the new .to_bytes()
This also replaces some int.to_bytes() calls with a faster
struct.pack (up to x4 faster). This approach is also around
x3 faster than creating a BinaryWriter just to serialize a
TLObject as bytes.
2017-09-26 14:36:02 +02:00
Lonami Exo
f233110732 Allow sending several requests at once through new MessageContainer 2017-09-25 20:52:27 +02:00
Lonami Exo
1d50bba8bc Add get_input_* methods for Media and such 2017-09-25 13:43:03 +02:00
Lonami Exo
edcd23f94c Making timeout when reporting an error shorter 2017-09-25 12:00:09 +02:00
Lonami Exo
493f5cec1f Fix-up target method typo 2017-09-25 11:57:42 +02:00
Lonami Exo
01c91bb895 Report errors in the background not to interfer with users (#262) 2017-09-25 11:56:44 +02:00
Lonami Exo
c0ee123156 Add a small sleep when trying to reconnect forever 2017-09-25 11:04:09 +02:00
Lonami Exo
0f10e1419f Update to v0.13.6 2017-09-23 11:44:04 +02:00
Lonami Exo
b04607e7ba Ignore requests invoked from ReadThread instead raising
Any unhandled exception on the ReadThread would cause it to stop,
and handling the exception to the main thread on the next invoke
or poll. Instead causing the thread to stop, simply ignore it.
2017-09-23 11:31:58 +02:00
Lonami Exo
80e9877256 Show the type of children TLObjects on .stringify() 2017-09-23 11:01:25 +02:00
Andrey Egorov
73fbfde7ef Process messages without pts 2017-09-22 23:14:31 +02:00
Lonami Exo
f39f9c33a0 Fix timeout on confirm_received.wait not being added (fix #257) 2017-09-22 19:20:37 +02:00
Lonami Exo
9ce4307304 Update to v0.13.5 2017-09-22 16:12:43 +02:00
Lonami Exo
b0f6b23e52 Fix creating new connections accessing invalid attributes 2017-09-22 16:11:07 +02:00
Lonami Exo
bfa3001f87 Fix MainThread would lock when reconnecting
This is because it was thinking that the ReadThread would be
ready to read the result, but actually, this thread is also
locked trying to reconnect at the same time
2017-09-22 16:02:10 +02:00
Lonami Exo
9dfb5d493c Fix BrokenPipeError was instance of OSError 2017-09-22 13:51:11 +02:00
Lonami Exo
4a8e5c865a Detect BrokenAuthKeyError on MtProtoSender._decode_msg 2017-09-22 13:32:00 +02:00
Lonami Exo
a992f42781 Attempt at fixing socket is None on .connect() 2017-09-22 13:14:56 +02:00
Lonami Exo
6d60e83adc Start background thread only if it was None 2017-09-22 13:13:41 +02:00
Lonami Exo
d8bf8bb2eb Fix reconnect always returning False -> infinite loop 2017-09-22 12:48:04 +02:00
Lonami Exo
4d5f16f2aa Fix background thread could not reconnect properly 2017-09-22 12:44:09 +02:00
Lonami Exo
4245ec5abc Make reconnect private 2017-09-22 12:31:41 +02:00
Lonami Exo
bc15b451b5 Use a safer reconnect behaviour (respect multithread too) 2017-09-22 12:20:38 +02:00
Lonami Exo
ffadcd029f Save the session much less often (doable because 151e162) 2017-09-21 19:12:46 +02:00
Lonami Exo
12c6d4d3ac Start the background thread only if the user is authorized 2017-09-21 15:36:20 +02:00
Lonami Exo
4ba12e717f Fix reconnect to new_dc wasn't changing connection.ip 2017-09-21 13:58:57 +02:00