diff --git a/bin/freenit.sh b/bin/freenit.sh index 6b0076a..02502f0 100755 --- a/bin/freenit.sh +++ b/bin/freenit.sh @@ -5,7 +5,7 @@ set -e help() { echo "Usage: $0 " - echo " type: project, backend, react, svelte" + echo " type: project, backend, frontend" echo " name: name used everywhere in the project" } @@ -24,7 +24,7 @@ if [ -z "${TYPE}" ]; then fi case "${TYPE}" in - project|backend|react|svelte) + project|backend|frontend) ;; *) help >&2 @@ -52,10 +52,12 @@ backend() { *BSD) ${SED_CMD} '' -e "s/NAME/${NAME}/g" setup.py ${SED_CMD} '' -e "s/NAME/${NAME}/g" main.py + ${SED_CMD} '' -e "s/PROJECT/${NAME}/g" pyproject.toml ;; *) ${SED_CMD} -e "s/NAME/${NAME}/g" setup.py ${SED_CMD} -e "s/NAME/${NAME}/g" main.py + ${SED_CMD} -e "s/PROJECT/${NAME}/g" pyproject.toml ;; esac mv project ${NAME} @@ -286,115 +288,7 @@ vars.mk EOF } -react() { - npm init vite@latest "${NAME}" -- --template react-ts - cd "${NAME}" - npm install @freenit-framework/axios react-router-dom @mdi/js - frontend_common - - rm src/App.* src/index.css src/logo.svg - mkdir src/routes - cat >src/routing.tsx< { - const key = file.replace(/\/src\/routes\/|\.tsx$/g, '') - return { ...preserved, [key]: PRESERVED[file].default } -}, {}) - -const routes = Object.keys(ROUTES).map((route) => { - const path = route - .replace(/\/src\/routes|index|\.tsx$/g, '') - .replace(/\[\.{3}.+\]/, '*') - .replace(/\[(.+)\]/, ':') - - return { path, component: ROUTES[route].default } -}) - -export const Routing = () => { - const NotFound = preserved?.['404'] || Fragment - - return ( - - {routes.map(({ path, component: Component = Fragment }) => ( - } /> - ))} - } /> - - ) -} -EOF - - cat >src/main.tsx< - - - - -); -EOF - - cat >src/routes/index.tsx<Hello World! - ) -} -EOF - - case `uname` in - *BSD) - ${SED_CMD} '' -e "s/})//g" vite.config.ts - ${SED_CMD} '' -e "s/plugins: \(.*\)/plugins: \1,/g" vite.config.ts - ;; - *) - ${SED_CMD} -e "s/})//g" vite.config.ts - ${SED_CMD} -e "s/plugins: \(.*\)/plugins: \1,/g" vite.config.ts - ;; - esac - cat >>vite.config.ts<devel.sh<&2 - exit 1 - fi + frontend mv "${NAME}" frontend cd .. } diff --git a/freenit/cli.py b/freenit/cli.py index e1599e5..c0d0f55 100644 --- a/freenit/cli.py +++ b/freenit/cli.py @@ -1,6 +1,10 @@ +import pathlib import subprocess + from prompt_toolkit import prompt + def main(): + path = pathlib.Path(__file__).parent.resolve() project_name = prompt("Name of the project: ") - subprocess.run(["bin/freenit.sh", "project", project_name]) + subprocess.run([f"{path}/bin/freenit.sh", "project", project_name]) diff --git a/freenit/project/LICENSE b/freenit/project/LICENSE new file mode 100644 index 0000000..e69de29 diff --git a/freenit/project/project/__init__.py b/freenit/project/project/__init__.py index e69de29..f102a9c 100644 --- a/freenit/project/project/__init__.py +++ b/freenit/project/project/__init__.py @@ -0,0 +1 @@ +__version__ = "0.0.1" diff --git a/freenit/project/project/app.py b/freenit/project/project/app.py index 1806622..8c91ee4 100644 --- a/freenit/project/project/app.py +++ b/freenit/project/project/app.py @@ -1,22 +1,21 @@ +from contextlib import asynccontextmanager from fastapi import FastAPI +import freenit.config + from .api import api -from .config import getConfig -config = getConfig() -app = FastAPI() +config = freenit.config.getConfig() -@app.on_event("startup") -async def startup() -> None: +@asynccontextmanager +async def lifespan(_: FastAPI): if not config.database.is_connected: await config.database.connect() - - -@app.on_event("shutdown") -async def shutdown() -> None: + yield if config.database.is_connected: await config.database.disconnect() -app.mount("/api/v1", api) +app = FastAPI(lifespan=lifespan) +app.mount(config.api_root, api) diff --git a/freenit/project/pyproject.toml b/freenit/project/pyproject.toml new file mode 100644 index 0000000..ae8bcca --- /dev/null +++ b/freenit/project/pyproject.toml @@ -0,0 +1,38 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "NAME" +dynamic = ["version"] +description = "REST API framework based on FastAPI" +readme = "README.md" +license = {file = "LICENSE"} +requires-python = ">=3.8" +dependencies = [ + "freenit[ormar]", +] +authors = [ + {name = "John Doe", email = "john@doe.com"}, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Topic :: Internet :: WWW/HTTP", + "Environment :: Web Environment", + "Programming Language :: Python" +] + +[project.optional-dependencies] + beanie = ["freenit[beanie]"] + dev = ["freenit[dev]"] + ldap = ["freenit[ldap]"] + ormar = ["freenit[ormar]"] + test = ["freenit[test]"] + +[project.urls] +Homepage = "https://freenit.org" +Repository = "https://github.com/freenit-framework/backend" + +[tool.hatch.version] +path = "PROJECT/__init__.py"