From 139a8337116be8148d535334a70c135c6e807a9f Mon Sep 17 00:00:00 2001 From: Daylin Morgan Date: Fri, 12 Aug 2022 17:03:00 -0500 Subject: [PATCH] chore: initial version --- .github/workflows/build-publish.yml | 21 ++++ .gitignore | 170 ++++++++++++++++++++++++++++ Dockerfile | 7 ++ Makefile | 72 ++++++++++++ README.md | 5 + docs/index.html | 70 ++++++++++++ generate-all.py | 31 +++++ logo/__init__.py | 1 + logo/cli.py | 20 ++++ logo/config.py | 46 ++++++++ logo/css/base.css | 15 +++ logo/css/dark.css | 9 ++ logo/css/light.css | 9 ++ logo/main.py | 70 ++++++++++++ logo/shapes.py | 25 ++++ logo/utils.py | 24 ++++ pdm.lock | 169 +++++++++++++++++++++++++++ pyproject.toml | 28 +++++ setup.cfg | 7 ++ 19 files changed, 799 insertions(+) create mode 100644 .github/workflows/build-publish.yml create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 docs/index.html create mode 100755 generate-all.py create mode 100644 logo/__init__.py create mode 100644 logo/cli.py create mode 100644 logo/config.py create mode 100644 logo/css/base.css create mode 100644 logo/css/dark.css create mode 100644 logo/css/light.css create mode 100644 logo/main.py create mode 100644 logo/shapes.py create mode 100644 logo/utils.py create mode 100644 pdm.lock create mode 100644 pyproject.toml create mode 100644 setup.cfg diff --git a/.github/workflows/build-publish.yml b/.github/workflows/build-publish.yml new file mode 100644 index 0000000..5b6a1d0 --- /dev/null +++ b/.github/workflows/build-publish.yml @@ -0,0 +1,21 @@ +name: Build Logo's and Deploy Static Assets + +on: [push] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - run: sudo apt-get install inkscape + + - name: Setup PDM + uses: pdm-project/setup-pdm@v2 + + - name: checkout repo + uses: actions/checkout@v3 + + - name: Install Dependencies + run: pdm install + + - name: Build Logo's + - run: make all diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6fa4580 --- /dev/null +++ b/.gitignore @@ -0,0 +1,170 @@ +# Created by https://www.toptal.com/developers/gitignore/api/python +# Edit at https://www.toptal.com/developers/gitignore?templates=python + +### Python ### +# 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/ + +# End of https://www.toptal.com/developers/gitignore/api/python +**/*.svg +**/*.png +docs/* +!docs/index.html diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8ed10fb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM alpine:3.16.2 + +RUN apk add --no-cache inkscape + +WORKDIR /data + +ENTRYPOINT ["inkscape"] diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ae71b93 --- /dev/null +++ b/Makefile @@ -0,0 +1,72 @@ +SRC = $(shell find logo/ -type f) +CONDA = source $$(conda info --base)/etc/profile.d/conda.sh; conda activate; +SVGS = $(shell find -type f -wholename "./docs/*.svg") +PNGS = $(patsubst ./docs/svg/%.svg,./docs/png/%.png, $(SVGS)) +REV := $(shell date +'%Y.%m.%d-' )$(shell git describe --always --dirty | sed s'/dirty/dev/') + +ifneq ($(DOCKER),true) + INKSCAPE := inkscape +else + INKSCAPE := docker run --rm -v "$$(pwd)":/data daylinmorgan/inkscape +endif + + +.PHONY: all +all: + @echo "==> Generating SVGs <==" + @$(MAKE) svgs + @echo "==> Generating PNGs <==" + @$(MAKE) pngs + +.PHONY: pngs +## generate all of the logo pngs +pngs: $(PNGS) + +./docs/png/%.png: ./docs/svg/%.svg + $(INKSCAPE) --export-filename=$@ $< + +.PHONY: logos +## generate all of the logo svgs +svgs: $(SRC) + ./generate-all.py $(REV) + +.PHONY: lint +## apply isort/black/flake8 +lint: + @isort logo + @black logo + @flake8 logo + +.PHONY: bootstrap pdm-env conda-env +## bootstrap the conda environment +bootstrap: pdm-env + +conda-env: + $(CONDA) CONDA_ALWAYS_YES="true" mamba create -p ./env python --force + +pdm-env: conda-env + $(CONDA) conda activate ./env; \ + pip install pdm; \ + pdm install + +.PHONY: docker.build +## build the docker container for inkscape +docker.build: + docker build . -t daylinmorgan/inkscape + +.PHONY: clean +## remove old files +clean: + rm -f *.svg *.png + rm -f docs/svg/* + rm -f docs/png/* + + +FILL = 15 +.PHONY: help +## Display this help screen +help: ## try `make help` + @awk '/^[a-z.A-Z_-]+:/ { helpMessage = match(lastLine, /^##(.*)/); \ + if (helpMessage) { helpCommand = substr($$1, 0, index($$1, ":")-1); \ + helpMessage = substr(lastLine, RSTART + 3, RLENGTH); printf "\033[36m%-$(FILL)s\033[0m%s\n"\ + , helpCommand, helpMessage;}} { lastLine = $$0 }' $(MAKEFILE_LIST) diff --git a/README.md b/README.md index 39fa1b0..31bbf7f 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ # Logo + + +TODO: + +- [ ] add version's that include my name diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..ce42e07 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,70 @@ + + + + + + + + + + +
+

