Clean up imports

This commit is contained in:
Mads Marquart
2019-08-28 22:44:42 +02:00
parent d3a0ffc478
commit 62c9512734
3 changed files with 52 additions and 52 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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)]