aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Touhey <thomas@touhey.fr>2019-07-30 17:09:08 +0200
committerThomas Touhey <thomas@touhey.fr>2019-07-30 17:09:08 +0200
commit07e73a7d0a24338dc03df3e77e2b920dd7610bee (patch)
treec0cef76d443a703ebf442e976deacda4fdd6c2b3
Initial commit.HEADmaster
-rw-r--r--.gitignore12
-rw-r--r--.python-version1
-rw-r--r--LICENSE.txt21
-rw-r--r--MANIFEST.in10
-rwxr-xr-xMakefile30
-rw-r--r--Pipfile19
-rw-r--r--Pipfile.lock390
-rw-r--r--README.rst13
-rw-r--r--docs/Makefile38
-rw-r--r--docs/_static/.gitkeep0
-rw-r--r--docs/_templates/.gitkeep0
-rw-r--r--docs/conf.py69
-rw-r--r--docs/index.rst26
-rw-r--r--docs/make.bat35
-rw-r--r--setup.cfg43
-rwxr-xr-xsetup.py22
-rwxr-xr-xtests/__init__.py11
-rwxr-xr-xthembed/__init__.py12
18 files changed, 752 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..fceabbb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+__pycache__
+/test*.py
+/*.egg-info
+/dist
+/.spyproject
+/build
+/docs/_build
+/venv
+/README.html
+/.pytest_cache
+
+/docs/_build
diff --git a/.python-version b/.python-version
new file mode 100644
index 0000000..0b2eb36
--- /dev/null
+++ b/.python-version
@@ -0,0 +1 @@
+3.7.2
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..d1defab
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (C) 2018-2019 Thomas Touhey <thomas@touhey.fr>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the “Software”), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..c0eb105
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,10 @@
+include README.rst
+include LICENSE.txt
+include MANIFEST.in
+include setup.py
+include setup.cfg
+
+include docs/*.rst
+include docs/conf.py
+include docs/Makefile
+include docs/make.bat
diff --git a/Makefile b/Makefile
new file mode 100755
index 0000000..be3a816
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,30 @@
+#!/usr/bin/make -f
+ PE := pipenv run
+ ST := $(PE) ./setup.py
+ DNAME := dist/$(shell $(ST) --name)-$(shell $(ST) --version).tar.gz
+
+test tests:
+ @$(PE) pytest -s -q
+
+prepare:
+ @pipenv install --dev
+update:
+ @pipenv update --dev
+
+docs:
+ @$(ST) build_sphinx
+
+check:
+ @$(PE) flake8
+checkdocs:
+ @$(ST) checkdocs
+
+dist: $(DNAME)
+$(DNAME):
+ @$(ST) sdist
+
+upload: $(DNAME)
+ @twine upload $(DNAME)
+
+.PHONY: test tests dist docs
+# End of file.
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 0000000..d031637
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,19 @@
+[[source]]
+url = 'https://pypi.python.org/simple'
+verify_ssl = true
+name = 'pypi'
+
+[requires]
+python_version = '3.7'
+
+[packages]
+requests = '*'
+
+[dev-packages]
+sphinx = '*'
+sphinx_rtd_theme = '*'
+"collective.checkdocs" = '*'
+pudb = '*'
+pytest = '*'
+flake8 = '*'
+flake8-tabs = '*'
diff --git a/Pipfile.lock b/Pipfile.lock
new file mode 100644
index 0000000..bfe8060
--- /dev/null
+++ b/Pipfile.lock
@@ -0,0 +1,390 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "b43af002b1af6072aaf4fcddb8cc03a522a711122172a8d21ae13c97db8f927e"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_version": "3.7"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.python.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "certifi": {
+ "hashes": [
+ "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
+ "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
+ ],
+ "version": "==2019.6.16"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
+ "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+ ],
+ "version": "==2.8"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
+ "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
+ ],
+ "index": "pypi",
+ "version": "==2.22.0"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
+ "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
+ ],
+ "version": "==1.25.3"
+ }
+ },
+ "develop": {
+ "alabaster": {
+ "hashes": [
+ "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
+ "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
+ ],
+ "version": "==0.7.12"
+ },
+ "atomicwrites": {
+ "hashes": [
+ "sha256:03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4",
+ "sha256:75a9445bac02d8d058d5e1fe689654ba5a6556a1dfd8ce6ec55a0ed79866cfa6"
+ ],
+ "version": "==1.3.0"
+ },
+ "attrs": {
+ "hashes": [
+ "sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79",
+ "sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399"
+ ],
+ "version": "==19.1.0"
+ },
+ "babel": {
+ "hashes": [
+ "sha256:af92e6106cb7c55286b25b38ad7695f8b4efb36a90ba483d7f7a6628c46158ab",
+ "sha256:e86135ae101e31e2c8ec20a4e0c5220f4eed12487d5cf3f78be7e98d3a57fc28"
+ ],
+ "version": "==2.7.0"
+ },
+ "certifi": {
+ "hashes": [
+ "sha256:046832c04d4e752f37383b628bc601a7ea7211496b4638f6514d0e5b9acc4939",
+ "sha256:945e3ba63a0b9f577b1395204e13c3a231f9bc0223888be653286534e5873695"
+ ],
+ "version": "==2019.6.16"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
+ "collective.checkdocs": {
+ "hashes": [
+ "sha256:3a5328257c5224bc72753820c182910d7fb336bc1dba5e09113d48566655e46e"
+ ],
+ "index": "pypi",
+ "version": "==0.2"
+ },
+ "docutils": {
+ "hashes": [
+ "sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0",
+ "sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827",
+ "sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99"
+ ],
+ "version": "==0.15.2"
+ },
+ "entrypoints": {
+ "hashes": [
+ "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19",
+ "sha256:c70dd71abe5a8c85e55e12c19bd91ccfeec11a6e99044204511f9ed547d48451"
+ ],
+ "version": "==0.3"
+ },
+ "flake8": {
+ "hashes": [
+ "sha256:19241c1cbc971b9962473e4438a2ca19749a7dd002dd1a946eaba171b4114548",
+ "sha256:8e9dfa3cecb2400b3738a42c54c3043e821682b9c840b0448c0503f781130696"
+ ],
+ "index": "pypi",
+ "version": "==3.7.8"
+ },
+ "flake8-tabs": {
+ "hashes": [
+ "sha256:154e93dea037e2234d502b9000bb46bea3ceed50f6378243a50189baa07d5904",
+ "sha256:876e31fec1a35ca15a1b4a7ea65b73ef7f66c8db858686c6da9b9509807fbccd"
+ ],
+ "index": "pypi",
+ "version": "==2.0.0"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
+ "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+ ],
+ "version": "==2.8"
+ },
+ "imagesize": {
+ "hashes": [
+ "sha256:3f349de3eb99145973fefb7dbe38554414e5c30abd0c8e4b970a7c9d09f3a1d8",
+ "sha256:f3832918bc3c66617f92e35f5d70729187676313caa60c187eb0f28b8fe5e3b5"
+ ],
+ "version": "==1.1.0"
+ },
+ "importlib-metadata": {
+ "hashes": [
+ "sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8",
+ "sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3"
+ ],
+ "version": "==0.19"
+ },
+ "jinja2": {
+ "hashes": [
+ "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013",
+ "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"
+ ],
+ "version": "==2.10.1"
+ },
+ "markupsafe": {
+ "hashes": [
+ "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
+ "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
+ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
+ "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
+ "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
+ "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
+ "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
+ "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
+ "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
+ "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
+ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
+ "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
+ "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
+ "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
+ "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
+ "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
+ "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
+ "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
+ "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
+ "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
+ "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
+ "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
+ "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
+ "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
+ "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
+ "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
+ "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
+ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"
+ ],
+ "version": "==1.1.1"
+ },
+ "mccabe": {
+ "hashes": [
+ "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
+ "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
+ ],
+ "version": "==0.6.1"
+ },
+ "more-itertools": {
+ "hashes": [
+ "sha256:409cd48d4db7052af495b09dec721011634af3753ae1ef92d2b32f73a745f832",
+ "sha256:92b8c4b06dac4f0611c0729b2f2ede52b2e1bac1ab48f089c7ddc12e26bb60c4"
+ ],
+ "version": "==7.2.0"
+ },
+ "packaging": {
+ "hashes": [
+ "sha256:a7ac867b97fdc07ee80a8058fe4435ccd274ecc3b0ed61d852d7d53055528cf9",
+ "sha256:c491ca87294da7cc01902edbe30a5bc6c4c28172b5138ab4e4aa1b9d7bfaeafe"
+ ],
+ "version": "==19.1"
+ },
+ "pluggy": {
+ "hashes": [
+ "sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc",
+ "sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c"
+ ],
+ "version": "==0.12.0"
+ },
+ "pudb": {
+ "hashes": [
+ "sha256:ac30cfc64580958ab7265decb4cabb9141f08781ff072e9a336d5a7942ce35a6"
+ ],
+ "index": "pypi",
+ "version": "==2019.1"
+ },
+ "py": {
+ "hashes": [
+ "sha256:64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa",
+ "sha256:dc639b046a6e2cff5bbe40194ad65936d6ba360b52b3c3fe1d08a82dd50b5e53"
+ ],
+ "version": "==1.8.0"
+ },
+ "pycodestyle": {
+ "hashes": [
+ "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56",
+ "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c"
+ ],
+ "version": "==2.5.0"
+ },
+ "pyflakes": {
+ "hashes": [
+ "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
+ "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
+ ],
+ "version": "==2.1.1"
+ },
+ "pygments": {
+ "hashes": [
+ "sha256:71e430bc85c88a430f000ac1d9b331d2407f681d6f6aec95e8bcfbc3df5b0127",
+ "sha256:881c4c157e45f30af185c1ffe8d549d48ac9127433f2c380c24b84572ad66297"
+ ],
+ "version": "==2.4.2"
+ },
+ "pyparsing": {
+ "hashes": [
+ "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80",
+ "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"
+ ],
+ "version": "==2.4.2"
+ },
+ "pytest": {
+ "hashes": [
+ "sha256:6ef6d06de77ce2961156013e9dff62f1b2688aa04d0dc244299fe7d67e09370d",
+ "sha256:a736fed91c12681a7b34617c8fcefe39ea04599ca72c608751c31d89579a3f77"
+ ],
+ "index": "pypi",
+ "version": "==5.0.1"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda",
+ "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"
+ ],
+ "version": "==2019.1"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
+ "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31"
+ ],
+ "index": "pypi",
+ "version": "==2.22.0"
+ },
+ "six": {
+ "hashes": [
+ "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
+ "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
+ ],
+ "version": "==1.12.0"
+ },
+ "snowballstemmer": {
+ "hashes": [
+ "sha256:9f3b9ffe0809d174f7047e121431acf99c89a7040f0ca84f94ba53a498e6d0c9"
+ ],
+ "version": "==1.9.0"
+ },
+ "sphinx": {
+ "hashes": [
+ "sha256:22538e1bbe62b407cf5a8aabe1bb15848aa66bb79559f42f5202bbce6b757a69",
+ "sha256:f9a79e746b87921cabc3baa375199c6076d1270cee53915dbd24fdbeaaacc427"
+ ],
+ "index": "pypi",
+ "version": "==2.1.2"
+ },
+ "sphinx-rtd-theme": {
+ "hashes": [
+ "sha256:00cf895504a7895ee433807c62094cf1e95f065843bf3acd17037c3e9a2becd4",
+ "sha256:728607e34d60456d736cc7991fd236afb828b21b82f956c5ea75f94c8414040a"
+ ],
+ "index": "pypi",
+ "version": "==0.4.3"
+ },
+ "sphinxcontrib-applehelp": {
+ "hashes": [
+ "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897",
+ "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d"
+ ],
+ "version": "==1.0.1"
+ },
+ "sphinxcontrib-devhelp": {
+ "hashes": [
+ "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34",
+ "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981"
+ ],
+ "version": "==1.0.1"
+ },
+ "sphinxcontrib-htmlhelp": {
+ "hashes": [
+ "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422",
+ "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7"
+ ],
+ "version": "==1.0.2"
+ },
+ "sphinxcontrib-jsmath": {
+ "hashes": [
+ "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178",
+ "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"
+ ],
+ "version": "==1.0.1"
+ },
+ "sphinxcontrib-qthelp": {
+ "hashes": [
+ "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20",
+ "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f"
+ ],
+ "version": "==1.0.2"
+ },
+ "sphinxcontrib-serializinghtml": {
+ "hashes": [
+ "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227",
+ "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768"
+ ],
+ "version": "==1.1.3"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:b246607a25ac80bedac05c6f282e3cdaf3afb65420fd024ac94435cabe6e18d1",
+ "sha256:dbe59173209418ae49d485b87d1681aefa36252ee85884c31346debd19463232"
+ ],
+ "version": "==1.25.3"
+ },
+ "urwid": {
+ "hashes": [
+ "sha256:644d3e3900867161a2fc9287a9762753d66bd194754679adb26aede559bcccbc"
+ ],
+ "version": "==2.0.1"
+ },
+ "wcwidth": {
+ "hashes": [
+ "sha256:3df37372226d6e63e1b1e1eda15c594bca98a22d33a23832a90998faa96bc65e",
+ "sha256:f4ebe71925af7b40a864553f761ed559b43544f8f71746c2d756c7fe788ade7c"
+ ],
+ "version": "==0.1.7"
+ },
+ "zipp": {
+ "hashes": [
+ "sha256:4970c3758f4e89a7857a973b1e2a5d75bcdc47794442f2e2dd4fe8e0466e809a",
+ "sha256:8a5712cfd3bb4248015eb3b0b3c54a5f6ee3f2425963ef2a0125b8bc40aafaec"
+ ],
+ "version": "==0.5.2"
+ }
+ }
+}
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..d4f4395
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,13 @@
+thembed -- the touhey embedded objects gatherer module
+======================================================
+
+This module's role is to gather information about objects embedded in a
+link, like videos, pictures, etc. It is made by `Thomas Touhey`_ (``th``
+is for ``touhey``) for the `textoutpc`_ project, a BBCode to HTML
+translation module.
+
+For more information, consult `the official website`_.
+
+.. _Thomas Touhey: https://thomas.touhey.fr/
+.. _textoutpc: https://textout.touhey.pro/
+.. _the official website: https://thembed.touhey.pro/
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 0000000..4b5507b
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,38 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+
+PE = pipenv run
+SPHINXOPTS =
+SPHINXBUILD = $(PE) sphinx-build
+SPHINXWATCH = $(PE) sphinx-autobuild
+SOURCEDIR = .
+BUILDDIR = _build
+WEBROOT = thembed.touhey.pro:thembed_doc
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+# Livehtml build.
+livehtml:
+ $(SPHINXWATCH) -b html -z ../thembed $(SPHINXOPTS) . $(BUILDDIR)/html
+
+.PHONY: livehtml
+
+# Send the website content (Linux-only).
+show: html
+ find _build/html -type f -exec chmod 644 {} \;
+ rsync -Prlt --delete _build/html/ "$(WEBROOT)"
+
+.PHONY: show
+
+# End of file.
diff --git a/docs/_static/.gitkeep b/docs/_static/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/_static/.gitkeep
diff --git a/docs/_templates/.gitkeep b/docs/_templates/.gitkeep
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/docs/_templates/.gitkeep
diff --git a/docs/conf.py b/docs/conf.py
new file mode 100644
index 0000000..a5c8dca
--- /dev/null
+++ b/docs/conf.py
@@ -0,0 +1,69 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# http://www.sphinx-doc.org/en/master/config
+
+# -- 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.
+
+def _add_paths():
+ import os
+ import sys
+
+ sys.path.insert(0, os.path.abspath('..'))
+
+_add_paths()
+
+# -- Project information -----------------------------------------------------
+
+project = 'thembed'
+copyright = '2019, Thomas Touhey'
+author = 'Thomas Touhey'
+
+# The full version, including alpha/beta/rc tags
+
+def _get_release():
+ from os.path import dirname, join, normpath
+ from pkg_resources import Environment as _Environment
+
+ module_path = normpath(join(dirname(__file__), '..'))
+ env = _Environment(module_path)
+ env.scan()
+ mod = env['thembed'][0]
+ return mod.version
+
+release = _get_release()
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+ 'sphinx.ext.autodoc'
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = []
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '.goutput*']
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = []
diff --git a/docs/index.rst b/docs/index.rst
new file mode 100644
index 0000000..ffc6afa
--- /dev/null
+++ b/docs/index.rst
@@ -0,0 +1,26 @@
+Welcome to thembed's documentation!
+===================================
+
+This module's role is to gather information about objects embedded in a
+link, like videos, pictures, etc. It is made by `Thomas Touhey`_ (``th``
+is for ``touhey``) for the `textoutpc`_ project, a BBCode to HTML
+translation module.
+
+To install the module, use pip:
+
+.. code-block:: bash
+
+ $ pip install thembed
+
+For more information and links, consult `the official website`_.
+
+Table of contents
+-----------------
+
+.. toctree::
+ :maxdepth: 2
+
+
+.. _Thomas Touhey: https://thomas.touhey.fr/
+.. _textoutpc: https://textout.touhey.pro/
+.. _the official website: https://thembed.touhey.pro/
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 0000000..27f573b
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.http://sphinx-doc.org/
+ exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+
+:end
+popd
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..ab2d251
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,43 @@
+[metadata]
+name = thembed
+version = attr: thembed.version
+url = https://thembed.touhey.pro/
+project_urls =
+ Documentation = https://thembed.touhey.pro/docs/
+author = Thomas Touhey
+author_email = thomas@touhey.fr
+description = embed gathering module
+long_description = file: README.rst
+keywords = textout, embed, object
+license = MIT
+classifiers =
+ Development Status :: 2 - Pre-Alpha
+ Natural Language :: English
+ License :: OSI Approved :: MIT License
+ Operating System :: OS Independent
+ Programming Language :: Python :: 3
+ Intended Audience :: Developers
+
+[options]
+zip_safe = False
+include_package_data = True
+packages = thembed
+install_requires =
+ requests
+
+[options.package_data]
+* = *.txt, *.rst
+
+[build_sphinx]
+source-dir = docs
+
+[wheel]
+universal = True
+
+[flake8]
+ignore = F401, F403, E126, E127, E128, E131, E241, E261, E265, E271, W191
+exclude = .git, __pycache__, build, dist, docs/conf.py, test.py, test
+
+[tool:pytest]
+python_files = tests.py test_*.py *_tests.py
+testpaths = tests
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..af034b8
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,22 @@
+#!/usr/bin/env python3
+#**************************************************************************
+# Copyright (C) 2019 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the thembed Python module, which is MIT-licensed.
+#**************************************************************************
+""" Setup script for the thembed Python package and script. """
+
+from setuptools import setup as _setup
+
+kwargs = {}
+
+try:
+ from sphinx.setup_command import BuildDoc as _BuildDoc
+ kwargs['cmdclass'] = {'build_sphinx': _BuildDoc}
+except ImportError:
+ pass
+
+# Actually, most of the project's data is read from the `setup.cfg` file.
+
+_setup(**kwargs)
+
+# End of file.
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100755
index 0000000..a894a7c
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python3
+#**************************************************************************
+# Copyright (C) 2019 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the thembed project, which is MIT-licensed.
+#**************************************************************************
+""" Unit tests for the `thembed` Python module. """
+
+# This file is only there to indicate that the folder is a module.
+# It doesn't actually contain code.
+
+# End of file.
diff --git a/thembed/__init__.py b/thembed/__init__.py
new file mode 100755
index 0000000..0120035
--- /dev/null
+++ b/thembed/__init__.py
@@ -0,0 +1,12 @@
+#!/usr/bin/env python3
+#**************************************************************************
+# Copyright (C) 2019 Thomas "Cakeisalie5" Touhey <thomas@touhey.fr>
+# This file is part of the thembed project, which is MIT-licensed.
+#**************************************************************************
+""" Embed objects gatherer on the open web. """
+
+__all__ = []
+
+version = "0.0.1"
+
+# End of file.