Created
February 21, 2022 15:47
-
-
Save AmauryCarrade/0ca99d202bb4ad9b59eacfd457cb5e1f to your computer and use it in GitHub Desktop.
Script utilisé pour tirer au sort pour Zeste de Savoir le 21 février 2022
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import datetime | |
import json | |
import os | |
import random | |
import time | |
import click | |
from dotenv import load_dotenv | |
from pytwitter import Api | |
load_dotenv() | |
API_KEY = os.getenv("DRAW_API_KEY") | |
API_SECRET = os.getenv("DRAW_API_SECRET") | |
BEARER_TOKEN = os.getenv("DRAW_BEARER_TOKEN") | |
EXCLUDED = ["amaurypi", "reseauxdezero", "melcorehat", "sciencetonio"] | |
api = Api(bearer_token=BEARER_TOKEN) | |
@click.command() | |
@click.option("--tweet", help="Tweet ID to draw") | |
@click.option("--count", default=1, help="Amount of winners_accounts to draw") | |
@click.option("--cache/--no-cache", default=False, help="If we should use cached data") | |
@click.option( | |
"--test", default=False, is_flag=True, help="If we should use cached data" | |
) | |
def draw(tweet, count, cache, test): | |
draw_results_path = f"draw-results-{tweet}.json" | |
draw_cache_file = f"draw-cache-{tweet}.json" | |
draw_rts_file = f"draw-rts-{tweet}.json" | |
tw = api.get_tweet(tweet, expansions="author_id").data | |
account = api.get_user(user_id=tw.author_id).data | |
if not test and os.path.isfile(draw_results_path): | |
click.echo("Unable to draw in non-test mode: already drawn.") | |
click.echo("\nWINNERS (from cached draw)") | |
with open(draw_results_path) as f: | |
for username in json.load(f): | |
click.echo(f"- @{username} - https://twitter.com/{username}") | |
return | |
draw_cache = {} | |
if cache: | |
try: | |
with open(draw_cache_file) as f: | |
draw_cache = json.load(f) | |
except: | |
pass | |
rts = draw_cache['rts'] | |
else: | |
rts = [user.id for user in api.get_tweet_retweeted_users(tweet).data] | |
draw_cache['rts'] = rts | |
def save_cache(): | |
with open(draw_cache_file, "w") as f: | |
json.dump(draw_cache, f, indent=2) | |
click.echo(f"{len(rts)} retweets loaded.") | |
if not draw_cache['followers']: | |
followers_ids = [] | |
next_token = None | |
while True: | |
f = api.get_followers(account.id, max_results=1000, pagination_token=next_token) | |
print(repr(f)) | |
print(len(f.data)) | |
next_token = f.meta.next_token | |
followers_ids += [user.id for user in f.data] | |
if next_token is None: | |
break | |
draw_cache['followers'] = followers_ids | |
save_cache() | |
click.echo(f"{len(draw_cache['followers'])} followers loaded.") | |
click.echo() | |
winners_accounts = [] | |
while len(winners_accounts) < count: | |
time.sleep(2) # wait to avoid rate limit | |
winner = random.choice(rts) | |
winner_account = api.get_user(user_id=winner).data | |
if winner_account in winners_accounts: | |
continue | |
click.echo(f"Drawn {winner_account.username}… ", nl=False) | |
if winner not in draw_cache: | |
draw_cache['users'][winner] = { | |
'username': winner_account.username, | |
'follows': None, | |
'recent_tweets': { | |
'giveaways': 0, | |
'retweeted_tweets': 0, | |
'total': 0 | |
}, | |
'date': datetime.datetime.now().isoformat() | |
} | |
cache_win = draw_cache['users'][winner] | |
save_cache() | |
# Checks condition: not excluded | |
if winner_account.username.lower() in EXCLUDED: | |
click.echo(f"excluded from draw.") | |
continue | |
# Checks condition: follows | |
if winner_account.id not in draw_cache['followers']: | |
click.echo(f"not following {account.username}.") | |
cache_win['follows'] = False | |
save_cache() | |
continue | |
cache_win['follows'] = True | |
save_cache() | |
# Checks condition: giveaway or rt-only account | |
giveaways = 0 | |
retweeted_tweets = 0 | |
total = 0 | |
if cache_win['recent_tweets']['total'] > 0: | |
t = cache_win['recent_tweets'] | |
giveaways, retweeted_tweets, total = t['giveaways'], t['retweeted_tweets'], t["total"] | |
else: | |
for recent_tweet in api.get_timelines( | |
user_id=winner_account.id, max_results=100 | |
).data: | |
text = recent_tweet.text.lower() | |
# don't count replies | |
if text.startswith("@"): | |
continue | |
if text.startswith("rt"): | |
retweeted_tweets += 1 | |
total += 1 | |
if ( | |
"giveaway" in text | |
or "givaway" in text | |
or "give-away" in text | |
or "give away" in text | |
or "concours" in text | |
or "giving away" in text | |
or "gagner" in text | |
or "cadeau" in text | |
or "competition" in text | |
or "rt and follow" in text | |
or "rt et follow" in text | |
or "rt + follow" in text | |
): | |
giveaways += 1 | |
cache_win['recent_tweets'] = { | |
'giveaways': giveaways, | |
'retweeted_tweets': retweeted_tweets, | |
'total': total | |
} | |
save_cache() | |
if giveaways / total > 0.3: | |
click.echo(f"giveaway account ({giveaways / total * 100}% of {total} recent tweets).") | |
continue | |
if retweeted_tweets / total > 0.99: | |
click.echo( | |
f"all-rts account ({retweeted_tweets / total * 100}% of {total} recent tweets)." | |
) | |
continue | |
winners_accounts.append(winner_account) | |
click.echo(click.style("looks okay", bold=True) + f" ({len(winners_accounts)} / {count}).") | |
click.echo("\n\nWINNERS" + (" (test draw)" if test else "")) | |
for username in winners_accounts: | |
click.echo( | |
f"- @{username.username} - https://twitter.com/{username.username}" | |
+ (" (test draw)" if test else "") | |
) | |
if test: | |
click.echo("TEST DRAW NOT REAL DRAW") | |
if not test: | |
with open(draw_results_path, "w") as f: | |
json.dump([user.username for user in winners_accounts], f) | |
click.echo(f"Draw results saved in {draw_results_path}.") | |
if __name__ == "__main__": | |
draw() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import random | |
PARTICIPANTS = [ | |
'sgble', | |
'informaticienzero', | |
'Migwel', | |
'Würtz', | |
'WinXaito', | |
'Lyph', | |
'baptiste.millemathias', | |
'rockisnotdead', | |
'Olive', | |
'Croal' | |
] | |
random.shuffle(PARTICIPANTS) | |
for i in range(5): | |
print(f'{i+1}.', PARTICIPANTS[i]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[[package]] | |
name = "authlib" | |
version = "0.15.5" | |
description = "The ultimate Python library in building OAuth and OpenID Connect servers." | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[package.dependencies] | |
cryptography = "*" | |
[package.extras] | |
client = ["requests"] | |
[[package]] | |
name = "certifi" | |
version = "2021.10.8" | |
description = "Python package for providing Mozilla's CA Bundle." | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[[package]] | |
name = "cffi" | |
version = "1.15.0" | |
description = "Foreign Function Interface for Python calling C code." | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[package.dependencies] | |
pycparser = "*" | |
[[package]] | |
name = "charset-normalizer" | |
version = "2.0.12" | |
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." | |
category = "main" | |
optional = false | |
python-versions = ">=3.5.0" | |
[package.extras] | |
unicode_backport = ["unicodedata2"] | |
[[package]] | |
name = "click" | |
version = "8.0.4" | |
description = "Composable command line interface toolkit" | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[package.dependencies] | |
colorama = {version = "*", markers = "platform_system == \"Windows\""} | |
[[package]] | |
name = "colorama" | |
version = "0.4.4" | |
description = "Cross-platform colored terminal text." | |
category = "main" | |
optional = false | |
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" | |
[[package]] | |
name = "cryptography" | |
version = "36.0.1" | |
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[package.dependencies] | |
cffi = ">=1.12" | |
[package.extras] | |
docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] | |
docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] | |
pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] | |
sdist = ["setuptools_rust (>=0.11.4)"] | |
ssh = ["bcrypt (>=3.1.5)"] | |
test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] | |
[[package]] | |
name = "dataclasses-json" | |
version = "0.5.6" | |
description = "Easily serialize dataclasses to and from JSON" | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[package.dependencies] | |
marshmallow = ">=3.3.0,<4.0.0" | |
marshmallow-enum = ">=1.5.1,<2.0.0" | |
typing-inspect = ">=0.4.0" | |
[package.extras] | |
dev = ["pytest (>=6.2.3)", "ipython", "mypy (>=0.710)", "hypothesis", "portray", "flake8", "simplejson", "types-dataclasses"] | |
[[package]] | |
name = "idna" | |
version = "3.3" | |
description = "Internationalized Domain Names in Applications (IDNA)" | |
category = "main" | |
optional = false | |
python-versions = ">=3.5" | |
[[package]] | |
name = "marshmallow" | |
version = "3.14.1" | |
description = "A lightweight library for converting complex datatypes to and from native Python datatypes." | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[package.extras] | |
dev = ["pytest", "pytz", "simplejson", "mypy (==0.910)", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "pre-commit (>=2.4,<3.0)", "tox"] | |
docs = ["sphinx (==4.3.0)", "sphinx-issues (==1.2.0)", "alabaster (==0.7.12)", "sphinx-version-warning (==1.1.2)", "autodocsumm (==0.2.7)"] | |
lint = ["mypy (==0.910)", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "pre-commit (>=2.4,<3.0)"] | |
tests = ["pytest", "pytz", "simplejson"] | |
[[package]] | |
name = "marshmallow-enum" | |
version = "1.5.1" | |
description = "Enum field for Marshmallow" | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[package.dependencies] | |
marshmallow = ">=2.0.0" | |
[[package]] | |
name = "mypy-extensions" | |
version = "0.4.3" | |
description = "Experimental type system extensions for programs checked with the mypy typechecker." | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[[package]] | |
name = "pycparser" | |
version = "2.21" | |
description = "C parser in Python" | |
category = "main" | |
optional = false | |
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | |
[[package]] | |
name = "python-dotenv" | |
version = "0.19.2" | |
description = "Read key-value pairs from a .env file and set them as environment variables" | |
category = "main" | |
optional = false | |
python-versions = ">=3.5" | |
[package.extras] | |
cli = ["click (>=5.0)"] | |
[[package]] | |
name = "python-twitter-v2" | |
version = "0.7.4" | |
description = "A simple Python wrapper for Twitter API v2 ✨ 🍰 ✨" | |
category = "main" | |
optional = false | |
python-versions = ">=3.6,<4.0" | |
[package.dependencies] | |
Authlib = ">=0.15.4,<0.16.0" | |
dataclasses-json = ">=0.5.2,<0.6.0" | |
requests = ">=2.24,<3.0" | |
[[package]] | |
name = "requests" | |
version = "2.27.1" | |
description = "Python HTTP for Humans." | |
category = "main" | |
optional = false | |
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" | |
[package.dependencies] | |
certifi = ">=2017.4.17" | |
charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} | |
idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} | |
urllib3 = ">=1.21.1,<1.27" | |
[package.extras] | |
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] | |
use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] | |
[[package]] | |
name = "typing-extensions" | |
version = "4.1.1" | |
description = "Backported and Experimental Type Hints for Python 3.6+" | |
category = "main" | |
optional = false | |
python-versions = ">=3.6" | |
[[package]] | |
name = "typing-inspect" | |
version = "0.7.1" | |
description = "Runtime inspection utilities for typing module." | |
category = "main" | |
optional = false | |
python-versions = "*" | |
[package.dependencies] | |
mypy-extensions = ">=0.3.0" | |
typing-extensions = ">=3.7.4" | |
[[package]] | |
name = "urllib3" | |
version = "1.26.8" | |
description = "HTTP library with thread-safe connection pooling, file post, and more." | |
category = "main" | |
optional = false | |
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" | |
[package.extras] | |
brotli = ["brotlipy (>=0.6.0)"] | |
secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] | |
socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] | |
[metadata] | |
lock-version = "1.1" | |
python-versions = "^3.10" | |
content-hash = "15cec95c7742f9de4321b631e1a71af03bb67ff611f178690d69281ffb35ea8c" | |
[metadata.files] | |
authlib = [ | |
{file = "Authlib-0.15.5-py2.py3-none-any.whl", hash = "sha256:ecf4a7a9f2508c0bb07e93a752dd3c495cfaffc20e864ef0ffc95e3f40d2abaf"}, | |
{file = "Authlib-0.15.5.tar.gz", hash = "sha256:b83cf6360c8e92b0e9df0d1f32d675790bcc4e3c03977499b1eed24dcdef4252"}, | |
] | |
certifi = [ | |
{file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, | |
{file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, | |
] | |
cffi = [ | |
{file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, | |
{file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, | |
{file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, | |
{file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, | |
{file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, | |
{file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, | |
{file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, | |
{file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, | |
{file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, | |
{file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, | |
{file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, | |
{file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, | |
{file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, | |
{file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, | |
{file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, | |
{file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, | |
{file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, | |
{file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, | |
{file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, | |
{file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, | |
{file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, | |
{file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, | |
{file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, | |
{file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, | |
{file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, | |
{file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, | |
{file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, | |
{file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, | |
{file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, | |
{file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, | |
{file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, | |
{file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, | |
{file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, | |
{file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, | |
{file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, | |
{file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, | |
{file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, | |
{file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, | |
{file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, | |
{file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, | |
{file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, | |
{file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, | |
{file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, | |
{file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, | |
{file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, | |
{file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, | |
{file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, | |
{file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, | |
{file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, | |
{file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, | |
] | |
charset-normalizer = [ | |
{file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, | |
{file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, | |
] | |
click = [ | |
{file = "click-8.0.4-py3-none-any.whl", hash = "sha256:6a7a62563bbfabfda3a38f3023a1db4a35978c0abd76f6c9605ecd6554d6d9b1"}, | |
{file = "click-8.0.4.tar.gz", hash = "sha256:8458d7b1287c5fb128c90e23381cf99dcde74beaf6c7ff6384ce84d6fe090adb"}, | |
] | |
colorama = [ | |
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, | |
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, | |
] | |
cryptography = [ | |
{file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"}, | |
{file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"}, | |
{file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"}, | |
{file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"}, | |
{file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"}, | |
{file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"}, | |
{file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"}, | |
{file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"}, | |
{file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"}, | |
{file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"}, | |
{file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"}, | |
{file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"}, | |
{file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"}, | |
{file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"}, | |
{file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"}, | |
{file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"}, | |
{file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"}, | |
{file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"}, | |
{file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"}, | |
{file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"}, | |
] | |
dataclasses-json = [ | |
{file = "dataclasses-json-0.5.6.tar.gz", hash = "sha256:1f60be3405dee30b86ffbf6a436db8ba5efaeeb676bfda358e516a97aa7dfce4"}, | |
{file = "dataclasses_json-0.5.6-py3-none-any.whl", hash = "sha256:1d7f3a284a49d350ddbabde0e7d0c5ffa34a144aaf1bcb5b9f2c87673ff0c76e"}, | |
] | |
idna = [ | |
{file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, | |
{file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, | |
] | |
marshmallow = [ | |
{file = "marshmallow-3.14.1-py3-none-any.whl", hash = "sha256:04438610bc6dadbdddb22a4a55bcc7f6f8099e69580b2e67f5a681933a1f4400"}, | |
{file = "marshmallow-3.14.1.tar.gz", hash = "sha256:4c05c1684e0e97fe779c62b91878f173b937fe097b356cd82f793464f5bc6138"}, | |
] | |
marshmallow-enum = [ | |
{file = "marshmallow-enum-1.5.1.tar.gz", hash = "sha256:38e697e11f45a8e64b4a1e664000897c659b60aa57bfa18d44e226a9920b6e58"}, | |
{file = "marshmallow_enum-1.5.1-py2.py3-none-any.whl", hash = "sha256:57161ab3dbfde4f57adeb12090f39592e992b9c86d206d02f6bd03ebec60f072"}, | |
] | |
mypy-extensions = [ | |
{file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, | |
{file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, | |
] | |
pycparser = [ | |
{file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, | |
{file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, | |
] | |
python-dotenv = [ | |
{file = "python-dotenv-0.19.2.tar.gz", hash = "sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f"}, | |
{file = "python_dotenv-0.19.2-py2.py3-none-any.whl", hash = "sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3"}, | |
] | |
python-twitter-v2 = [ | |
{file = "python-twitter-v2-0.7.4.tar.gz", hash = "sha256:cf8ced6151f4203b7d2530d533252c7bf85cf4a2e4c2185a72b04177019ec9bb"}, | |
{file = "python_twitter_v2-0.7.4-py3-none-any.whl", hash = "sha256:c161cdf06c2d7f8796f87d75ccca675312a43931110d96340b9071768a8b092d"}, | |
] | |
requests = [ | |
{file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, | |
{file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, | |
] | |
typing-extensions = [ | |
{file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, | |
{file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, | |
] | |
typing-inspect = [ | |
{file = "typing_inspect-0.7.1-py2-none-any.whl", hash = "sha256:b1f56c0783ef0f25fb064a01be6e5407e54cf4a4bf4f3ba3fe51e0bd6dcea9e5"}, | |
{file = "typing_inspect-0.7.1-py3-none-any.whl", hash = "sha256:3cd7d4563e997719a710a3bfe7ffb544c6b72069b6812a02e9b414a8fa3aaa6b"}, | |
{file = "typing_inspect-0.7.1.tar.gz", hash = "sha256:047d4097d9b17f46531bf6f014356111a1b6fb821a24fe7ac909853ca2a782aa"}, | |
] | |
urllib3 = [ | |
{file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, | |
{file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, | |
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[tool.poetry] | |
name = "drawer" | |
version = "0.1.0" | |
description = "" | |
authors = ["Amaury Carrade <amaury@carrade.eu>"] | |
[tool.poetry.dependencies] | |
python = "^3.10" | |
python-twitter-v2 = "^0.7.4" | |
click = "^8.0.4" | |
python-dotenv = "^0.19.2" | |
[tool.poetry.dev-dependencies] | |
[build-system] | |
requires = ["poetry-core>=1.0.0"] | |
build-backend = "poetry.core.masonry.api" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment