From 8d8eedb940c17253693ba1c4068e26f983f59c2e Mon Sep 17 00:00:00 2001 From: Ruben van de Ven Date: Tue, 15 Mar 2022 15:04:03 +0100 Subject: [PATCH] Run in docker --- .dockerignore | 1 + Dockerfile | 14 ++ svganim.service => app/svganim.service | 0 {svganim => app/svganim}/__init__.py | 0 {svganim => app/svganim}/strokes.py | 0 {templates => app/templates}/index.html | 0 webserver.py => app/webserver.py | 29 ++-- {www => app/www}/annotate.html | 0 {www => app/www}/annotate.js | 0 {www => app/www}/assets/nouislider-15.5.0.css | 0 {www => app/www}/assets/nouislider-15.5.0.js | 0 {www => app/www}/assets/wNumb-1.2.0.min.js | 0 {www => app/www}/core.css | 0 {www => app/www}/cursor.png | Bin {www => app/www}/draw.html | 0 {www => app/www}/draw.js | 0 {www => app/www}/play.html | 0 {www => app/www}/play.js | 0 {www => app/www}/playlist.js | 0 docker-compose.yml | 12 ++ poetry.lock | 126 ++++++++++++++++++ 21 files changed, 172 insertions(+), 10 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile rename svganim.service => app/svganim.service (100%) rename {svganim => app/svganim}/__init__.py (100%) rename {svganim => app/svganim}/strokes.py (100%) rename {templates => app/templates}/index.html (100%) rename webserver.py => app/webserver.py (96%) rename {www => app/www}/annotate.html (100%) rename {www => app/www}/annotate.js (100%) rename {www => app/www}/assets/nouislider-15.5.0.css (100%) rename {www => app/www}/assets/nouislider-15.5.0.js (100%) rename {www => app/www}/assets/wNumb-1.2.0.min.js (100%) rename {www => app/www}/core.css (100%) rename {www => app/www}/cursor.png (100%) rename {www => app/www}/draw.html (100%) rename {www => app/www}/draw.js (100%) rename {www => app/www}/play.html (100%) rename {www => app/www}/play.js (100%) rename {www => app/www}/playlist.js (100%) create mode 100644 docker-compose.yml create mode 100644 poetry.lock diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a37273b --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +files/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..135c1a6 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM python:3.9 + +RUN mkdir /app +COPY /app /app +COPY pyproject.toml /app +COPY poetry.lock /app + +WORKDIR /app +ENV PYTHONPATH=${PYTHONPATH}:${PWD} +RUN pip3 install poetry +RUN poetry config virtualenvs.create false +RUN poetry install --no-dev + +ENTRYPOINT poetry run python webserver.py --storage /files diff --git a/svganim.service b/app/svganim.service similarity index 100% rename from svganim.service rename to app/svganim.service diff --git a/svganim/__init__.py b/app/svganim/__init__.py similarity index 100% rename from svganim/__init__.py rename to app/svganim/__init__.py diff --git a/svganim/strokes.py b/app/svganim/strokes.py similarity index 100% rename from svganim/strokes.py rename to app/svganim/strokes.py diff --git a/templates/index.html b/app/templates/index.html similarity index 100% rename from templates/index.html rename to app/templates/index.html diff --git a/webserver.py b/app/webserver.py similarity index 96% rename from webserver.py rename to app/webserver.py index 52e60f5..49c80b8 100644 --- a/webserver.py +++ b/app/webserver.py @@ -518,8 +518,11 @@ class Server: # self.config['server']['port'] self.web_root = os.path.join("www") + if not os.path.exists(self.config.storage): + raise NotADirectoryError("Provided files directory doesn't exist.") + self.index = svganim.strokes.AnnotationIndex( - "annotation_index.shelve", "files", "files/metadata" + os.path.join(self.config.storage,"annotation_index.shelve"), self.config.storage, os.path.join(self.config.storage,"metadata") ) self.logger.info("Loading Annotation Index") self.index.refresh() @@ -590,6 +593,9 @@ if __name__ == "__main__": argParser.add_argument( "--storage", type=str, default="files", help="directory name for output files" ) + argParser.add_argument( + "--logfile", type=str, default=None, help="log file to output to" + ) argParser.add_argument("--verbose", "-v", action="count", default=0) args = argParser.parse_args() @@ -609,16 +615,19 @@ if __name__ == "__main__": ) # File logging - formatter = logging.Formatter( - fmt="%(asctime)s %(module)s:%(lineno)d %(levelname)8s | %(message)s", - datefmt="%Y/%m/%d %H:%M:%S", - ) # %I:%M:%S %p AM|PM format - logFileHandler = logging.handlers.RotatingFileHandler( - "log/draw_log.log", maxBytes=1024 * 512, backupCount=5 - ) - logFileHandler.setFormatter(formatter) + if args.logfile is not None: + formatter = logging.Formatter( + fmt="%(asctime)s %(module)s:%(lineno)d %(levelname)8s | %(message)s", + datefmt="%Y/%m/%d %H:%M:%S", + ) # %I:%M:%S %p AM|PM format + logFileHandler = logging.handlers.RotatingFileHandler( + args.logfile, maxBytes=1024 * 512, backupCount=5 + ) + logFileHandler.setFormatter(formatter) + + logger.addHandler(logFileHandler) + - logger.addHandler(logFileHandler) logger.info(f"Start server: http://localhost:{args.port}") server = Server(args, logger) diff --git a/www/annotate.html b/app/www/annotate.html similarity index 100% rename from www/annotate.html rename to app/www/annotate.html diff --git a/www/annotate.js b/app/www/annotate.js similarity index 100% rename from www/annotate.js rename to app/www/annotate.js diff --git a/www/assets/nouislider-15.5.0.css b/app/www/assets/nouislider-15.5.0.css similarity index 100% rename from www/assets/nouislider-15.5.0.css rename to app/www/assets/nouislider-15.5.0.css diff --git a/www/assets/nouislider-15.5.0.js b/app/www/assets/nouislider-15.5.0.js similarity index 100% rename from www/assets/nouislider-15.5.0.js rename to app/www/assets/nouislider-15.5.0.js diff --git a/www/assets/wNumb-1.2.0.min.js b/app/www/assets/wNumb-1.2.0.min.js similarity index 100% rename from www/assets/wNumb-1.2.0.min.js rename to app/www/assets/wNumb-1.2.0.min.js diff --git a/www/core.css b/app/www/core.css similarity index 100% rename from www/core.css rename to app/www/core.css diff --git a/www/cursor.png b/app/www/cursor.png similarity index 100% rename from www/cursor.png rename to app/www/cursor.png diff --git a/www/draw.html b/app/www/draw.html similarity index 100% rename from www/draw.html rename to app/www/draw.html diff --git a/www/draw.js b/app/www/draw.js similarity index 100% rename from www/draw.js rename to app/www/draw.js diff --git a/www/play.html b/app/www/play.html similarity index 100% rename from www/play.html rename to app/www/play.html diff --git a/www/play.js b/app/www/play.js similarity index 100% rename from www/play.js rename to app/www/play.js diff --git a/www/playlist.js b/app/www/playlist.js similarity index 100% rename from www/playlist.js rename to app/www/playlist.js diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..fc496dc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +version: '3' +services: + svganim: + image: svganim + build: + context: . + dockerfile: ./Dockerfile +# entrypoint: "/bin/sh -c \"poetry run python webserver.py --storage /files\"" + ports: + - "7890:7890" + volumes: + - ./files:/files diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..78ae624 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,126 @@ +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + +[[package]] +name = "pydub" +version = "0.25.1" +description = "Manipulate audio with an simple and easy high level interface" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "pyreadline3" +version = "3.3" +description = "A python implementation of GNU readline." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "svgwrite" +version = "1.4.1" +description = "A Python library to create SVG drawings." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "tornado" +version = "6.1" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "main" +optional = false +python-versions = ">= 3.5" + +[metadata] +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "d8da6cfe808232f54332cf79322439d56b7aea24e5fc9533747d0bf582a6c6e5" + +[metadata.files] +coloredlogs = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] +humanfriendly = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] +pydub = [ + {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, + {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, +] +pyreadline3 = [ + {file = "pyreadline3-3.3-py3-none-any.whl", hash = "sha256:0003fd0079d152ecbd8111202c5a7dfa6a5569ffd65b235e45f3c2ecbee337b4"}, + {file = "pyreadline3-3.3.tar.gz", hash = "sha256:ff3b5a1ac0010d0967869f723e687d42cabc7dccf33b14934c92aa5168d260b3"}, +] +svgwrite = [ + {file = "svgwrite-1.4.1-py3-none-any.whl", hash = "sha256:4b21652a1d9c543a6bf4f9f2a54146b214519b7540ca60cb99968ad09ef631d0"}, + {file = "svgwrite-1.4.1.zip", hash = "sha256:e220a4bf189e7e214a55e8a11421d152b5b6fb1dd660c86a8b6b61fe8cc2ac48"}, +] +tornado = [ + {file = "tornado-6.1-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c"}, + {file = "tornado-6.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b"}, + {file = "tornado-6.1-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675"}, + {file = "tornado-6.1-cp35-cp35m-win32.whl", hash = "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5"}, + {file = "tornado-6.1-cp35-cp35m-win_amd64.whl", hash = "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68"}, + {file = "tornado-6.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c"}, + {file = "tornado-6.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085"}, + {file = "tornado-6.1-cp36-cp36m-win32.whl", hash = "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575"}, + {file = "tornado-6.1-cp36-cp36m-win_amd64.whl", hash = "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795"}, + {file = "tornado-6.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102"}, + {file = "tornado-6.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01"}, + {file = "tornado-6.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d"}, + {file = "tornado-6.1-cp37-cp37m-win32.whl", hash = "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df"}, + {file = "tornado-6.1-cp37-cp37m-win_amd64.whl", hash = "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37"}, + {file = "tornado-6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a"}, + {file = "tornado-6.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288"}, + {file = "tornado-6.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f"}, + {file = "tornado-6.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6"}, + {file = "tornado-6.1-cp38-cp38-win32.whl", hash = "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326"}, + {file = "tornado-6.1-cp38-cp38-win_amd64.whl", hash = "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c"}, + {file = "tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe"}, + {file = "tornado-6.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2"}, + {file = "tornado-6.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0"}, + {file = "tornado-6.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd"}, + {file = "tornado-6.1-cp39-cp39-win32.whl", hash = "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c"}, + {file = "tornado-6.1-cp39-cp39-win_amd64.whl", hash = "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4"}, + {file = "tornado-6.1.tar.gz", hash = "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791"}, +]