mycroforge/docs
2024-06-09 22:15:49 +02:00
..
todo-example Improved db feature and adding documentation 2024-06-09 20:35:54 +02:00
README.md Adding documentation 2024-06-09 22:15:49 +02:00

General introduction

What is MycroForge?

MycroForge is an opinionated CLI tool that is meant to facilitate the development of FastAPI & SQLAlchemy based backends. It provides a command line interface that allows users to generate a skeleton project and other common items like database entities, migrations, routers and even basic CRUD functionality. The main purpose of this tool is to generate boilerplate code and to provide a unified interface for performing recurrent development activities.

Generating a project

To generate a project you can run the following command.

m4g init <name>

Description:
  Initialize a new project

Usage:
  m4g init <name> [options]

Arguments:
  <name>  The name of your project

Options:
  --without <api|db|git>  Features to exclude
  -?, -h, --help          Show help and usage information

Running this command will generate the following project structure.

📦<project_name>
 ┣ 📂.git
 ┣ 📂.venv
 ┣ 📂api
 ┃ ┗ 📂routers
 ┃ ┃ ┗ 📜hello.py
 ┣ 📂db
 ┃ ┣ 📂engine
 ┃ ┃ ┗ 📜async_session.py
 ┃ ┣ 📂entities
 ┃ ┃ ┗ 📜entity_base.py
 ┃ ┣ 📂versions
 ┃ ┣ 📜README
 ┃ ┣ 📜env.py
 ┃ ┣ 📜script.py.mako
 ┃ ┗ 📜settings.py
 ┣ 📜.gitignore
 ┣ 📜alembic.ini
 ┣ 📜db.docker-compose.yml
 ┣ 📜m4g.json
 ┣ 📜main.py
 ┗ 📜requirements.txt

Let's go through these one by one.

.git

The project is automatically initialised with git by the m4g init command. If you don't want to use git you can run m4g init <name> --without git.

.venv

To promote isolation of Python dependencies, the project is initialized with a virtual environment by default.

api/routers/hello.py

This file defines a basic example router, which is imported and mapped in main.py.

db/engine/async_session.py

This file defines the async_session function, which can be used to asynchronously connect to a database.

db/entities/entity_base.py

This is the automatically generated base class that all database entities will inherit from. SQLAlchemy requires a base entity class to properly function.

db/entities/versions

This is where the generated database migrations will be kept.

db/README

This README file is automatically generated by the alembic init command.

db/env.py

This is the database environment file that is used by alembic to interact with the database. If you take a close look at the imports, you'll see that the file has been modified to include the entity metadata, i.e. EntityBase.metadata and you should also notice that the DbSettings class is used to get the connectionstring. Any time you generate a new database entity or create a many-to-many relation between two entities, this file will also be modified.

db/script.py.mako

This file is automatically generated by the alembic init command.

db/settings.py

This file defines a class that is responsible for retrieving the connectionstring.

.gitignore

The default .gitignore file/

alembic.ini

The alembic ini file

db.docker-compose.yml

A docker compose file for running a database locally.

m4g.json

The m4g config file, this file contains some configs that are used by the CLI, for example the ports to map to the API and database.

main.py

The entrypoint for the application.

requirements.txt

The requirements file containing the Python dependencies.