Skip to content

Commit

Permalink
Starting process orchestration app on backend
Browse files Browse the repository at this point in the history
  • Loading branch information
crisingulani committed Jun 30, 2023
1 parent e1b40a4 commit 2d32213
Show file tree
Hide file tree
Showing 29 changed files with 646 additions and 18 deletions.
19 changes: 14 additions & 5 deletions backend/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,30 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from orchestration.models import Pipeline, Process


@admin.register(Pipeline)
class PipelineAdmin(admin.ModelAdmin):
list_display = ("id", "name", "display_name", "created_at")
search_fields = ("name", "display_name")


@admin.register(Process)
class ProcessAdmin(admin.ModelAdmin):
list_display = ("id", "task_id", "status", "started_at", "ended_at", "created_at")
search_fields = ("task_id", "status", "id")


@admin.register(ProductType)
class ProductTypeAdmin(admin.ModelAdmin):
list_display = ("id", "name", "display_name", "created_at")

search_fields = ("name", "display_name")


@admin.register(Release)
class ReleaseAdmin(admin.ModelAdmin):
list_display = ("id", "name", "display_name", "created_at")

search_fields = ("name", "display_name")


Expand Down Expand Up @@ -44,7 +55,6 @@ class ProductAdmin(admin.ModelAdmin):
)

search_fields = ("name", "display_name")

form = ProductAdminForm

# This will help you to disbale add functionality
Expand All @@ -68,8 +78,7 @@ def has_delete_permission(self, request, obj=None):

@admin.register(ProductFile)
class ProductFileAdmin(admin.ModelAdmin):
list_display = ("id", "product", "file", "role",
"type", "size", "extension")
list_display = ("id", "product", "file", "role", "type", "size", "extension")

def has_add_permission(self, request):
return False
Expand Down
6 changes: 3 additions & 3 deletions backend/core/serializers/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from core.serializers.release import ReleaseSerializer
from core.serializers.product_type import ProductTypeSerializer
from core.serializers.product import ProductSerializer
from core.serializers.product import ProductSerializer, ProductSimpleSerializer
from core.serializers.product_content import ProductContentSerializer
from core.serializers.product_file import ProductFileSerializer
from core.serializers.product_type import ProductTypeSerializer
from core.serializers.release import ReleaseSerializer
from core.serializers.user import UserSerializer
10 changes: 9 additions & 1 deletion backend/core/serializers/product.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from core.models import Product, ProductType, Release
from pkg_resources import require
from rest_framework import serializers
from core.models import Release, ProductType, Product


class ProductSerializer(serializers.ModelSerializer):
Expand Down Expand Up @@ -43,3 +43,11 @@ def get_is_owner(self, obj):
return True
else:
return False


class ProductSimpleSerializer(ProductSerializer):

class Meta:
model = Product
fields = ("id", "display_name", "internal_name")

Empty file.
3 changes: 3 additions & 0 deletions backend/orchestration/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
6 changes: 6 additions & 0 deletions backend/orchestration/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
from django.apps import AppConfig


class OrchestrationConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "orchestration"
1 change: 1 addition & 0 deletions backend/orchestration/filters/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from orchestration.filters.process import ProcessFilter
48 changes: 48 additions & 0 deletions backend/orchestration/filters/process.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from django.db.models import Q
from django_filters import rest_framework as filters
from orchestration.models import Process


class ProcessFilter(filters.FilterSet):
owner__or = filters.CharFilter(method="filter_user")
owner = filters.CharFilter(method="filter_user")
name__or = filters.CharFilter(method="filter_name")
name = filters.CharFilter(method="filter_name")
pipeline_name__or = filters.CharFilter(method="filter_pipeline_name")
pipeline_name = filters.CharFilter(method="filter_pipeline_name")

class Meta:
model = Process
fields = ["pipeline_name", "name", "owner"]

def filter_user(self, queryset, name, value):
query = self.format_query_to_char(
name, value, ["user__username", "user__first_name", "user__last_name"]
)

return queryset.filter(query)

def filter_name(self, queryset, name, value):
query = self.format_query_to_char(name, value, ["name"])

return queryset.filter(query)

def filter_pipeline_name(self, queryset, name, value):
query = self.format_query_to_char(name, value, ["pipeline_name"])

return queryset.filter(query)

@staticmethod
def format_query_to_char(key, value, fields):
condition = Q.OR if key.endswith("__or") else Q.AND
values = value.split(",")
query = Q()

for value in values:
subfilter = Q()
for field in fields:
subfilter.add(Q(**{f"{field}__icontains": value}), Q.OR)

