Added small cli for templating leetcode exercises

This commit is contained in:
strNophix 2022-08-31 12:28:56 +02:00
parent 2f32bdc7b9
commit 65e8af6bb7
3 changed files with 58 additions and 0 deletions

41
cli.py Normal file
View File

@ -0,0 +1,41 @@
import click
import jinja2
from os import path
class LeetCode:
@staticmethod
def filename_from_url(url: str) -> str:
num = input("Number: ")
name = url.split("/")[4].replace("-", "_")
return f"{num}_{name}.py"
@click.group()
@click.option("--template-dir", default="./templates")
@click.pass_context
def cli(ctx: click.Context, template_dir: str):
ctx.obj["template"] = jinja2.Environment(
loader=jinja2.FileSystemLoader(template_dir)
)
@cli.command()
@click.pass_context
@click.argument("url")
def leetcode(ctx: click.Context, url: str):
file_path = path.join("leetcode", LeetCode.filename_from_url(url))
if path.exists(file_path):
print("File already exists")
return 1
templates: jinja2.Environment = ctx.obj["template"]
templ = templates.get_template("leetcode.j2")
result = templ.render()
with open(file_path, mode="w", encoding="utf8") as f:
f.write(result)
if __name__ == "__main__":
cli(obj={})

View File

@ -1,2 +1,4 @@
pytest
black
click
jinja2

15
templates/leetcode.j2 Normal file
View File

@ -0,0 +1,15 @@
import pytest
class Solution:
pass
@pytest.fixture
def solution():
return Solution()
@pytest.mark.parametrize("", [])
def test_search(solution: Solution):
pass