From eebd75d34d01b8bdd6f2e4a5a056c58b90864f9b Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Fri, 20 Dec 2024 01:24:18 +0000 Subject: [PATCH 01/38] Fix dependency conflicts --- requirements.txt | Bin 576 -> 580 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/requirements.txt b/requirements.txt index e52a6b21267c11b174b04239c9dfc3db2af2f701..e3d9716053f0dcce2f7122366de8426642673db4 100644 GIT binary patch delta 40 vcmX@Wa)f2V7Iq5;JqBY2gNZv0SxtaUgNg4GnGG2XCI>Q}XEdIy$RrN{=r; Date: Fri, 20 Dec 2024 01:37:31 +0000 Subject: [PATCH 02/38] Add footer icons --- docs/source/conf.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index 207f6d1..1e1d5d4 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -31,6 +31,28 @@ html_static_path = ['_static'] html_theme_options = { + "footer_icons": [ + { + "name": "GitHub", + "url": "https://github.com/RyanLua/InstaWebhooks", + "html": """ + + + + """, + "class": "", + }, + { + "name": "Read the Docs", + "url": "https://readthedocs.org/projects/instawebhooks", + "html": """ + + + + """, + "class": "", + }, + ], "announcement": "This is a early version of the documentation and not final.", "source_repository": "https://github.com/RyanLua/InstaWebhooks", "source_branch": "main", From c1ddf8ca9b6f5e8aea63740698aeb16fabf3d0bd Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 10:19:12 +0000 Subject: [PATCH 03/38] Add sphinx-argparse extension for Sphinx --- docs/source/conf.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index 1e1d5d4..a35adc9 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,7 +16,8 @@ # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ - 'sphinx_copybutton' + 'sphinx_copybutton', + 'sphinxarg.ext', ] templates_path = ['_templates'] From 43f3dade32a3322e41c6c24403cfc20ab8ae622d Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 10:20:04 +0000 Subject: [PATCH 04/38] Move parsing logic into another file --- src/instawebhooks/__main__.py | 47 ++------------------------- src/instawebhooks/parser.py | 60 +++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 45 deletions(-) create mode 100644 src/instawebhooks/parser.py diff --git a/src/instawebhooks/__main__.py b/src/instawebhooks/__main__.py index f424ec2..d52a5b1 100644 --- a/src/instawebhooks/__main__.py +++ b/src/instawebhooks/__main__.py @@ -6,7 +6,6 @@ import logging import re import sys -from argparse import ArgumentParser from typing import Dict from datetime import datetime, timedelta from itertools import dropwhile, takewhile @@ -23,6 +22,8 @@ f"{exc.name} not found.\n pip install [--user] {exc.name}" ) from exc +from .parser import parser + def regex(pattern: str): """Argument type for matching a regex pattern""" @@ -45,50 +46,6 @@ def closure_check_regex(arg_value: str): level=logging.INFO, ) -# Parse command line arguments -parser = ArgumentParser( - prog="instawebhooks", - description=( - "Monitor Instagram accounts for new posts and send them to a Discord webhook" - ), - epilog="https://github.com/RaenLua/InstaWebhooks", -) -group = parser.add_mutually_exclusive_group() -parser.add_argument( - "instagram_username", - help="the Instagram username to monitor for new posts", - type=regex(r"^[a-zA-Z_](?!.*?\.{2})[\w.]{1,28}[\w]$"), -) -parser.add_argument( - "discord_webhook_url", - help="the Discord webhook URL to send new posts to", - type=regex( - r"^.*(discord|discordapp)\.com\/api\/webhooks\/([\d]+)\/([a-zA-Z0-9_.-]*)$" - ), -) -group.add_argument("-q", "--quiet", help="hide all logging", action="store_true") -group.add_argument("-v", "--verbose", help="show debug logging", action="store_true") -parser.add_argument( - "-i", - "--refresh-interval", - help="time in seconds to wait before checking for new posts again", - type=int, - default=3600, -) -parser.add_argument( - "-c", - "--message-content", - help="the message content to send with the webhook", - type=str, - default="", -) -parser.add_argument( - "-e", - "--no-embed", - help="don't show the post embed and only send message content", - action="store_true", -) -parser.add_argument("--version", action="version", version="%(prog)s " + version) args = parser.parse_args() # Set the logger to debug if verbose is enabled diff --git a/src/instawebhooks/parser.py b/src/instawebhooks/parser.py new file mode 100644 index 0000000..6a229cd --- /dev/null +++ b/src/instawebhooks/parser.py @@ -0,0 +1,60 @@ +"""Command line argument parser for InstaWebhooks""" + +import importlib.metadata +import re +from argparse import ArgumentParser + +def regex(pattern: str): + """Argument type for matching a regex pattern""" + def closure_check_regex(arg_value: str): + if not re.match(pattern, arg_value): + raise ValueError(f"invalid value: '{arg_value}'") + return arg_value + return closure_check_regex + +version = importlib.metadata.version("instawebhooks") + +# Parse command line arguments +parser = ArgumentParser( + prog="instawebhooks", + description=( + "Monitor Instagram accounts for new posts and send them to a Discord webhook" + ), + epilog="https://github.com/RaenLua/InstaWebhooks", +) +group = parser.add_mutually_exclusive_group() +parser.add_argument( + "instagram_username", + help="the Instagram username to monitor for new posts", + type=regex(r"^[a-zA-Z_](?!.*?\.{2})[\w.]{1,28}[\w]$"), +) +parser.add_argument( + "discord_webhook_url", + help="the Discord webhook URL to send new posts to", + type=regex( + r"^.*(discord|discordapp)\.com\/api\/webhooks\/([\d]+)\/([a-zA-Z0-9_.-]*)$" + ), +) +group.add_argument("-q", "--quiet", help="hide all logging", action="store_true") +group.add_argument("-v", "--verbose", help="show debug logging", action="store_true") +parser.add_argument( + "-i", + "--refresh-interval", + help="time in seconds to wait before checking for new posts again", + type=int, + default=3600, +) +parser.add_argument( + "-c", + "--message-content", + help="the message content to send with the webhook", + type=str, + default="", +) +parser.add_argument( + "-e", + "--no-embed", + help="don't show the post embed and only send message content", + action="store_true", +) +parser.add_argument("--version", action="version", version="%(prog)s " + version) From 8456c0960786148103fbadd8894b4da66cd48e0d Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 10:24:43 +0000 Subject: [PATCH 05/38] Use auto generated docs --- docs/source/usage.rst | 79 +++---------------------------------------- 1 file changed, 5 insertions(+), 74 deletions(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 9470763..98b424c 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -83,77 +83,8 @@ Send new posts every hour with no embed and a custom message: Reference --------- -Positional Arguments -~~~~~~~~~~~~~~~~~~~~ - -``INSTAGRAM_USERNAME`` - - The Instagram username to monitor for new posts. - - Usernames must follow the Instagram username format: - - * Starts with a letter or underscore. - * Does not contain consecutive periods. - * Is between 2 and 30 characters long. - * Ends with an alphanumeric character or underscore. - -``DISCORD_WEBHOOK_URL`` - - The Discord webhook URL to send new posts to. - - URLs must follow the Discord webhook URL format: - - * ``https://discord.com/api/webhooks/{webhook_id}/{webhook_token}`` - * ``https://discordapp.com/api/webhooks/{webhook_id}/{webhook_token}`` - -Optional Arguments -~~~~~~~~~~~~~~~~~~ - -``-h, --help`` - - Show this help message and exit. - -``-v, --verbose`` - - Enable verbose logging. - - Changes the logging level to debug, showing the following logs in addition to the default info logs: - - * When a check for new posts is started. - * If a new post is found or not. - * When a post is sent to Discord. - -``-i REFRESH_INTERVAL, --refresh-interval REFRESH_INTERVAL`` - - .. caution:: - - Do not set the refresh interval too low or you may be `rate limited by Instagram `_. - - The refresh interval to check for new posts in seconds (default: 3600). - -``-c MESSAGE_CONTENT, --message-content MESSAGE_CONTENT`` - - The message content to send to Discord (default: ""). - - Accepts placeholders for the post information: - - * ``{post_url}`` - The URL to the post on Instagram - * ``https://www.instagram.com/C8wRGmyR-6N`` - * ``{owner_url}`` - The URL to the owner's profile on Instagram - * ``https://www.instagram.com/raenlua`` - * ``{owner_name}`` - The owner's full name - * ``Ryan Luu`` - * ``{owner_username}`` - The owner's username - * ``raenlua`` - * ``{post_caption}`` - The post's caption - * ``This is a post caption.`` - * ``{post_shortcode}`` - The post's shortcode - * ``C8wRGmyR-6N`` - * ``{post_image_url}`` - The post's image URL - * ``https://www.instagram.com/p/C8wRGmyR-6N/media`` - -``-e, --no-embed`` - - Don't show the post embed and only send message content - - A message content must be provided when using this option. Empty messages cannot be sent. \ No newline at end of file +.. argparse:: + :module: src.instawebhooks.parser + :func: parser + :prog: instawebhooks + :noepilog: \ No newline at end of file From 566e5fc24738f5ee6fcce9f47856aabdda6fea31 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 23:03:03 +0000 Subject: [PATCH 06/38] Don't open preview --- .devcontainer/devcontainer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f9acb49..21b3ded 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,8 +14,7 @@ "forwardPorts": [8000], "portsAttributes": { "8000": { - "label": "Sphinx", - "onAutoForward": "openPreview" + "label": "Sphinx" } }, From 12559fff0255e74e40fc2be7df028ecc4ba6118b Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 23:06:46 +0000 Subject: [PATCH 07/38] Add descriptions to positional arguments --- docs/source/usage.rst | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 98b424c..eb95ad4 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -87,4 +87,18 @@ Reference :module: src.instawebhooks.parser :func: parser :prog: instawebhooks - :noepilog: \ No newline at end of file + :noepilog: + + instagram_username : @after + Usernames must follow the Instagram username format: + + * Starts with a letter or underscore. + * Does not contain consecutive periods. + * Is between 2 and 30 characters long. + * Ends with an alphanumeric character or underscore. + + discord_webhook_url : @after + URLs must follow the Discord webhook URL format: + + * ``https://discord.com/api/webhooks/{webhook_id}/{webhook_token}`` + * ``https://discordapp.com/api/webhooks/{webhook_id}/{webhook_token}`` From 10bed039840bf526ea1396a13980d19c2bdac344 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 23:14:20 +0000 Subject: [PATCH 08/38] Add build task for documentation --- .vscode/tasks.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 2773ad3..71541e0 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -27,6 +27,12 @@ "-e" ], "problemMatcher": [] + }, + { + "label": "Build documentation", + "type": "shell", + "command": "sphinx-autobuild docs/source docs/_build/html --open-browser", + "problemMatcher": [] } ] } From 7eed39318f11a95b96221c8269d63578c1405076 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Tue, 24 Dec 2024 23:18:06 +0000 Subject: [PATCH 09/38] Simplify usage --- docs/source/usage.rst | 50 +++++-------------------------------------- 1 file changed, 5 insertions(+), 45 deletions(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index eb95ad4..73d7370 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -6,75 +6,35 @@ To see the available options and arguments, run the following command: .. code:: console $ instawebhooks --help - usage: instawebhooks [-h] [-q | -v] [-i REFRESH_INTERVAL] [-c MESSAGE_CONTENT] [-e] [--version] - instagram_username discord_webhook_url - - Monitor Instagram accounts for new posts and send them to a Discord webhook - - positional arguments: - instagram_username the Instagram username to monitor for new posts - discord_webhook_url the Discord webhook URL to send new posts to - - options: - -h, --help show this help message and exit - -q, --quiet hide all logging - -v, --verbose show debug logging - -i REFRESH_INTERVAL, --refresh-interval REFRESH_INTERVAL - time in seconds to wait before checking for new posts again - -c MESSAGE_CONTENT, --message-content MESSAGE_CONTENT - the message content to send with the webhook - -e, --no-embed don't show the post embed and only send message content - --version show program's version number and exit - - https://github.com/RaenLua/InstaWebhooks - -Below, learn how to use InstaWebhooks and what you can do with it. Examples -------- -In the below templates, replace ```` with the Instagram username you want to monitor and ```` with the Discord webhook URL you want to send new posts to. - -Your command should look similar to this: - -.. code:: console - - $ instawebhooks raenlua https://discord.com/api/webhooks/0123456789/abcdefghijklmnopqrstuvwxyz - -Templates ---------- - -Example templates for using InstaWebhooks are provided below. Note to change the Instagram username and Discord webhook URL to your own. - -.. note:: - - The default refresh interval is 1 hour (3600 seconds), and the default message content is an empty string. - -Send new posts every hour: +* Send new posts: .. code:: console $ instawebhooks -Send new posts every hour with verbose logging: +* Send new posts with verbose logging: .. code:: console $ instawebhooks -v -Send new posts every 30 minutes: +* Send new posts every 30 minutes: .. code:: console $ instawebhooks -i 1800 -Send new posts every hour with a custom message: +* Send new posts with a custom message: .. code:: console $ instawebhooks -c "New post from {owner_name}: {post_url}" -Send new posts every hour with no embed and a custom message: +* Send new posts with no embed and a custom message: .. code:: console From af4dd6514feee801cee941b1a55fa424b2b2c18d Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:16:10 +0000 Subject: [PATCH 10/38] Don't open browser --- .vscode/tasks.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 71541e0..1bf4ac5 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -31,7 +31,7 @@ { "label": "Build documentation", "type": "shell", - "command": "sphinx-autobuild docs/source docs/_build/html --open-browser", + "command": "sphinx-autobuild docs/source docs/_build/html", "problemMatcher": [] } ] From 3b68f40e88922adb77571dff4943326e1cdec38f Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:19:00 +0000 Subject: [PATCH 11/38] Add images --- docs/source/_static/integrations-tab.png | Bin 0 -> 40157 bytes docs/source/_static/new-webhook.png | Bin 0 -> 23630 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/source/_static/integrations-tab.png create mode 100644 docs/source/_static/new-webhook.png diff --git a/docs/source/_static/integrations-tab.png b/docs/source/_static/integrations-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..298e136ae7e960d15234fd74222caad52d74fe46 GIT binary patch literal 40157 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 literal 0 HcmV?d00001 diff --git a/docs/source/_static/new-webhook.png b/docs/source/_static/new-webhook.png new file mode 100644 index 0000000000000000000000000000000000000000..83475f561154f3a305b75602972691ee55b55016 GIT binary patch literal 23630 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 Date: Wed, 25 Dec 2024 01:19:07 +0000 Subject: [PATCH 12/38] Remove .gitkeep --- docs/source/_static/.gitkeep | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/source/_static/.gitkeep diff --git a/docs/source/_static/.gitkeep b/docs/source/_static/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/docs/source/_static/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - From cf15bf88a43e6b8bd226156705cce9d3cb726c4e Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:38:19 +0000 Subject: [PATCH 13/38] Add getting started --- docs/source/getting-started.rst | 76 +++++++++++++++++++++++++++++++++ docs/source/index.rst | 1 + 2 files changed, 77 insertions(+) create mode 100644 docs/source/getting-started.rst diff --git a/docs/source/getting-started.rst b/docs/source/getting-started.rst new file mode 100644 index 0000000..d7d25e4 --- /dev/null +++ b/docs/source/getting-started.rst @@ -0,0 +1,76 @@ +Getting Started +=============== + +Learn about getting started with InstaWebhooks to send new Instagram posts any Discord channel from scratch. + +Installing InstaWebhooks +------------------------ + +With `Python `_ installed, install InstaWebhooks with `pip `_: + +.. code:: console + + $ pip install instawebhooks + +Check that InstaWebhooks was installed correctly by seeing if it reports its version: + +.. code:: console + + $ instawebhooks --version + +Make sure that are on the `latest version of InstaWebhooks `_. + +For more ways to install InstaWebhooks, see the `installation guide `_. + +Setting up Discord webhooks +--------------------------- + +To get your Discord webhook URL, you need the **Manage Webhooks** permission in the channel you want to send new Instagram posts to. + +You can learn more about webhooks through the article, `Intro to Webhooks `_. + +Creating your webhook +^^^^^^^^^^^^^^^^^^^^^ + +If your already have a webhook, you can skip this step. + +#. Open **Server Settings**, then **Integrations** +#. Click the "**Create Webhook**" button + +.. image:: _static/integrations-tab.png + +Now you can set the name, channel, and avatar for the webhook. + +Getting the webhook URL +^^^^^^^^^^^^^^^^^^^^^^^ + +When you have your webhook made, click the "**Copy Webhook URL**" button to copy the URL to your clipboard. + +.. image:: _static/webhook-settings.png + +The copied URL should look similar this: + +.. code:: none + + https://discordapp.com/api/webhooks/0123456789/abcdefghijklmnopqrstuvwxyz + +Setting up InstaWebhooks +------------------------ + +Now with the webhook URL and a Instagram account in mind, you can set up InstaWebhooks to send new Instagram posts to your Discord channel. + +Replace ```` with the username of the Instagram account you want to monitor and ```` with the Discord webhook URL you copied earlier. + +.. code:: console + + $ instawebhooks + +It should look something like this: + +.. code:: console + + $ instawebhooks raenlua https://discord.com/api/webhooks/0123456789/abcdefghijklmnopqrstuvwxyz + +Now, whenever the Instagram account `@raenlua` posts a new photo, it will be sent to the Discord webhook. + +For more information about using InstaWebhooks, see the `usage guide `_. diff --git a/docs/source/index.rst b/docs/source/index.rst index 08d0250..588a012 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -30,6 +30,7 @@ Contents .. toctree:: + getting-started installation usage From 1a117c640a5d285d42fe7f7c8e1d289ec1456de8 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:41:33 +0000 Subject: [PATCH 14/38] Only checkout src --- .github/workflows/ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4a07f4..730ae26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,6 +17,9 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 + with: + sparse-checkout: | + src - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 From f6ea6490da9670ce3be8a25eb755ff3bca9b5fa3 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:43:24 +0000 Subject: [PATCH 15/38] Fix URLs --- docs/source/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 588a012..8a0dad0 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -37,7 +37,7 @@ Contents .. toctree:: :caption: Project - Contributing - Code of Conduct + Contributing + Code of Conduct GitHub PyPI \ No newline at end of file From 3fc244da08460a16b95f57c06129e78d7b6c8824 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:45:45 +0000 Subject: [PATCH 16/38] Rename webhook image --- .../{new-webhook.png => webhook-settings.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/source/_static/{new-webhook.png => webhook-settings.png} (100%) diff --git a/docs/source/_static/new-webhook.png b/docs/source/_static/webhook-settings.png similarity index 100% rename from docs/source/_static/new-webhook.png rename to docs/source/_static/webhook-settings.png From 62444c3490e66f2f868ea73add4e76cdd30dce89 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:49:17 +0000 Subject: [PATCH 17/38] Fix reference --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 73d7370..e3f2833 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :module: src.instawebhooks.parser + :module: instawebhooks.parser :func: parser :prog: instawebhooks :noepilog: From 2aa1be9e1f17b16d21646cdf0f7b401e6fa45570 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:49:23 +0000 Subject: [PATCH 18/38] Increment version --- docs/source/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index a35adc9..f090d64 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -9,8 +9,8 @@ project = 'InstaWebhooks' copyright = '2024, Ryan Luu' author = 'Ryan Luu' -release = '0.1' -version = '0.1.3' +release = '1.0' +version = '1.0.0' # -- General configuration --------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration From e0b24a191c86767568523b72a04c7b7101a94631 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 01:52:48 +0000 Subject: [PATCH 19/38] Add bullet points --- docs/source/index.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/source/index.rst b/docs/source/index.rst index 8a0dad0..235d95d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -8,6 +8,10 @@ InstaWebhooks documentation InstaWebhooks is a `Python `_ command-line interface which allows you to monitor any Instagram account for new posts and then send them to a `Discord webhook `_. +* Works with **any Instagram account**, including private accounts if you are a follower +* Customizable **Discord embeds** for new posts and message contents including **mentions/pings** +* **User-definable refresh interval** for checking for new posts the second they are posted + Quickstart ---------- From fb9e45d9cf2a2cd616bddf91f752de74fc8b6c26 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:09:11 +0000 Subject: [PATCH 20/38] Add image of webhook message --- docs/source/_static/webhook-message.png | Bin 0 -> 75764 bytes docs/source/getting-started.rst | 2 ++ 2 files changed, 2 insertions(+) create mode 100644 docs/source/_static/webhook-message.png diff --git a/docs/source/_static/webhook-message.png b/docs/source/_static/webhook-message.png new file mode 100644 index 0000000000000000000000000000000000000000..d22fc882ae7977aad45a53cf3a62596abf9c1f2b GIT binary patch literal 75764 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 literal 0 HcmV?d00001 diff --git a/docs/source/getting-started.rst b/docs/source/getting-started.rst index d7d25e4..9434871 100644 --- a/docs/source/getting-started.rst +++ b/docs/source/getting-started.rst @@ -73,4 +73,6 @@ It should look something like this: Now, whenever the Instagram account `@raenlua` posts a new photo, it will be sent to the Discord webhook. +.. image:: _static/webhook-message.png + For more information about using InstaWebhooks, see the `usage guide `_. From 11273a8b6432cfad7d2dacfb83f3de8b46e101ac Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:16:30 +0000 Subject: [PATCH 21/38] Lint documentation --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 730ae26..a89fd20 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: - name: Install dependencies run: | - python -m pip install --upgrade pip pylint black mypy + python -m pip install --upgrade pip pylint black mypy sphinx-lint pip install -r requirements.txt - name: Run Pylint @@ -43,3 +43,7 @@ jobs: - name: Run Mypy run: | mypy $(git ls-files '*.py') + + - name: Run Sphinx Lint + run: | + sphinx-lint $(git ls-files '*.rst') \ No newline at end of file From bb11a95f452d025d18dd00349ebd7bbbdc977319 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:17:00 +0000 Subject: [PATCH 22/38] Fix linter --- docs/source/index.rst | 2 +- docs/source/installation.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/index.rst b/docs/source/index.rst index 235d95d..a196444 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -44,4 +44,4 @@ Contents Contributing Code of Conduct GitHub - PyPI \ No newline at end of file + PyPI diff --git a/docs/source/installation.rst b/docs/source/installation.rst index c022cbc..d6e0c30 100644 --- a/docs/source/installation.rst +++ b/docs/source/installation.rst @@ -90,4 +90,4 @@ Installing from source code is another option to contribute or use the latest de .. code:: console - $ pip install --editable . \ No newline at end of file + $ pip install --editable . From eb855702484441f9fd63979dd854ef2855381d6b Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:28:35 +0000 Subject: [PATCH 23/38] Fix formatting errors --- src/instawebhooks/__main__.py | 20 +++----------------- src/instawebhooks/parser.py | 4 ++++ 2 files changed, 7 insertions(+), 17 deletions(-) diff --git a/src/instawebhooks/__main__.py b/src/instawebhooks/__main__.py index d52a5b1..baaf657 100644 --- a/src/instawebhooks/__main__.py +++ b/src/instawebhooks/__main__.py @@ -1,15 +1,16 @@ """Module for sending new Instagram posts to Discord.""" import asyncio -import importlib.metadata import io import logging import re import sys -from typing import Dict from datetime import datetime, timedelta from itertools import dropwhile, takewhile from time import sleep +from typing import Dict + +from .parser import parser try: from aiohttp import ClientSession @@ -22,21 +23,6 @@ f"{exc.name} not found.\n pip install [--user] {exc.name}" ) from exc -from .parser import parser - - -def regex(pattern: str): - """Argument type for matching a regex pattern""" - - def closure_check_regex(arg_value: str): - if not re.match(pattern, arg_value): - raise ValueError(f"invalid value: '{arg_value}'") - return arg_value - - return closure_check_regex - - -version = importlib.metadata.version("instawebhooks") # Set up logging logger = logging.getLogger(__name__) diff --git a/src/instawebhooks/parser.py b/src/instawebhooks/parser.py index 6a229cd..77ce43b 100644 --- a/src/instawebhooks/parser.py +++ b/src/instawebhooks/parser.py @@ -4,14 +4,18 @@ import re from argparse import ArgumentParser + def regex(pattern: str): """Argument type for matching a regex pattern""" + def closure_check_regex(arg_value: str): if not re.match(pattern, arg_value): raise ValueError(f"invalid value: '{arg_value}'") return arg_value + return closure_check_regex + version = importlib.metadata.version("instawebhooks") # Parse command line arguments From cd1cab258fe00e13deddbe553b43e08d08c19dfa Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:29:08 +0000 Subject: [PATCH 24/38] Fix missing files --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a89fd20..122f5d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,9 +17,6 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v4 - with: - sparse-checkout: | - src - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 From 70cd9d01cbdef7723d040c414904af8d448943c4 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:32:42 +0000 Subject: [PATCH 25/38] Only check src --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 122f5d1..74d6cad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,15 +31,15 @@ jobs: - name: Run Pylint run: | - pylint $(git ls-files '*.py') + pylint $(git ls-files 'src/**/*.py') - name: Run Black run: | - black $(git ls-files '*.py') --check + black $(git ls-files 'src/**/*.py') --check - name: Run Mypy run: | - mypy $(git ls-files '*.py') + mypy $(git ls-files 'src/**/*.py') - name: Run Sphinx Lint run: | From 68befb3f1e340bc3a39688f9b661088dd2b87506 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:35:04 +0000 Subject: [PATCH 26/38] Fix module import --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index e3f2833..73d7370 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :module: instawebhooks.parser + :module: src.instawebhooks.parser :func: parser :prog: instawebhooks :noepilog: From a114e6e75bdb8033a23c0a0032b942f69a5d1baf Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:35:44 +0000 Subject: [PATCH 27/38] Run on RST file changes --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 74d6cad..2de2752 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: paths: - '**.py' + - '**.rst' - '.github/workflows/ci.yml' jobs: From 34e2312db278bad695c7c90c1a52e8e3a7dee3e9 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:39:53 +0000 Subject: [PATCH 28/38] Use filename --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 73d7370..95b0f2e 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :module: src.instawebhooks.parser + :filename: src/instawebhooks/parser.py :func: parser :prog: instawebhooks :noepilog: From d5e167774f87cf1e161e03aa38f112df57121212 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Wed, 25 Dec 2024 04:41:35 +0000 Subject: [PATCH 29/38] Escape directory --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 95b0f2e..cf80755 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :filename: src/instawebhooks/parser.py + :filename: ../../src/instawebhooks/parser.py :func: parser :prog: instawebhooks :noepilog: From 2fd533fd368c99739da17795217f31cb8653a85e Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:24:12 -0800 Subject: [PATCH 30/38] Fix directory escaping --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index cf80755..8d8b319 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :filename: ../../src/instawebhooks/parser.py + :filename: ../src/instawebhooks/parser.py :func: parser :prog: instawebhooks :noepilog: From 2d37f1d0a4b6b5e0e7d8aa8190d4846e70bdd40f Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:32:18 -0800 Subject: [PATCH 31/38] Revert to module --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 8d8b319..73d7370 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :filename: ../src/instawebhooks/parser.py + :module: src.instawebhooks.parser :func: parser :prog: instawebhooks :noepilog: From d8b6a8c5e598921a513f66ffc25fd45943806ddf Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:35:08 -0800 Subject: [PATCH 32/38] Remove src --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index 73d7370..e3f2833 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :module: src.instawebhooks.parser + :module: instawebhooks.parser :func: parser :prog: instawebhooks :noepilog: From cd7285bade18e78c0048453d4215b3bd33a6de8c Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:37:25 -0800 Subject: [PATCH 33/38] Add back src --- docs/source/usage.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/usage.rst b/docs/source/usage.rst index e3f2833..73d7370 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -44,7 +44,7 @@ Reference --------- .. argparse:: - :module: instawebhooks.parser + :module: src.instawebhooks.parser :func: parser :prog: instawebhooks :noepilog: From c1c599c06b8a6556a1343a0b3c906ed657873c25 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:49:45 -0800 Subject: [PATCH 34/38] Setup path --- docs/source/conf.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/source/conf.py b/docs/source/conf.py index f090d64..b365fd2 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -3,6 +3,17 @@ # For the full list of built-in configuration values, see the documentation: # https://www.sphinx-doc.org/en/master/usage/configuration.html +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('..')) + + # -- Project information ----------------------------------------------------- # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information From 34933909dc659f757c89eb07863848e3cf0f936c Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 01:53:38 -0800 Subject: [PATCH 35/38] Escape two directories --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index b365fd2..ccb8040 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -11,7 +11,7 @@ # import os import sys -sys.path.insert(0, os.path.abspath('..')) +sys.path.insert(0, os.path.abspath('../..')) # -- Project information ----------------------------------------------------- From 76ac9c0ba7de62037d06a5ead7f9b179fec504f4 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 02:08:32 -0800 Subject: [PATCH 36/38] Fix version --- src/instawebhooks/parser.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/instawebhooks/parser.py b/src/instawebhooks/parser.py index 77ce43b..c67bb0f 100644 --- a/src/instawebhooks/parser.py +++ b/src/instawebhooks/parser.py @@ -16,7 +16,10 @@ def closure_check_regex(arg_value: str): return closure_check_regex -version = importlib.metadata.version("instawebhooks") +try: + version = importlib.metadata.version("instawebhooks") +except importlib.metadata.PackageNotFoundError: + version = "unknown" # Parse command line arguments parser = ArgumentParser( From 9a2be5c7e1e3a00966255bf32ffbb3ad136592b6 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 02:12:33 -0800 Subject: [PATCH 37/38] Fix indentation --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2de2752..08a848d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,15 +32,15 @@ jobs: - name: Run Pylint run: | - pylint $(git ls-files 'src/**/*.py') + pylint $(git ls-files 'src/**/*.py') - name: Run Black run: | - black $(git ls-files 'src/**/*.py') --check + black $(git ls-files 'src/**/*.py') --check - name: Run Mypy run: | - mypy $(git ls-files 'src/**/*.py') + mypy $(git ls-files 'src/**/*.py') - name: Run Sphinx Lint run: | From 96b7570b32be9f195915e455176c3606baba04a4 Mon Sep 17 00:00:00 2001 From: Ryan Luu Date: Thu, 26 Dec 2024 02:14:27 -0800 Subject: [PATCH 38/38] Use upper case for version --- src/instawebhooks/parser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/instawebhooks/parser.py b/src/instawebhooks/parser.py index c67bb0f..8753c1a 100644 --- a/src/instawebhooks/parser.py +++ b/src/instawebhooks/parser.py @@ -17,9 +17,9 @@ def closure_check_regex(arg_value: str): try: - version = importlib.metadata.version("instawebhooks") + VERSION = importlib.metadata.version("instawebhooks") except importlib.metadata.PackageNotFoundError: - version = "unknown" + VERSION = "unknown" # Parse command line arguments parser = ArgumentParser( @@ -64,4 +64,4 @@ def closure_check_regex(arg_value: str): help="don't show the post embed and only send message content", action="store_true", ) -parser.add_argument("--version", action="version", version="%(prog)s " + version) +parser.add_argument("--version", action="version", version="%(prog)s " + VERSION)