query.add(subfilter, condition)

return query
36 changes: 36 additions & 0 deletions backend/orchestration/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Generated by Django 4.0.2 on 2023-06-28 16:30

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

initial = True

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Process',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255)),
('pipeline_name', models.CharField(max_length=255)),
('pipeline_version', models.CharField(max_length=255)),
('pipeline_config', models.JSONField()),
('used_config', models.JSONField(blank=True, null=True)),
('description', models.TextField(blank=True, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('started_at', models.DateTimeField(blank=True, null=True)),
('stoped_at', models.DateTimeField(blank=True, null=True)),
('task_id', models.CharField(max_length=255)),
('status', models.IntegerField(choices=[(0, 'Successful'), (1, 'Pending'), (2, 'Running'), (3, 'Revoked'), (4, 'Failed')], default=1, verbose_name='Status')),
('path', models.FilePathField(blank=True, default=None, null=True, verbose_name='Path')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='processes', to=settings.AUTH_USER_MODEL)),
],
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Generated by Django 4.0.2 on 2023-06-28 17:33

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('orchestration', '0001_initial'),
]

operations = [
migrations.RenameField(
model_name='process',
old_name='stoped_at',
new_name='ended_at',
),
migrations.AlterField(
model_name='process',
name='name',
field=models.CharField(blank=True, default=None, max_length=255, null=True),
),
migrations.AlterField(
model_name='process',
name='pipeline_config',
field=models.JSONField(blank=True, null=True),
),
migrations.AlterField(
model_name='process',
name='pipeline_version',
field=models.CharField(blank=True, default=None, max_length=255, null=True),
),
migrations.AlterField(
model_name='process',
name='task_id',
field=models.CharField(blank=True, default=None, max_length=255, null=True),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# Generated by Django 4.0.2 on 2023-06-28 18:53

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('core', '0025_remove_product_survey'),
('orchestration', '0002_rename_stoped_at_process_ended_at_alter_process_name_and_more'),
]

operations = [
migrations.RenameField(
model_name='process',
old_name='description',
new_name='comment',
),
migrations.RemoveField(
model_name='process',
name='name',
),
migrations.RemoveField(
model_name='process',
name='pipeline_config',
),
migrations.RemoveField(
model_name='process',
name='pipeline_name',
),
migrations.AddField(
model_name='process',
name='inputs',
field=models.ManyToManyField(blank=True, default=None, null=True, related_name='processes', to='core.Product'),
),
migrations.AddField(
model_name='process',
name='release',
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='processes', to='core.release'),
),
migrations.CreateModel(
name='Pipeline',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, unique=True)),
('display_name', models.CharField(blank=True, max_length=255, null=True)),
('version', models.CharField(blank=True, max_length=255, null=True)),
('config', models.JSONField(blank=True, null=True)),
('description', models.TextField(blank=True, null=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('use_release', models.BooleanField(default=False)),
('product_types', models.ManyToManyField(blank=True, default=None, null=True, related_name='pipelines', to='core.ProductType')),
],
),
migrations.AddField(
model_name='process',
name='pipeline',
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, related_name='processes', to='orchestration.pipeline'),
preserve_default=False,
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 4.0.2 on 2023-06-28 23:02

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('orchestration', '0003_rename_description_process_comment_and_more'),
]

operations = [
migrations.RemoveField(
model_name='pipeline',
name='config',
),
migrations.RemoveField(
model_name='pipeline',
name='version',
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.0.2 on 2023-06-28 23:03

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('core', '0025_remove_product_survey'),
('orchestration', '0004_remove_pipeline_config_remove_pipeline_version'),
]

operations = [
migrations.AlterField(
model_name='pipeline',
name='product_types',
field=models.ManyToManyField(related_name='pipelines', to='core.ProductType'),
),
migrations.AlterField(
model_name='process',
name='inputs',
field=models.ManyToManyField(related_name='processes', to='core.Product'),
),
]
Empty file.
2 changes: 2 additions & 0 deletions backend/orchestration/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from orchestration.models.pipeline import Pipeline
from orchestration.models.process import Process
14 changes: 14 additions & 0 deletions backend/orchestration/models/pipeline.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from core.models import ProductType
from django.db import models


class Pipeline(models.Model):
name = models.CharField(max_length=255, unique=True)
display_name = models.CharField(max_length=255, null=True, blank=True)
description = models.TextField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
use_release = models.BooleanField(default=False)
product_types = models.ManyToManyField(ProductType, related_name="pipelines")

def __str__(self):
return f"{self.name}"
Loading

0 comments on commit 2d32213

Please sign in to comment.