My Logos

+
+ +
+ + + + + + + + + + + + + + +
+ + diff --git a/generate-all.py b/generate-all.py new file mode 100755 index 0000000..0fb9ea0 --- /dev/null +++ b/generate-all.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +from logo import generate +from pathlib import Path +import sys + +def main(): + rev = sys.argv[1] + comment =f"© 2022 Daylin Morgan | rev. {rev}" + + if not (Path.cwd() / "docs" / "svg").is_dir(): + print("making docs directory") + (Path.cwd() / "docs" / "svg").mkdir(exist_ok=True) + + for theme in ['dark','light']: + for background in ['rect','circle',None]: + for border in [True,False]: + name = ['logo'] + if background: + name.append(f"bg-{background}") + if border: + name.append(f"b") + + name.append(theme) + name = f"docs/svg/{'-'.join(name)}.svg" + generate(name=name,background=background,border=border,theme=theme,comment=comment) + + generate(name=f"docs/{theme}.svg",background="circle",border=True,theme=theme,comment=comment) + +if __name__ == "__main__": + main() diff --git a/logo/__init__.py b/logo/__init__.py new file mode 100644 index 0000000..7d6d94e --- /dev/null +++ b/logo/__init__.py @@ -0,0 +1 @@ +from .main import generate diff --git a/logo/cli.py b/logo/cli.py new file mode 100644 index 0000000..9f39133 --- /dev/null +++ b/logo/cli.py @@ -0,0 +1,20 @@ +import argparse + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument("-bg", "--background", help="background") + parser.add_argument("-b", "--border", help="include border", action="store_true") + parser.add_argument("--debug", help="add grid to debug logo", action="store_true") + parser.add_argument( + "-o", "--output", help="output file to save to", default="logo.svg" + ) + parser.add_argument( + "-t", + "--theme", + help="theme for color [light,dark][default: dark]", + default="dark", + ) + parser.add_argument("--no-minify", help="pretty print svg", action="store_true") + + return parser.parse_args() diff --git a/logo/config.py b/logo/config.py new file mode 100644 index 0000000..5a1d50e --- /dev/null +++ b/logo/config.py @@ -0,0 +1,46 @@ +from collections import namedtuple +from dataclasses import dataclass + +Center = namedtuple("Center", "x y") + +SCALE = 800 + + +@dataclass +class Coordinates: + """Class for housing/calculating relevant cordinates""" + + my1: int + my1: int + my2: int + mx1: int + mx2: int + dr: int + border_gap: int + + def __post_init__(self): + self.scale_coordinates(SCALE) + + # Nominal Values + u = (SCALE - self.my1 - self.my2 - self.dr) / 2 + # v = SCALE / 2 - (self.mx1 + self.mx2) + # assert D_R < M_X1 + M_X2/2 + + # Coordinate Shape Centers + self.mc = Center(SCALE / 2, u + self.dr + self.my2) + self.dc = Center(SCALE / 2, u + self.dr) + + def scale_coordinates(self, scale): + for k in self.__dataclass_fields__: + v = getattr(self, k) + setattr(self, k, v * scale) + + +coord = Coordinates( + my1=0.15, + my2=0.35, + mx1=0.13, + mx2=0.2, + dr=0.17, + border_gap=0.025, +) diff --git a/logo/css/base.css b/logo/css/base.css new file mode 100644 index 0000000..73a92e1 --- /dev/null +++ b/logo/css/base.css @@ -0,0 +1,15 @@ +.border { + fill:none; + stroke-width: 5; +} + +.logo { + stroke-width: 35; + fill: none; + stroke-linejoin: round; + stroke-linecap: round; +} + +.d { + stroke-width: 15; +} diff --git a/logo/css/dark.css b/logo/css/dark.css new file mode 100644 index 0000000..f142f3f --- /dev/null +++ b/logo/css/dark.css @@ -0,0 +1,9 @@ +/* dark css */ +.background { + fill: #1e1e2e; +} + +.fg { + fill:#f5e0dc; + stroke:#f5e0dc; +} diff --git a/logo/css/light.css b/logo/css/light.css new file mode 100644 index 0000000..5c4c22a --- /dev/null +++ b/logo/css/light.css @@ -0,0 +1,9 @@ +/* light css */ +.background { + fill:#f5e0dc; +} + +.fg { + fill: #1e1e2e; + stroke: #1e1e2e; +} diff --git a/logo/main.py b/logo/main.py new file mode 100644 index 0000000..bc8e501 --- /dev/null +++ b/logo/main.py @@ -0,0 +1,70 @@ +import svgwrite + +from .cli import get_args +from .config import SCALE, coord +from .shapes import circle, m +from .utils import debug, get_style, minify_css + + +def generate( + name, background, border, theme, comment=None, debug_mode=False, no_minify=False +): + if comment and any([debug_mode, no_minify]): + raise ValueError("Can't specify comment and pretty output (debug/no-minify)") + + print(f"generating: {name}") + dwg = svgwrite.Drawing(filename=name, size=(SCALE, SCALE), debug=debug) + style = get_style(theme) + dwg.defs.add(dwg.style(style if (debug_mode or no_minify) else minify_css(style))) + + bg = dwg.add(dwg.g(id="bg", class_="background")) + if background == "rect": + bg.add(dwg.rect(insert=(0, 0), size=(SCALE,) * 2)) + if border: + bg.add( + dwg.rect( + insert=(coord.border_gap, coord.border_gap), + size=( + (SCALE - 2 * coord.border_gap), + (SCALE - 2 * coord.border_gap), + ), + class_="fg border", + ) + ) + + elif background == "circle": + bg.add(dwg.circle((SCALE / 2,) * 2, r=SCALE / 2)) + if border: + bg.add( + dwg.circle( + (SCALE / 2,) * 2, + r=(SCALE - 2 * coord.border_gap) / 2, + class_="fg border", + ) + ) + + logo = dwg.add(dwg.g(id="m", class_="fg logo")) + m(dwg, logo, coord) + circle(dwg, logo, coord) + + if debug_mode: + debug(dwg, SCALE) + + if comment: + with open(name, "w") as f: + f.write(f"\n") + f.write(dwg.tostring()) + else: + dwg.save(pretty=(debug_mode or no_minify)) + + +def main(): + args = get_args() + generate( + args.output, + args.background, + args.border, + args.theme, + args.debug, + args.no_minify, + ) diff --git a/logo/shapes.py b/logo/shapes.py new file mode 100644 index 0000000..bd237e1 --- /dev/null +++ b/logo/shapes.py @@ -0,0 +1,25 @@ +def circle(dwg, g, coord): + move_to = (str(coord.dc.x - coord.dr), str(coord.dc.y)) + + circle = dwg.circle(center=coord.dc, r=coord.dr, class_="d") + filled = dwg.path( + d=f"M {','.join(move_to)} a 1 1 0 0 0 {coord.dr*2} 0 z", class_="fg d" + ) + g.add(circle) + g.add(filled) + + +def m(dwg, g, coord): + start_end_offset = 0.15 * (coord.mx1) + move_to = (str(coord.mc.x - coord.mx1 - start_end_offset), str(coord.mc.y)) + m = dwg.path( + d=f"M {','.join(move_to)}" + f"l -{coord.mx2},0 " + f"l {coord.mx2/2},-{coord.my2} " + f"l {coord.mx2/2+coord.mx1+start_end_offset},{coord.my2+coord.my1} " + f"l {coord.mx1+coord.mx2/2+start_end_offset},-{coord.my1+coord.my2} " + f"l {coord.mx2/2},{coord.my2} " + f"l -{coord.mx2}, 0" + ) + + g.add(m) diff --git a/logo/utils.py b/logo/utils.py new file mode 100644 index 0000000..0fa7dc3 --- /dev/null +++ b/logo/utils.py @@ -0,0 +1,24 @@ +from importlib.resources import files + + +def read_css(file): + return files("logo").joinpath(f"css/{file}").read_text() + + +def minify_css(style): + return "".join(style.split()) + + +def get_style(theme="dark"): + style = read_css(f"{theme}.css") + style += read_css("base.css") + return style + + +def debug(dwg, scale): + hlines = dwg.add(dwg.g(id="hlines", stroke="green")) + for y in range(0, scale, int(scale / 20)): + hlines.add(dwg.line(start=(0, y), end=(scale, y))) + vlines = dwg.add(dwg.g(id="vline", stroke="blue")) + for x in range(0, scale, int(scale / 20)): + vlines.add(dwg.line(start=(x, 0), end=(x, scale))) diff --git a/pdm.lock b/pdm.lock new file mode 100644 index 0000000..e403045 --- /dev/null +++ b/pdm.lock @@ -0,0 +1,169 @@ +[[package]] +name = "black" +version = "22.6.0" +requires_python = ">=3.6.2" +summary = "The uncompromising code formatter." +dependencies = [ + "click>=8.0.0", + "mypy-extensions>=0.4.3", + "pathspec>=0.9.0", + "platformdirs>=2", + "tomli>=1.1.0; python_full_version < \"3.11.0a7\"", +] + +[[package]] +name = "click" +version = "8.1.3" +requires_python = ">=3.7" +summary = "Composable command line interface toolkit" +dependencies = [ + "colorama; platform_system == \"Windows\"", +] + +[[package]] +name = "colorama" +version = "0.4.5" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +summary = "Cross-platform colored terminal text." + +[[package]] +name = "flake8" +version = "4.0.1" +requires_python = ">=3.6" +summary = "the modular source code checker: pep8 pyflakes and co" +dependencies = [ + "mccabe<0.7.0,>=0.6.0", + "pycodestyle<2.9.0,>=2.8.0", + "pyflakes<2.5.0,>=2.4.0", +] + +[[package]] +name = "isort" +version = "5.10.1" +requires_python = ">=3.6.1,<4.0" +summary = "A Python utility / library to sort Python imports." + +[[package]] +name = "mccabe" +version = "0.6.1" +summary = "McCabe checker, plugin for flake8" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +summary = "Experimental type system extensions for programs checked with the mypy typechecker." + +[[package]] +name = "pathspec" +version = "0.9.0" +requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +summary = "Utility library for gitignore style pattern matching of file paths." + +[[package]] +name = "platformdirs" +version = "2.5.2" +requires_python = ">=3.7" +summary = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." + +[[package]] +name = "pycodestyle" +version = "2.8.0" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +summary = "Python style guide checker" + +[[package]] +name = "pyflakes" +version = "2.4.0" +requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +summary = "passive checker of Python programs" + +[[package]] +name = "svgwrite" +version = "1.4.3" +requires_python = ">=3.6" +summary = "A Python library to create SVG drawings." + +[[package]] +name = "tomli" +version = "2.0.1" +requires_python = ">=3.7" +summary = "A lil' TOML parser" + +[metadata] +lock_version = "4.0" +content_hash = "sha256:15a59b7f453339840a0b62e3c329e1cf92be16a2d0c205b6a8c75921cb75413e" + +[metadata.files] +"black 22.6.0" = [ + {url = "https://files.pythonhosted.org/packages/07/eb/a757135497a3be31ab8c00ef239070c7277ad11b618104950a756bcab3c1/black-22.6.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a218d7e5856f91d20f04e931b6f16d15356db1c846ee55f01bac297a705ca24f"}, + {url = "https://files.pythonhosted.org/packages/19/b0/13864fd5f3090ca5379f3dcf6034f1e4f02b59620e7b8b5c6f0c85622c0b/black-22.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:560558527e52ce8afba936fcce93a7411ab40c7d5fe8c2463e279e843c0328ee"}, + {url = "https://files.pythonhosted.org/packages/1a/84/203163902ee26bcf1beaef582ee0c8df3f325da3e961b68d2ece959e19d3/black-22.6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6797f58943fceb1c461fb572edbe828d811e719c24e03375fd25170ada53825e"}, + {url = "https://files.pythonhosted.org/packages/1d/d2/bc58bae8ec35f5a3c796d71d5bda113060678483e623a019fb889edd8d97/black-22.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7ba9be198ecca5031cd78745780d65a3f75a34b2ff9be5837045dce55db83d1c"}, + {url = "https://files.pythonhosted.org/packages/2b/70/1d0e33a4df4ed73e9f02f698a29b5d94ff58e39f029c939ecf96a10fb1f3/black-22.6.0-py3-none-any.whl", hash = "sha256:ac609cf8ef5e7115ddd07d85d988d074ed00e10fbc3445aee393e70164a2219c"}, + {url = "https://files.pythonhosted.org/packages/2b/d9/7331e50dad8d5149a9e2285766960ac6b732ae9b3b9796e10916ad88ff61/black-22.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b154e6bbde1e79ea3260c4b40c0b7b3109ffcdf7bc4ebf8859169a6af72cd70b"}, + {url = "https://files.pythonhosted.org/packages/3e/fd/5e47b4d77549909e484de906a69fccc3fcfb782131d8b449073ad8b3ed3e/black-22.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:568ac3c465b1c8b34b61cd7a4e349e93f91abf0f9371eda1cf87194663ab684e"}, + {url = "https://files.pythonhosted.org/packages/40/d1/3f366d7887d1fb6e3e487a6c975a9e9e13618757ed0d5427197fa9e28290/black-22.6.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:187d96c5e713f441a5829e77120c269b6514418f4513a390b0499b0987f2ff1c"}, + {url = "https://files.pythonhosted.org/packages/46/eb/f489451de8b3e91bd82ee722b9a8493b94f8719ea6649e5b8bba2376056d/black-22.6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:074458dc2f6e0d3dab7928d4417bb6957bb834434516f21514138437accdbe90"}, + {url = "https://files.pythonhosted.org/packages/55/33/752544332a2d3be0f6d54ef808075681b68ddc15cfcb90ff128f2d30c85c/black-22.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4af5bc0e1f96be5ae9bd7aaec219c901a94d6caa2484c21983d043371c733fc4"}, + {url = "https://files.pythonhosted.org/packages/57/62/2961a0a57bdf768ccb5aea16327400be6e6bde4fb47ac05af7e9535c5289/black-22.6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2ea29072e954a4d55a2ff58971b83365eba5d3d357352a07a7a4df0d95f51c78"}, + {url = "https://files.pythonhosted.org/packages/61/11/551b0d067a7e6836fc0997ab36ee46ec65259fea8f30104f4870092f3301/black-22.6.0.tar.gz", hash = "sha256:6c6d39e28aed379aec40da1c65434c77d75e65bb59a1e1c283de545fb4e7c6c9"}, + {url = "https://files.pythonhosted.org/packages/63/96/814e02033701f51701444d5505b5e2594453b1f7e913764a097b1f701633/black-22.6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b270a168d69edb8b7ed32c193ef10fd27844e5c60852039599f9184460ce0807"}, + {url = "https://files.pythonhosted.org/packages/80/ff/cfcfa4cdb42d8fff75b6b4dc355a1186a95de4714df8cc2a60f69f7b17f8/black-22.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f586c26118bc6e714ec58c09df0157fe2d9ee195c764f630eb0d8e7ccce72e69"}, + {url = "https://files.pythonhosted.org/packages/86/9c/2a8a13993bc63a50bda7436ecba902231fd9a88dd1cd233e6e3f534e071c/black-22.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:f6fe02afde060bbeef044af7996f335fbe90b039ccf3f5eb8f16df8b20f77666"}, + {url = "https://files.pythonhosted.org/packages/8a/90/69274ed80397ada663ce3c4cc0c70b7fb20b529f9baf4bf9ddf4edc14ccd/black-22.6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cfaf3895a9634e882bf9d2363fed5af8888802d670f58b279b0bece00e9a872d"}, + {url = "https://files.pythonhosted.org/packages/9b/22/ff6d904dcb6f92bd7c20b178ed0aa9e6814ae6452df6c573806dbc465b85/black-22.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3db5b6409b96d9bd543323b23ef32a1a2b06416d525d27e0f67e74f1446c8f2"}, + {url = "https://files.pythonhosted.org/packages/a7/51/d0acd9f74a946a825a148dcc392433c2332ae405967d76292b9e64712dc8/black-22.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c85928b9d5f83b23cee7d0efcb310172412fbf7cb9d9ce963bd67fd141781def"}, + {url = "https://files.pythonhosted.org/packages/ac/9d/b06f45e8dff2b10bf4644ba7a74490538c0272ae48308e04c6f551671b89/black-22.6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e439798f819d49ba1c0bd9664427a05aab79bfba777a6db94fd4e56fae0cb849"}, + {url = "https://files.pythonhosted.org/packages/c4/67/a4e9125bf1a4eb5a2624b3b979af2dc6ee8d3c4ee0b3d2867173db4916fa/black-22.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:b9fd45787ba8aa3f5e0a0a98920c1012c884622c6c920dbe98dbd05bc7c70fbf"}, + {url = "https://files.pythonhosted.org/packages/d6/45/985c13ac6b2f67504cda61fc1d95365eb6446a4c6988ffe0f0f311f7a617/black-22.6.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94783f636bca89f11eb5d50437e8e17fbc6a929a628d82304c80fa9cd945f256"}, + {url = "https://files.pythonhosted.org/packages/e7/fe/4533d110ddced851a359cbbb162685814719690ee01939a34be023410854/black-22.6.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6c1734ab264b8f7929cef8ae5f900b85d579e6cbfde09d7387da8f04771b51c6"}, + {url = "https://files.pythonhosted.org/packages/fc/37/032c45b55f901ee3fe780fbc17fe2dc262c809d94de1288201350d8d680b/black-22.6.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9a3ac16efe9ec7d7381ddebcc022119794872abce99475345c5a61aa18c45ad"}, +] +"click 8.1.3" = [ + {url = "https://files.pythonhosted.org/packages/59/87/84326af34517fca8c58418d148f2403df25303e02736832403587318e9e8/click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, + {url = "https://files.pythonhosted.org/packages/c2/f1/df59e28c642d583f7dacffb1e0965d0e00b218e0186d7858ac5233dce840/click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, +] +"colorama 0.4.5" = [ + {url = "https://files.pythonhosted.org/packages/2b/65/24d033a9325ce42ccbfa3ca2d0866c7e89cc68e5b9d92ecaba9feef631df/colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, + {url = "https://files.pythonhosted.org/packages/77/8b/7550e87b2d308a1b711725dfaddc19c695f8c5fa413c640b2be01662f4e6/colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, +] +"flake8 4.0.1" = [ + {url = "https://files.pythonhosted.org/packages/34/39/cde2c8a227abb4f9ce62fe55586b920f438f1d2903a1a22514d0b982c333/flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, + {url = "https://files.pythonhosted.org/packages/e6/84/d8db922289195c435779b4ca3a3f583f263f87e67954f7b2e83c8da21f48/flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, +] +"isort 5.10.1" = [ + {url = "https://files.pythonhosted.org/packages/ab/e9/964cb0b2eedd80c92f5172f1f8ae0443781a9d461c1372a3ce5762489593/isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, + {url = "https://files.pythonhosted.org/packages/b8/5b/f18e227df38b94b4ee30d2502fd531bebac23946a2497e5595067a561274/isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, +] +"mccabe 0.6.1" = [ + {url = "https://files.pythonhosted.org/packages/06/18/fa675aa501e11d6d6ca0ae73a101b2f3571a565e0f7d38e062eec18a91ee/mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, + {url = "https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, +] +"mypy-extensions 0.4.3" = [ + {url = "https://files.pythonhosted.org/packages/5c/eb/975c7c080f3223a5cdaff09612f3a5221e4ba534f7039db34c35d95fa6a5/mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {url = "https://files.pythonhosted.org/packages/63/60/0582ce2eaced55f65a4406fc97beba256de4b7a95a0034c6576458c6519f/mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +"pathspec 0.9.0" = [ + {url = "https://files.pythonhosted.org/packages/42/ba/a9d64c7bcbc7e3e8e5f93a52721b377e994c22d16196e2b0f1236774353a/pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {url = "https://files.pythonhosted.org/packages/f6/33/436c5cb94e9f8902e59d1d544eb298b83c84b9ec37b5b769c5a0ad6edb19/pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +"platformdirs 2.5.2" = [ + {url = "https://files.pythonhosted.org/packages/ed/22/967181c94c3a4063fe64e15331b4cb366bdd7dfbf46fcb8ad89650026fec/platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {url = "https://files.pythonhosted.org/packages/ff/7b/3613df51e6afbf2306fc2465671c03390229b55e3ef3ab9dd3f846a53be6/platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] +"pycodestyle 2.8.0" = [ + {url = "https://files.pythonhosted.org/packages/08/dc/b29daf0a202b03f57c19e7295b60d1d5e1281c45a6f5f573e41830819918/pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, + {url = "https://files.pythonhosted.org/packages/15/94/bc43a2efb7b8615e38acde2b6624cae8c9ec86faf718ff5676c5179a7714/pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, +] +"pyflakes 2.4.0" = [ + {url = "https://files.pythonhosted.org/packages/15/60/c577e54518086e98470e9088278247f4af1d39cb43bcbd731e2c307acd6a/pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, + {url = "https://files.pythonhosted.org/packages/43/fb/38848eb494af7df9aeb2d7673ace8b213313eb7e391691a79dbaeb6a838f/pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, +] +"svgwrite 1.4.3" = [ + {url = "https://files.pythonhosted.org/packages/16/c1/263d4e93b543390d86d8eb4fc23d9ce8a8d6efd146f9427364109004fa9b/svgwrite-1.4.3.zip", hash = "sha256:a8fbdfd4443302a6619a7f76bc937fc683daf2628d9b737c891ec08b8ce524c3"}, + {url = "https://files.pythonhosted.org/packages/84/15/640e399579024a6875918839454025bb1d5f850bb70d96a11eabb644d11c/svgwrite-1.4.3-py3-none-any.whl", hash = "sha256:bb6b2b5450f1edbfa597d924f9ac2dd099e625562e492021d7dd614f65f8a22d"}, +] +"tomli 2.0.1" = [ + {url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..775066b --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,28 @@ +[project] +name = "logo" +authors = [ + {name = "Daylin Morgan", email = "daylinmorgan@gmail.com"}, +] +dependencies = [ + "svgwrite>=1.4.3", +] +requires-python = ">=3.10" +license = {text = "MIT"} +dynamic = ["version"] + +[project.scripts] +logo = "logo.main:main" + +[build-system] +requires = ["pdm-pep517>=1.0.0"] +build-backend = "pdm.pep517.api" + +[tool.pdm.dev-dependencies] +dev = [ + "black>=22.6.0", + "isort>=5.10.1", + "flake8>=4.0.1", +] + +[tool.pdm] +version = {use_scm=true} diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..b8ab2c8 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,7 @@ +[flake8] +ignore = F405,F403 +max_line_length = 88 +exclude = + .git, + __pycache__ +per-file-ignores = __init__.py:F401 \ No newline at end of file