Source code for djangautomate.generators

import sqlalchemy

[docs] class ModelGenerator: """ Generates Django model code from an SQLAlchemy table. Attributes: db_engine (sqlalchemy.engine.Engine): The SQLAlchemy database engine. table_name (str): The name of the SQLAlchemy table to convert to a Django model. index_cols (list[str]): A list of indexed columns. """
[docs] def __init__(self, db_engine, table_name, index_cols): """ Initializes the ModelGenerator class. Args: db_engine (sqlalchemy.engine.Engine): The SQLAlchemy database engine. table_name (str): The name of the table to generate the model from. index_cols (list[str]): A list of indexed columns. """ self.db_engine = db_engine self.table_name = table_name self.index_cols = index_cols
[docs] def generate(self) -> str: """ Generates Django model code from the SQLAlchemy table. Returns: str: The generated Django model code. """ model_code = "from django.db import models\n\n" model_code += f"class {self.table_name.capitalize()}(models.Model):\n" metadata = sqlalchemy.MetaData() table = sqlalchemy.Table(self.table_name, metadata, autoload_with=self.db_engine) for col in table.c: if col.name == 'index': continue model_code += f" {col.name} = models.{self.get_field_type(col.type)}\n" model_code += " class Meta:\n" model_code += f" db_table = '{self.table_name}'\n" return model_code
[docs] def get_field_type(self, col_type) -> str: """ Maps SQLAlchemy column types to Django model field types. Args: col_type (sqlalchemy.types.TypeEngine): The SQLAlchemy column type. Returns: str: The corresponding Django model field type. """ if isinstance(col_type, sqlalchemy.String): return "CharField(max_length=255)" elif isinstance(col_type, sqlalchemy.Integer): return "IntegerField()" elif isinstance(col_type, sqlalchemy.Float): return "FloatField()" elif isinstance(col_type, sqlalchemy.Boolean): return "BooleanField()" elif isinstance(col_type, sqlalchemy.DateTime): return "DateTimeField()" return "TextField()"
[docs] class ViewGenerator: """ Generates Django ViewSet code for the given model. Attributes: app_name (str): The name of the Django app. camelcased_app_name (str): The app name in CamelCase format. """
[docs] def __init__(self, app_name: str): """ Initializes the ViewGenerator class. Args: app_name (str): The name of the Django app. """ self.app_name = app_name self.camelcased_app_name = app_name.capitalize()
[docs] def generate(self) -> str: """ Generates Django ViewSet code for the model. Returns: str: The generated Django ViewSet code. """ return f""" from .models import {self.camelcased_app_name} from .serializers import {self.camelcased_app_name}Serializer from rest_framework import viewsets class {self.camelcased_app_name}ViewSet(viewsets.ModelViewSet): queryset = {self.camelcased_app_name}.objects.all() serializer_class = {self.camelcased_app_name}Serializer """
[docs] class SerializerGenerator: """ Generates Django REST Framework serializer code. Attributes: db_engine (sqlalchemy.engine.Engine): The SQLAlchemy database engine. table_name (str): The name of the SQLAlchemy table to generate a serializer for. """
[docs] def __init__(self, db_engine, table_name: str): """ Initializes the SerializerGenerator class. Args: db_engine (sqlalchemy.engine.Engine): The SQLAlchemy database engine. table_name (str): The name of the table to generate the serializer for. """ self.db_engine = db_engine self.table_name = table_name
[docs] def generate(self) -> str: """ Generates Django REST Framework serializer code. Returns: str: The generated serializer code. """ return f""" from rest_framework import serializers from .models import {self.table_name.capitalize()} class {self.table_name.capitalize()}Serializer(serializers.ModelSerializer): class Meta: model = {self.table_name.capitalize()} fields = '__all__' """
[docs] class AppConfigGenerator: """ Generates Django app configuration. Attributes: app_name (str): The name of the Django app. """
[docs] def __init__(self, app_name: str): """ Initializes the AppConfigGenerator class. Args: app_name (str): The name of the Django app. """ self.app_name = app_name.capitalize()
[docs] def generate(self) -> str: """ Generates Django app configuration. Returns: str: The generated Django app configuration. """ return f""" from django.apps import AppConfig class {self.app_name}Config(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'endpoints.{self.app_name.lower()}' """