Initial commit
This commit is contained in:
		
							
								
								
									
										4
									
								
								.env.sample
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.env.sample
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					REDDIT_CLIENT_ID=""
 | 
				
			||||||
 | 
					REDDIT_CLIENT_SECRET=""
 | 
				
			||||||
 | 
					REDDIT_USERNAME=""
 | 
				
			||||||
 | 
					REDDIT_PASSWORD=""
 | 
				
			||||||
							
								
								
									
										165
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,165 @@
 | 
				
			|||||||
 | 
					# Byte-compiled / optimized / DLL files
 | 
				
			||||||
 | 
					__pycache__/
 | 
				
			||||||
 | 
					*.py[cod]
 | 
				
			||||||
 | 
					*$py.class
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# C extensions
 | 
				
			||||||
 | 
					*.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Distribution / packaging
 | 
				
			||||||
 | 
					.Python
 | 
				
			||||||
 | 
					build/
 | 
				
			||||||
 | 
					develop-eggs/
 | 
				
			||||||
 | 
					dist/
 | 
				
			||||||
 | 
					downloads/
 | 
				
			||||||
 | 
					eggs/
 | 
				
			||||||
 | 
					.eggs/
 | 
				
			||||||
 | 
					lib/
 | 
				
			||||||
 | 
					lib64/
 | 
				
			||||||
 | 
					parts/
 | 
				
			||||||
 | 
					sdist/
 | 
				
			||||||
 | 
					var/
 | 
				
			||||||
 | 
					wheels/
 | 
				
			||||||
 | 
					share/python-wheels/
 | 
				
			||||||
 | 
					*.egg-info/
 | 
				
			||||||
 | 
					.installed.cfg
 | 
				
			||||||
 | 
					*.egg
 | 
				
			||||||
 | 
					MANIFEST
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyInstaller
 | 
				
			||||||
 | 
					#  Usually these files are written by a python script from a template
 | 
				
			||||||
 | 
					#  before PyInstaller builds the exe, so as to inject date/other infos into it.
 | 
				
			||||||
 | 
					*.manifest
 | 
				
			||||||
 | 
					*.spec
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Installer logs
 | 
				
			||||||
 | 
					pip-log.txt
 | 
				
			||||||
 | 
					pip-delete-this-directory.txt
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Unit test / coverage reports
 | 
				
			||||||
 | 
					htmlcov/
 | 
				
			||||||
 | 
					.tox/
 | 
				
			||||||
 | 
					.nox/
 | 
				
			||||||
 | 
					.coverage
 | 
				
			||||||
 | 
					.coverage.*
 | 
				
			||||||
 | 
					.cache
 | 
				
			||||||
 | 
					nosetests.xml
 | 
				
			||||||
 | 
					coverage.xml
 | 
				
			||||||
 | 
					*.cover
 | 
				
			||||||
 | 
					*.py,cover
 | 
				
			||||||
 | 
					.hypothesis/
 | 
				
			||||||
 | 
					.pytest_cache/
 | 
				
			||||||
 | 
					cover/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Translations
 | 
				
			||||||
 | 
					*.mo
 | 
				
			||||||
 | 
					*.pot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Django stuff:
 | 
				
			||||||
 | 
					*.log
 | 
				
			||||||
 | 
					local_settings.py
 | 
				
			||||||
 | 
					db.sqlite3
 | 
				
			||||||
 | 
					db.sqlite3-journal
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Flask stuff:
 | 
				
			||||||
 | 
					instance/
 | 
				
			||||||
 | 
					.webassets-cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Scrapy stuff:
 | 
				
			||||||
 | 
					.scrapy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Sphinx documentation
 | 
				
			||||||
 | 
					docs/_build/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyBuilder
 | 
				
			||||||
 | 
					.pybuilder/
 | 
				
			||||||
 | 
					target/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Jupyter Notebook
 | 
				
			||||||
 | 
					.ipynb_checkpoints
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# IPython
 | 
				
			||||||
 | 
					profile_default/
 | 
				
			||||||
 | 
					ipython_config.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pyenv
 | 
				
			||||||
 | 
					#   For a library or package, you might want to ignore these files since the code is
 | 
				
			||||||
 | 
					#   intended to run in multiple environments; otherwise, check them in:
 | 
				
			||||||
 | 
					# .python-version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pipenv
 | 
				
			||||||
 | 
					#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
 | 
				
			||||||
 | 
					#   However, in case of collaboration, if having platform-specific dependencies or dependencies
 | 
				
			||||||
 | 
					#   having no cross-platform support, pipenv may install dependencies that don't work, or not
 | 
				
			||||||
 | 
					#   install all needed dependencies.
 | 
				
			||||||
 | 
					#Pipfile.lock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# poetry
 | 
				
			||||||
 | 
					#   Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
 | 
				
			||||||
 | 
					#   This is especially recommended for binary packages to ensure reproducibility, and is more
 | 
				
			||||||
 | 
					#   commonly ignored for libraries.
 | 
				
			||||||
 | 
					#   https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
 | 
				
			||||||
 | 
					#poetry.lock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pdm
 | 
				
			||||||
 | 
					#   Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
 | 
				
			||||||
 | 
					#pdm.lock
 | 
				
			||||||
 | 
					#   pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
 | 
				
			||||||
 | 
					#   in version control.
 | 
				
			||||||
 | 
					#   https://pdm.fming.dev/#use-with-ide
 | 
				
			||||||
 | 
					.pdm.toml
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
 | 
				
			||||||
 | 
					__pypackages__/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Celery stuff
 | 
				
			||||||
 | 
					celerybeat-schedule
 | 
				
			||||||
 | 
					celerybeat.pid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SageMath parsed files
 | 
				
			||||||
 | 
					*.sage.py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Environments
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
 | 
					.venv
 | 
				
			||||||
 | 
					env/
 | 
				
			||||||
 | 
					venv/
 | 
				
			||||||
 | 
					ENV/
 | 
				
			||||||
 | 
					env.bak/
 | 
				
			||||||
 | 
					venv.bak/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Spyder project settings
 | 
				
			||||||
 | 
					.spyderproject
 | 
				
			||||||
 | 
					.spyproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Rope project settings
 | 
				
			||||||
 | 
					.ropeproject
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mkdocs documentation
 | 
				
			||||||
 | 
					/site
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mypy
 | 
				
			||||||
 | 
					.mypy_cache/
 | 
				
			||||||
 | 
					.dmypy.json
 | 
				
			||||||
 | 
					dmypy.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Pyre type checker
 | 
				
			||||||
 | 
					.pyre/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# pytype static type analyzer
 | 
				
			||||||
 | 
					.pytype/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Cython debug symbols
 | 
				
			||||||
 | 
					cython_debug/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# PyCharm
 | 
				
			||||||
 | 
					#  JetBrains specific template is maintained in a separate JetBrains.gitignore that can
 | 
				
			||||||
 | 
					#  be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
 | 
				
			||||||
 | 
					#  and can be added to the global gitignore or merged into this file.  For a more nuclear
 | 
				
			||||||
 | 
					#  option (not recommended) you can uncomment the following to ignore the entire idea folder.
 | 
				
			||||||
 | 
					#.idea/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# App
 | 
				
			||||||
 | 
					slide-deck.md
 | 
				
			||||||
 | 
					*.pptx
 | 
				
			||||||
 | 
					*.pptx#
 | 
				
			||||||
							
								
								
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.vscode/settings.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "makefile.extensionOutputFolder": "./.vscode"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										12
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					slides:
 | 
				
			||||||
 | 
						python -m reddit_saved_pptx
 | 
				
			||||||
 | 
						npx @marp-team/marp-cli@latest slide-deck.md -o output.pptx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					requirements:
 | 
				
			||||||
 | 
						poetry export -f requirements.txt --output requirements.txt --without-hashes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install:
 | 
				
			||||||
 | 
						poetry install
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					lint/black:
 | 
				
			||||||
 | 
						black reddit_saved_pptx
 | 
				
			||||||
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					# reddit-saved-pptx
 | 
				
			||||||
 | 
					Convert your Reddit saved posts into a powerpoint presentation. Code can be easily adjusted to your needs.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Requirements
 | 
				
			||||||
 | 
					- python
 | 
				
			||||||
 | 
					- npm (npx)
 | 
				
			||||||
 | 
					- [A Reddit application](https://www.reddit.com/prefs/apps)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Usage
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# One-time setup of the necessary environment variables
 | 
				
			||||||
 | 
					cp .env.sample .env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build the powerpoint. Result will be in the same directory called `output.pptx`.
 | 
				
			||||||
 | 
					make slides
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										451
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										451
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							@@ -0,0 +1,451 @@
 | 
				
			|||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "atomicwrites"
 | 
				
			||||||
 | 
					version = "1.4.1"
 | 
				
			||||||
 | 
					description = "Atomic file writes."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "attrs"
 | 
				
			||||||
 | 
					version = "22.1.0"
 | 
				
			||||||
 | 
					description = "Classes Without Boilerplate"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
 | 
				
			||||||
 | 
					docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
 | 
				
			||||||
 | 
					tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"]
 | 
				
			||||||
 | 
					tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "black"
 | 
				
			||||||
 | 
					version = "22.6.0"
 | 
				
			||||||
 | 
					description = "The uncompromising code formatter."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.6.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					click = ">=8.0.0"
 | 
				
			||||||
 | 
					mypy-extensions = ">=0.4.3"
 | 
				
			||||||
 | 
					pathspec = ">=0.9.0"
 | 
				
			||||||
 | 
					platformdirs = ">=2"
 | 
				
			||||||
 | 
					tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					colorama = ["colorama (>=0.4.3)"]
 | 
				
			||||||
 | 
					d = ["aiohttp (>=3.7.4)"]
 | 
				
			||||||
 | 
					jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"]
 | 
				
			||||||
 | 
					uvloop = ["uvloop (>=0.15.2)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "certifi"
 | 
				
			||||||
 | 
					version = "2022.6.15"
 | 
				
			||||||
 | 
					description = "Python package for providing Mozilla's CA Bundle."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "charset-normalizer"
 | 
				
			||||||
 | 
					version = "2.1.0"
 | 
				
			||||||
 | 
					description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					unicode_backport = ["unicodedata2"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "click"
 | 
				
			||||||
 | 
					version = "8.1.3"
 | 
				
			||||||
 | 
					description = "Composable command line interface toolkit"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					colorama = {version = "*", markers = "platform_system == \"Windows\""}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "colorama"
 | 
				
			||||||
 | 
					version = "0.4.5"
 | 
				
			||||||
 | 
					description = "Cross-platform colored terminal text."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "idna"
 | 
				
			||||||
 | 
					version = "3.3"
 | 
				
			||||||
 | 
					description = "Internationalized Domain Names in Applications (IDNA)"
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "jinja2"
 | 
				
			||||||
 | 
					version = "3.1.2"
 | 
				
			||||||
 | 
					description = "A very fast and expressive template engine."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					MarkupSafe = ">=2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					i18n = ["Babel (>=2.7)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "markupsafe"
 | 
				
			||||||
 | 
					version = "2.1.1"
 | 
				
			||||||
 | 
					description = "Safely add untrusted strings to HTML/XML markup."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "more-itertools"
 | 
				
			||||||
 | 
					version = "8.14.0"
 | 
				
			||||||
 | 
					description = "More routines for operating on iterables, beyond itertools"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "mypy-extensions"
 | 
				
			||||||
 | 
					version = "0.4.3"
 | 
				
			||||||
 | 
					description = "Experimental type system extensions for programs checked with the mypy typechecker."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "packaging"
 | 
				
			||||||
 | 
					version = "21.3"
 | 
				
			||||||
 | 
					description = "Core utilities for Python packages"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "pathspec"
 | 
				
			||||||
 | 
					version = "0.9.0"
 | 
				
			||||||
 | 
					description = "Utility library for gitignore style pattern matching of file paths."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "platformdirs"
 | 
				
			||||||
 | 
					version = "2.5.2"
 | 
				
			||||||
 | 
					description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"]
 | 
				
			||||||
 | 
					test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "pluggy"
 | 
				
			||||||
 | 
					version = "0.13.1"
 | 
				
			||||||
 | 
					description = "plugin and hook calling mechanisms for python"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					dev = ["pre-commit", "tox"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "praw"
 | 
				
			||||||
 | 
					version = "7.6.0"
 | 
				
			||||||
 | 
					description = "PRAW, an acronym for `Python Reddit API Wrapper`, is a python package that allows for simple access to  Reddit's API."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "~=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					prawcore = ">=2.1,<3"
 | 
				
			||||||
 | 
					update-checker = ">=0.18"
 | 
				
			||||||
 | 
					websocket-client = ">=0.54.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					test = ["requests (>=2.20.1,<3)", "pytest (>=2.7.3)", "betamax-matchers (>=0.3.0,<0.5)", "betamax (>=0.8,<0.9)"]
 | 
				
			||||||
 | 
					readthedocs = ["sphinx-rtd-theme", "sphinx"]
 | 
				
			||||||
 | 
					lint = ["sphinx-rtd-theme", "sphinx", "pre-commit"]
 | 
				
			||||||
 | 
					dev = ["requests (>=2.20.1,<3)", "pytest (>=2.7.3)", "betamax-matchers (>=0.3.0,<0.5)", "betamax (>=0.8,<0.9)", "sphinx-rtd-theme", "sphinx", "pre-commit", "packaging"]
 | 
				
			||||||
 | 
					ci = ["coveralls"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "prawcore"
 | 
				
			||||||
 | 
					version = "2.3.0"
 | 
				
			||||||
 | 
					description = "Low-level communication layer for PRAW 4+."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "~=3.6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					requests = ">=2.6.0,<3.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					test = ["testfixtures (>4.13.2,<7)", "pytest", "mock (>=0.8)", "betamax-serializers (>=0.2.0,<0.3)", "betamax-matchers (>=0.4.0,<0.5)", "betamax (>=0.8,<0.9)"]
 | 
				
			||||||
 | 
					lint = ["flynt", "pydocstyle", "pre-commit", "flake8", "black"]
 | 
				
			||||||
 | 
					dev = ["testfixtures (>4.13.2,<7)", "pytest", "mock (>=0.8)", "betamax-serializers (>=0.2.0,<0.3)", "betamax-matchers (>=0.4.0,<0.5)", "betamax (>=0.8,<0.9)", "flynt", "pydocstyle", "pre-commit", "flake8", "black"]
 | 
				
			||||||
 | 
					ci = ["coveralls"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "py"
 | 
				
			||||||
 | 
					version = "1.11.0"
 | 
				
			||||||
 | 
					description = "library with cross-python path, ini-parsing, io, code, log facilities"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "pyparsing"
 | 
				
			||||||
 | 
					version = "3.0.9"
 | 
				
			||||||
 | 
					description = "pyparsing module - Classes and methods to define and execute parsing grammars"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.6.8"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					diagrams = ["railroad-diagrams", "jinja2"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "pytest"
 | 
				
			||||||
 | 
					version = "5.4.3"
 | 
				
			||||||
 | 
					description = "pytest: simple powerful testing with Python"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
 | 
				
			||||||
 | 
					attrs = ">=17.4.0"
 | 
				
			||||||
 | 
					colorama = {version = "*", markers = "sys_platform == \"win32\""}
 | 
				
			||||||
 | 
					more-itertools = ">=4.0.0"
 | 
				
			||||||
 | 
					packaging = "*"
 | 
				
			||||||
 | 
					pluggy = ">=0.12,<1.0"
 | 
				
			||||||
 | 
					py = ">=1.5.0"
 | 
				
			||||||
 | 
					wcwidth = "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					checkqa-mypy = ["mypy (==v0.761)"]
 | 
				
			||||||
 | 
					testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "python-dotenv"
 | 
				
			||||||
 | 
					version = "0.20.0"
 | 
				
			||||||
 | 
					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 = "requests"
 | 
				
			||||||
 | 
					version = "2.28.1"
 | 
				
			||||||
 | 
					description = "Python HTTP for Humans."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7, <4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					certifi = ">=2017.4.17"
 | 
				
			||||||
 | 
					charset-normalizer = ">=2,<3"
 | 
				
			||||||
 | 
					idna = ">=2.5,<4"
 | 
				
			||||||
 | 
					urllib3 = ">=1.21.1,<1.27"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					socks = ["PySocks (>=1.5.6,!=1.5.7)"]
 | 
				
			||||||
 | 
					use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "tomli"
 | 
				
			||||||
 | 
					version = "2.0.1"
 | 
				
			||||||
 | 
					description = "A lil' TOML parser"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "update-checker"
 | 
				
			||||||
 | 
					version = "0.18.0"
 | 
				
			||||||
 | 
					description = "A python module that will check for package updates."
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.dependencies]
 | 
				
			||||||
 | 
					requests = ">=2.3.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					test = ["pytest (>=2.7.3)"]
 | 
				
			||||||
 | 
					lint = ["flake8", "black"]
 | 
				
			||||||
 | 
					dev = ["pytest (>=2.7.3)", "flake8", "black"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "urllib3"
 | 
				
			||||||
 | 
					version = "1.26.11"
 | 
				
			||||||
 | 
					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.*, !=3.5.*, <4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "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)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "wcwidth"
 | 
				
			||||||
 | 
					version = "0.2.5"
 | 
				
			||||||
 | 
					description = "Measures the displayed width of unicode strings in a terminal"
 | 
				
			||||||
 | 
					category = "dev"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[[package]]
 | 
				
			||||||
 | 
					name = "websocket-client"
 | 
				
			||||||
 | 
					version = "1.3.3"
 | 
				
			||||||
 | 
					description = "WebSocket client for Python with low level API options"
 | 
				
			||||||
 | 
					category = "main"
 | 
				
			||||||
 | 
					optional = false
 | 
				
			||||||
 | 
					python-versions = ">=3.7"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[package.extras]
 | 
				
			||||||
 | 
					test = ["websockets"]
 | 
				
			||||||
 | 
					optional = ["wsaccel", "python-socks"]
 | 
				
			||||||
 | 
					docs = ["sphinx-rtd-theme (>=0.5)", "Sphinx (>=3.4)"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[metadata]
 | 
				
			||||||
 | 
					lock-version = "1.1"
 | 
				
			||||||
 | 
					python-versions = "^3.10"
 | 
				
			||||||
 | 
					content-hash = "71770dadddc5b8657b1a260283bda2bf177486ae295b83c2d6e324a24712fc67"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[metadata.files]
 | 
				
			||||||
 | 
					atomicwrites = []
 | 
				
			||||||
 | 
					attrs = []
 | 
				
			||||||
 | 
					black = []
 | 
				
			||||||
 | 
					certifi = []
 | 
				
			||||||
 | 
					charset-normalizer = []
 | 
				
			||||||
 | 
					click = [
 | 
				
			||||||
 | 
					    {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
 | 
				
			||||||
 | 
					    {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					colorama = []
 | 
				
			||||||
 | 
					idna = [
 | 
				
			||||||
 | 
					    {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"},
 | 
				
			||||||
 | 
					    {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					jinja2 = [
 | 
				
			||||||
 | 
					    {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
 | 
				
			||||||
 | 
					    {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					markupsafe = [
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-win32.whl", hash = "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-win32.whl", hash = "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-win32.whl", hash = "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-win32.whl", hash = "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247"},
 | 
				
			||||||
 | 
					    {file = "MarkupSafe-2.1.1.tar.gz", hash = "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					more-itertools = []
 | 
				
			||||||
 | 
					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"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					packaging = [
 | 
				
			||||||
 | 
					    {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
 | 
				
			||||||
 | 
					    {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					pathspec = [
 | 
				
			||||||
 | 
					    {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"},
 | 
				
			||||||
 | 
					    {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					platformdirs = [
 | 
				
			||||||
 | 
					    {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
 | 
				
			||||||
 | 
					    {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					pluggy = [
 | 
				
			||||||
 | 
					    {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"},
 | 
				
			||||||
 | 
					    {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					praw = []
 | 
				
			||||||
 | 
					prawcore = []
 | 
				
			||||||
 | 
					py = [
 | 
				
			||||||
 | 
					    {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
 | 
				
			||||||
 | 
					    {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					pyparsing = [
 | 
				
			||||||
 | 
					    {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
 | 
				
			||||||
 | 
					    {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					pytest = [
 | 
				
			||||||
 | 
					    {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
 | 
				
			||||||
 | 
					    {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					python-dotenv = [
 | 
				
			||||||
 | 
					    {file = "python-dotenv-0.20.0.tar.gz", hash = "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f"},
 | 
				
			||||||
 | 
					    {file = "python_dotenv-0.20.0-py3-none-any.whl", hash = "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					requests = []
 | 
				
			||||||
 | 
					tomli = [
 | 
				
			||||||
 | 
					    {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
 | 
				
			||||||
 | 
					    {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					update-checker = []
 | 
				
			||||||
 | 
					urllib3 = []
 | 
				
			||||||
 | 
					wcwidth = [
 | 
				
			||||||
 | 
					    {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
 | 
				
			||||||
 | 
					    {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					websocket-client = []
 | 
				
			||||||
							
								
								
									
										19
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					[tool.poetry]
 | 
				
			||||||
 | 
					name = "reddit-saved-pptx"
 | 
				
			||||||
 | 
					version = "0.1.0"
 | 
				
			||||||
 | 
					description = ""
 | 
				
			||||||
 | 
					authors = ["strNophix <nvdpoel01@gmail.com>"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[tool.poetry.dependencies]
 | 
				
			||||||
 | 
					python = "^3.10"
 | 
				
			||||||
 | 
					praw = "^7.6.0"
 | 
				
			||||||
 | 
					Jinja2 = "^3.1.2"
 | 
				
			||||||
 | 
					python-dotenv = "^0.20.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[tool.poetry.dev-dependencies]
 | 
				
			||||||
 | 
					pytest = "^5.2"
 | 
				
			||||||
 | 
					black = "^22.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[build-system]
 | 
				
			||||||
 | 
					requires = ["poetry-core>=1.0.0"]
 | 
				
			||||||
 | 
					build-backend = "poetry.core.masonry.api"
 | 
				
			||||||
							
								
								
									
										1
									
								
								reddit_saved_pptx/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								reddit_saved_pptx/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					__version__ = "0.1.0"
 | 
				
			||||||
							
								
								
									
										48
									
								
								reddit_saved_pptx/__main__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								reddit_saved_pptx/__main__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					import os
 | 
				
			||||||
 | 
					import pathlib
 | 
				
			||||||
 | 
					import random
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import praw
 | 
				
			||||||
 | 
					from dotenv import load_dotenv
 | 
				
			||||||
 | 
					from jinja2 import Environment
 | 
				
			||||||
 | 
					from jinja2 import FileSystemLoader
 | 
				
			||||||
 | 
					from praw.models import Submission
 | 
				
			||||||
 | 
					from praw.models import Redditor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load_dotenv()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMAGE_ONLY_REGEX = re.compile(r"(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|png)")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main() -> int:
 | 
				
			||||||
 | 
					    reddit = praw.Reddit(
 | 
				
			||||||
 | 
					        client_id=os.getenv("REDDIT_CLIENT_ID"),
 | 
				
			||||||
 | 
					        client_secret=os.getenv("REDDIT_CLIENT_SECRET"),
 | 
				
			||||||
 | 
					        user_agent="reddit-saved-pptx",
 | 
				
			||||||
 | 
					        username=os.getenv("REDDIT_USERNAME"),
 | 
				
			||||||
 | 
					        password=os.getenv("REDDIT_PASSWORD"),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    me: Redditor = reddit.user.me()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    nsfw_posts: list[Submission] = []
 | 
				
			||||||
 | 
					    for post in me.saved(limit=None):
 | 
				
			||||||
 | 
					        if not isinstance(post, Submission):
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        post: Submission
 | 
				
			||||||
 | 
					        if IMAGE_ONLY_REGEX.match(post.url):
 | 
				
			||||||
 | 
					            nsfw_posts.append(post)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    random.shuffle(nsfw_posts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    environment = Environment(loader=FileSystemLoader("templates/"))
 | 
				
			||||||
 | 
					    template = environment.get_template("base.jinja2")
 | 
				
			||||||
 | 
					    result = template.render(nsfw_posts=nsfw_posts)
 | 
				
			||||||
 | 
					    pathlib.Path("slide-deck.md").write_text(result, encoding="utf8")
 | 
				
			||||||
 | 
					    return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    raise SystemExit(main())
 | 
				
			||||||
							
								
								
									
										12
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					certifi==2022.6.15; python_version >= "3.7" and python_version < "4"
 | 
				
			||||||
 | 
					charset-normalizer==2.1.0; python_version >= "3.7" and python_version < "4" and python_full_version >= "3.6.0"
 | 
				
			||||||
 | 
					idna==3.3; python_version >= "3.7" and python_version < "4"
 | 
				
			||||||
 | 
					jinja2==3.1.2; python_version >= "3.7"
 | 
				
			||||||
 | 
					markupsafe==2.1.1; python_version >= "3.7"
 | 
				
			||||||
 | 
					praw==7.6.0; python_version >= "3.7" and python_version < "4.0"
 | 
				
			||||||
 | 
					prawcore==2.3.0; python_version >= "3.7" and python_version < "4.0"
 | 
				
			||||||
 | 
					python-dotenv==0.20.0; python_version >= "3.5"
 | 
				
			||||||
 | 
					requests==2.28.1; python_version >= "3.7" and python_version < "4"
 | 
				
			||||||
 | 
					update-checker==0.18.0; python_version >= "3.7" and python_version < "4.0"
 | 
				
			||||||
 | 
					urllib3==1.26.11; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7"
 | 
				
			||||||
 | 
					websocket-client==1.3.3; python_version >= "3.7" and python_version < "4.0"
 | 
				
			||||||
							
								
								
									
										7
									
								
								templates/base.jinja2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								templates/base.jinja2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					marp: true
 | 
				
			||||||
 | 
					theme: default
 | 
				
			||||||
 | 
					{% for post in nsfw_posts %}
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endfor %}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user