From 62c9512734b862df1cadfabbc3c4c67be3f42602 Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Wed, 28 Aug 2019 22:44:42 +0200 Subject: [PATCH] Clean up imports --- fbchat/__init__.py | 2 +- fbchat/_client.py | 65 ++++++++++++++++++++++------------------------ fbchat/_util.py | 37 ++++++++++++++------------ 3 files changed, 52 insertions(+), 52 deletions(-) diff --git a/fbchat/__init__.py b/fbchat/__init__.py index afc2ae2..3c4df84 100644 --- a/fbchat/__init__.py +++ b/fbchat/__init__.py @@ -3,6 +3,7 @@ :copyright: (c) 2015 - 2019 by Taehoon Kim :license: BSD 3-Clause, see LICENSE for more details. """ + import logging as _logging # Set default logging handler to avoid "No handler found" warnings. @@ -12,7 +13,6 @@ _logging.getLogger(__name__).addHandler(_logging.NullHandler()) from .models import * from ._client import Client -from ._util import log # TODO: Remove this (from examples too) __title__ = "fbchat" __version__ = "1.8.1" diff --git a/fbchat/_client.py b/fbchat/_client.py index 451bc01..8a09377 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -1,16 +1,11 @@ -import requests -import urllib -from uuid import uuid1 -from random import choice -from bs4 import BeautifulSoup as bs -from mimetypes import guess_type -from collections import OrderedDict -from ._util import * -from .models import * -from . import _graphql -from ._state import State import time import json +import requests +from collections import OrderedDict + +from ._core import log +from . import _util, _graphql, _state +from .models import * ACONTEXT = { @@ -156,7 +151,9 @@ class Client: """ try: # Load cookies into current session - self._state = State.from_cookies(session_cookies, user_agent=user_agent) + self._state = _state.State.from_cookies( + session_cookies, user_agent=user_agent + ) self._uid = self._state.user_id except Exception as e: log.exception("Failed loading session") @@ -186,7 +183,7 @@ class Client: for i in range(1, max_tries + 1): try: - self._state = State.login( + self._state = _state.State.login( email, password, on_2fa_callback=self.on2FACode, @@ -871,7 +868,7 @@ class Client: data = {"photo_id": str(image_id)} j = self._post("/mercury/attachments/photo/", data) - url = get_jsmods_require(j, 3) + url = _util.get_jsmods_require(j, 3) if url is None: raise FBchatException("Could not fetch image URL from: {}".format(j)) return url @@ -1218,7 +1215,7 @@ class Client: data["has_attachment"] = True for i, (file_id, mimetype) in enumerate(files): - data["{}s[{}]".format(mimetype_to_key(mimetype), i)] = file_id + data["{}s[{}]".format(_util.mimetype_to_key(mimetype), i)] = file_id return self._doSendRequest(data) @@ -1239,8 +1236,8 @@ class Client: Raises: FBchatException: If request failed """ - file_urls = require_list(file_urls) - files = self._upload(get_files_from_urls(file_urls)) + file_urls = _util.require_list(file_urls) + files = self._upload(_util.get_files_from_urls(file_urls)) return self._sendFiles( files=files, message=message, thread_id=thread_id, thread_type=thread_type ) @@ -1262,8 +1259,8 @@ class Client: Raises: FBchatException: If request failed """ - file_paths = require_list(file_paths) - with get_files_from_paths(file_paths) as x: + file_paths = _util.require_list(file_paths) + with _util.get_files_from_paths(file_paths) as x: files = self._upload(x) return self._sendFiles( files=files, message=message, thread_id=thread_id, thread_type=thread_type @@ -1286,8 +1283,8 @@ class Client: Raises: FBchatException: If request failed """ - clip_urls = require_list(clip_urls) - files = self._upload(get_files_from_urls(clip_urls), voice_clip=True) + clip_urls = _util.require_list(clip_urls) + files = self._upload(_util.get_files_from_urls(clip_urls), voice_clip=True) return self._sendFiles( files=files, message=message, thread_id=thread_id, thread_type=thread_type ) @@ -1309,8 +1306,8 @@ class Client: Raises: FBchatException: If request failed """ - clip_paths = require_list(clip_paths) - with get_files_from_paths(clip_paths) as x: + clip_paths = _util.require_list(clip_paths) + with _util.get_files_from_paths(clip_paths) as x: files = self._upload(x, voice_clip=True) return self._sendFiles( files=files, message=message, thread_id=thread_id, thread_type=thread_type @@ -1371,7 +1368,7 @@ class Client: thread_id, thread_type = self._getThread(thread_id, None) data = { "attachment_id": attachment_id, - "recipient_map[{}]".format(generateOfflineThreadingID()): thread_id, + "recipient_map[{}]".format(_util.generateOfflineThreadingID()): thread_id, } j = self._payload_post("/mercury/attachments/forward/", data) if not j.get("success"): @@ -1424,7 +1421,7 @@ class Client: data["action_type"] = "ma-type:log-message" data["log_message_type"] = "log:subscribe" - user_ids = require_list(user_ids) + user_ids = _util.require_list(user_ids) for i, user_id in enumerate(user_ids): if user_id == self._uid: @@ -1458,7 +1455,7 @@ class Client: data = {"add": admin, "thread_fbid": thread_id} - admin_ids = require_list(admin_ids) + admin_ids = _util.require_list(admin_ids) for i, admin_id in enumerate(admin_ids): data["admin_ids[{}]".format(i)] = str(admin_id) @@ -1507,7 +1504,7 @@ class Client: def _usersApproval(self, user_ids, approve, thread_id=None): thread_id, thread_type = self._getThread(thread_id, None) - user_ids = list(require_list(user_ids)) + user_ids = _util.require_list(user_ids) data = { "client_mutation_id": "0", @@ -1572,7 +1569,7 @@ class Client: Raises: FBchatException: If request failed """ - (image_id, mimetype), = self._upload(get_files_from_urls([image_url])) + (image_id, mimetype), = self._upload(_util.get_files_from_urls([image_url])) return self._changeGroupImage(image_id, thread_id) def changeGroupImageLocal(self, image_path, thread_id=None): @@ -1585,7 +1582,7 @@ class Client: Raises: FBchatException: If request failed """ - with get_files_from_paths([image_path]) as files: + with _util.get_files_from_paths([image_path]) as files: (image_id, mimetype), = self._upload(files) return self._changeGroupImage(image_id, thread_id) @@ -1700,7 +1697,7 @@ class Client: } data = {"doc_id": 1491398900900362, "variables": json.dumps({"data": data})} j = self._payload_post("/webgraphql/mutation", data) - handle_graphql_errors(j) + _util.handle_graphql_errors(j) def createPlan(self, plan, thread_id=None): """Set a plan. @@ -1889,7 +1886,7 @@ class Client: return True def _readStatus(self, read, thread_ids): - thread_ids = require_list(thread_ids) + thread_ids = _util.require_list(thread_ids) data = {"watermarkTimestamp": now(), "shouldSendReadReceipt": "true"} @@ -2001,7 +1998,7 @@ class Client: Raises: FBchatException: If request failed """ - thread_ids = require_list(thread_ids) + thread_ids = _util.require_list(thread_ids) if location == ThreadLocation.PENDING: location = ThreadLocation.OTHER @@ -2037,7 +2034,7 @@ class Client: Raises: FBchatException: If request failed """ - thread_ids = require_list(thread_ids) + thread_ids = _util.require_list(thread_ids) data_unpin = dict() data_delete = dict() @@ -2080,7 +2077,7 @@ class Client: Raises: FBchatException: If request failed """ - message_ids = require_list(message_ids) + message_ids = _util.require_list(message_ids) data = dict() for i, message_id in enumerate(message_ids): data["message_ids[{}]".format(i)] = message_id diff --git a/fbchat/_util.py b/fbchat/_util.py index 873da23..87dd185 100644 --- a/fbchat/_util.py +++ b/fbchat/_util.py @@ -1,13 +1,12 @@ -import re import json -from time import time -from random import random -from contextlib import contextmanager -from mimetypes import guess_type -from os.path import basename -from urllib.parse import parse_qs, urlparse -import warnings +import time +import random +import contextlib +import mimetypes +import urllib.parse import requests +from os import path + from ._core import log from ._exception import ( FBchatException, @@ -29,7 +28,7 @@ USER_AGENTS = [ def now(): - return int(time() * 1000) + return int(time.time() * 1000) def strip_json_cruft(text): @@ -72,17 +71,17 @@ def str_base(number, base): def generateMessageID(client_id=None): k = now() - l = int(random() * 4294967295) + l = int(random.random() * 4294967295) return "<{}:{}-{}@mail.projektitan.com>".format(k, l, client_id) def getSignatureID(): - return hex(int(random() * 2147483648)) + return hex(int(random.random() * 2147483648)) def generateOfflineThreadingID(): ret = now() - value = int(random() * 4294967295) + value = int(random.random() * 4294967295) string = ("0000000000000000000000" + format(value, "b"))[-22:] msgs = format(ret, "b") + string return str(int(msgs, 2)) @@ -196,20 +195,24 @@ def get_files_from_urls(file_urls): # https://stackoverflow.com/a/37060758 files.append( ( - basename(file_url).split("?")[0].split("#")[0], + path.basename(file_url).split("?")[0].split("#")[0], r.content, - r.headers.get("Content-Type") or guess_type(file_url)[0], + r.headers.get("Content-Type") or mimetypes.guess_type(file_url)[0], ) ) return files -@contextmanager +@contextlib.contextmanager def get_files_from_paths(filenames): files = [] for filename in filenames: files.append( - (basename(filename), open(filename, "rb"), guess_type(filename)[0]) + ( + path.basename(filename), + open(filename, "rb"), + mimetypes.guess_type(filename)[0], + ) ) yield files for fn, fp, ft in files: @@ -217,7 +220,7 @@ def get_files_from_paths(filenames): def get_url_parameters(url, *args): - params = parse_qs(urlparse(url).query) + params = urllib.parse.parse_qs(urllib.parse.urlparse(url).query) return [params[arg][0] for arg in args if params.get(arg)]