From 24e0a5bb21f75bc5d03ab673dc8a104de9dd7ef1 Mon Sep 17 00:00:00 2001 From: Cian Hughes Date: Fri, 10 Nov 2023 13:42:15 +0000 Subject: [PATCH] first commit --- .gitignore | 159 ++++++++++++++++++++++++++++++++++++ LICENSE | 7 ++ README.md | 11 +++ build.py | 37 +++++++++ docs/assets/favicon.ico | Bin 0 -> 116246 bytes docs/assets/logo.png | Bin 0 -> 26110 bytes docs/index.md | 3 + docs/license.md | 7 ++ docs/usage.md | 1 + mkdocs.yaml | 50 ++++++++++++ pyproject copy.toml | 30 +++++++ pyproject.toml | 30 +++++++ scripts_config.py | 46 +++++++++++ src/research_server_docs.py | 3 + 14 files changed, 384 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.py create mode 100644 docs/assets/favicon.ico create mode 100644 docs/assets/logo.png create mode 100644 docs/index.md create mode 100644 docs/license.md create mode 100644 docs/usage.md create mode 100644 mkdocs.yaml create mode 100644 pyproject copy.toml create mode 100644 pyproject.toml create mode 100644 scripts_config.py create mode 100644 src/research_server_docs.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..61a6b54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,159 @@ +# 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 + +# Ruff stuff: +.ruff_cache + +# 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 + +# VSCode project settings +.vscode/ + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d0fd285 --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +Copyright 2023 Cian Hughes + +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. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bbf144e --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ + + +## + +# Research Server Documentation + +[link_test](https://i-form-node-deployer.netlify.app) + +## Usage + +# Usage \ No newline at end of file diff --git a/build.py b/build.py new file mode 100644 index 0000000..16858ba --- /dev/null +++ b/build.py @@ -0,0 +1,37 @@ +import subprocess + +import tomlkit as toml + +from scripts_config import readme_files # type: ignore + +def create_readme(): + with open("README.md", "wt") as r: + for header, file in readme_files.items(): + r.write(f"\n\n## {header}\n\n") + with open(file, "rt") as f: + r.write(f.read()) + + +def update_license(): + with open("LICENSE", "rt") as source, open("docs/license.md", "wt") as target: + target.write(source.read()) + + +def build_docs(): + print("Building docs...") + # First, ensure the license is up to date + update_license() + # Then, we build the docs + subprocess.run(["poetry", "run", "mkdocs", "build", "--clean"]) + # Finally, export the readme + print("Exporting readme...") + create_readme() + print("Finished building docs.") + + +def main(): + build_docs() + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/docs/assets/favicon.ico b/docs/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ca66531a614af52da5230130a3101e9e85d13841 GIT binary patch literal 116246 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"] +readme = "README.md" +license = "MIT" + +[tool.poetry.dependencies] +python = ">=3.12,<4.0" +i-form-server-node-deployer = {git = "https://github.com/Cian-H/I-Form_Server_Node_Deployer"} +mkdocs = "^1.5.3" +tomlkit = "^0.12.2" + +[tool.poetry.scripts] +build = "build:main" + +[tool.scripts-config] +node_deployer_src = "{$VIRTUAL_ENV}/src/I-Form_Server_Node_Deployer" + +[tool.scripts-config.readme_files] +"" = "docs/index.md" +"Usage" = "docs/usage.md" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 100 diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..17162ef --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,30 @@ +[tool.poetry] +name = "research-server-docs" +version = "0.1.0" +description = "Documentation for the I-Form Research Server system" +authors = ["Cian Hughes "] +readme = "README.md" +license = "MIT" + +[tool.poetry.dependencies] +python = ">=3.8,<4.0" +mkdocs = "^1.5.3" +mkdocs-material = "^9.4.8" +tomlkit = "^0.12.2" + +[tool.poetry.scripts] +build = "build:main" + +[tool.scripts-config] +virtual_env = "{$VIRTUAL_ENV}/src/I-Form_Server_Node_Deployer" + +[tool.scripts-config.readme_files] +"" = "docs/index.md" +"Usage" = "docs/usage.md" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.black] +line-length = 100 diff --git a/scripts_config.py b/scripts_config.py new file mode 100644 index 0000000..509ae4a --- /dev/null +++ b/scripts_config.py @@ -0,0 +1,46 @@ +import os +from pathlib import Path + +import tomlkit as toml + + +VIRTUAL_ENV = Path(os.environ.get("VIRTUAL_ENV", ".venv")) + + +def insert_env_vars(split_config): + """ + Inserts environment variables into the config file + where they follow the format {$ENV_VAR_NAME} + """ + config_str = toml.dumps(split_config) + split_config = config_str.split("{$") + if len(split_config) > 1: + c_head = split_config[0] + c_tail = split_config[1:] + c_parsed_tail = [ + "".join((os.environ[x0], x1)) for x0, x1 in + ( + (y[:i], y[i+1:]) for i, y in + zip( + (z.find("}") for z in c_tail), + c_tail + ) + ) + ] + config_str = "".join((c_head, *c_parsed_tail)) + return toml.loads(config_str) + + +def parse_config(): + with open("pyproject.toml", "rt") as f: + config = toml.load(f)["tool"]["scripts-config"] + config = insert_env_vars(config) + return config + + +def init(): + config = parse_config() + globals().update(config) + + +init() \ No newline at end of file diff --git a/src/research_server_docs.py b/src/research_server_docs.py new file mode 100644 index 0000000..78c306a --- /dev/null +++ b/src/research_server_docs.py @@ -0,0 +1,3 @@ +""" +This is a dummy file so that we can use poetry as the build system for these docs. +""" \ No newline at end of file