mirror of
https://github.com/daylinmorgan/logo.git
synced 2024-12-22 06:20:44 -06:00
chore: initial version
This commit is contained in:
parent
57a3d3a318
commit
139a833711
19 changed files with 799 additions and 0 deletions
21
.github/workflows/build-publish.yml
vendored
Normal file
21
.github/workflows/build-publish.yml
vendored
Normal file
|
@ -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
|
170
.gitignore
vendored
Normal file
170
.gitignore
vendored
Normal file
|
@ -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
|
7
Dockerfile
Normal file
7
Dockerfile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
FROM alpine:3.16.2
|
||||||
|
|
||||||
|
RUN apk add --no-cache inkscape
|
||||||
|
|
||||||
|
WORKDIR /data
|
||||||
|
|
||||||
|
ENTRYPOINT ["inkscape"]
|
72
Makefile
Normal file
72
Makefile
Normal file
|
@ -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)
|
|
@ -1 +1,6 @@
|
||||||
# Logo
|
# Logo
|
||||||
|
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
|
||||||
|
- [ ] add version's that include my name
|
||||||
|
|
70
docs/index.html
Normal file
70
docs/index.html
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
|
<link
|
||||||
|
href="https://fonts.googleapis.com/css2?family=Roboto:wght@900&display=swap"
|
||||||
|
rel="stylesheet"
|
||||||
|
/>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
background-color: #11111b;
|
||||||
|
margin: 1% auto;
|
||||||
|
width: 70%;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 20em;
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
font-size: xx-large;
|
||||||
|
color: #f5e0dc;
|
||||||
|
margin: 1% auto;
|
||||||
|
text-align: center;
|
||||||
|
width: auto;
|
||||||
|
border: 5px;
|
||||||
|
border-style: solid;
|
||||||
|
border-radius: 50px;
|
||||||
|
border-color: #f5e0dc;
|
||||||
|
}
|
||||||
|
.grid-container {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto auto auto;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
.grid-item {
|
||||||
|
text-align: center;
|
||||||
|
width: 14vw;
|
||||||
|
}
|
||||||
|
@media only screen and (max-width: 1000px) {
|
||||||
|
.header {
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<h1>My Logos</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="grid-container">
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-rect-b-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-circle-b-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-rect-b-light.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-circle-b-light.svg" />
|
||||||
|
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-rect-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-circle-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-rect-light.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-bg-circle-light.svg" />
|
||||||
|
|
||||||
|
<img class="grid-item" src="./svg/logo-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-dark.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-light.svg" />
|
||||||
|
<img class="grid-item" src="./svg/logo-light.svg" />
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
31
generate-all.py
Executable file
31
generate-all.py
Executable file
|
@ -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()
|
1
logo/__init__.py
Normal file
1
logo/__init__.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
from .main import generate
|
20
logo/cli.py
Normal file
20
logo/cli.py
Normal file
|
@ -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()
|
46
logo/config.py
Normal file
46
logo/config.py
Normal file
|
@ -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,
|
||||||
|
)
|
15
logo/css/base.css
Normal file
15
logo/css/base.css
Normal file
|
@ -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;
|
||||||
|
}
|
9
logo/css/dark.css
Normal file
9
logo/css/dark.css
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/* dark css */
|
||||||
|
.background {
|
||||||
|
fill: #1e1e2e;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg {
|
||||||
|
fill:#f5e0dc;
|
||||||
|
stroke:#f5e0dc;
|
||||||
|
}
|
9
logo/css/light.css
Normal file
9
logo/css/light.css
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/* light css */
|
||||||
|
.background {
|
||||||
|
fill:#f5e0dc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fg {
|
||||||
|
fill: #1e1e2e;
|
||||||
|
stroke: #1e1e2e;
|
||||||
|
}
|
70
logo/main.py
Normal file
70
logo/main.py
Normal file
|
@ -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"<!-- {comment} -->\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,
|
||||||
|
)
|
25
logo/shapes.py
Normal file
25
logo/shapes.py
Normal file
|
@ -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)
|
24
logo/utils.py
Normal file
24
logo/utils.py
Normal file
|
@ -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)))
|
169
pdm.lock
Normal file
169
pdm.lock
Normal file
|
@ -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"},
|
||||||
|
]
|
28
pyproject.toml
Normal file
28
pyproject.toml
Normal file
|
@ -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}
|
7
setup.cfg
Normal file
7
setup.cfg
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[flake8]
|
||||||
|
ignore = F405,F403
|
||||||
|
max_line_length = 88
|
||||||
|
exclude =
|
||||||
|
.git,
|
||||||
|
__pycache__
|
||||||
|
per-file-ignores = __init__.py:F401
|
Loading…
Reference in a new issue