21 Commits

Author SHA1 Message Date
xoliqberdiyev
7134b2c185 add new api 2026-04-27 14:50:59 +05:00
github-actions[bot]
306aecc956 🔄 Update image to 127 [CI SKIP] 2026-04-27 09:47:57 +00:00
3ede209e52 Merge pull request 'update' (#108) from shaxob into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 4m21s
Reviewed-on: #108
2026-04-27 09:46:13 +00:00
Shaxobff
05857a227a update 2026-04-27 14:45:32 +05:00
10b25b5228 Merge pull request 'update' (#107) from shaxob into main
Some checks failed
Deploy to Production / build-and-deploy (push) Failing after 3m43s
Reviewed-on: #107
2026-04-27 09:39:46 +00:00
Shaxobff
fcbfa94dd4 update 2026-04-27 14:38:55 +05:00
7e778d3a3e Merge pull request 'shaxob' (#106) from shaxob into main
Some checks failed
Deploy to Production / build-and-deploy (push) Failing after 10m36s
Reviewed-on: #106
2026-04-27 09:02:37 +00:00
Shaxobff
81a4287db1 update 2026-04-27 11:57:27 +05:00
Shaxobff
e560fdaf2d fix bug 2026-04-27 11:28:18 +05:00
Shaxobff
0d96167a7b fix bug 2026-04-27 10:58:02 +05:00
Shaxobff
ae65d9d793 resolve migrations conflict 2026-04-25 12:52:15 +05:00
Shaxobff
5249f7e6f7 my migrations 2026-04-25 12:36:33 +05:00
Shaxobff
e1b771e166 app permission api 20 (api) 2026-04-25 12:32:56 +05:00
github-actions[bot]
eded642bd7 🔄 Update image to 124 [CI SKIP] 2026-04-24 13:57:50 +00:00
f830235813 Merge pull request 'fix' (#105) from behruz into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 2m15s
Reviewed-on: #105
2026-04-24 13:55:58 +00:00
github-actions[bot]
2f471173c3 🔄 Update image to 123 [CI SKIP] 2026-04-24 13:52:45 +00:00
3838fbaa47 Merge pull request 'change ci/cd folder' (#104) from behruz into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 2m16s
Reviewed-on: #104
2026-04-24 13:50:51 +00:00
github-actions[bot]
fe40057d95 🔄 Update image to 122 [CI SKIP] 2026-04-24 13:40:38 +00:00
550da049b9 Merge pull request 'fix' (#103) from behruz into main
All checks were successful
Deploy to Production / build-and-deploy (push) Successful in 2m17s
Reviewed-on: #103
2026-04-24 13:38:42 +00:00
github-actions[bot]
bd27205252 🔄 Update image to 121 [CI SKIP] 2026-04-24 13:34:27 +00:00
34aba90ebd Merge pull request 'behruz' (#102) from behruz into main
Some checks failed
Deploy to Production / build-and-deploy (push) Failing after 2m6s
Reviewed-on: #102
2026-04-24 13:32:26 +00:00
18 changed files with 199 additions and 130 deletions

View File

@@ -13,7 +13,7 @@ from config.env import env
def home(request): def home(request):
return HttpResponse("OK: #7272ef3fce1cb08dc94c272e7d7cda89c9b64cd1") return HttpResponse("OK: #3ede209e52cd3cbd23fc608c3aa250f637882258")
urlpatterns = [ urlpatterns = [

View File

@@ -1,4 +1,5 @@
from django.contrib.auth import admin from django.contrib.auth import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from unfold.admin import ModelAdmin from unfold.admin import ModelAdmin

View File

@@ -1,4 +1,4 @@
# Generated by Django 5.2.7 on 2026-04-24 12:55 # Generated by Django 5.2.7 on 2026-04-27 09:33
import django.db.models.deletion import django.db.models.deletion
from django.db import migrations, models from django.db import migrations, models

View File

@@ -1,8 +1,26 @@
from rest_framework import serializers from rest_framework import serializers
from core.apps.accounts.models.permission import PermissionToAction from core.apps.accounts.models.permission import PermissionToAction, PermissionToTab, Permission, Role
class PermissionToActionSerializer(serializers.ModelSerializer):
class Meta:
model = PermissionToAction
fields = "__all__"
class PermissionToTabSerializer(serializers.ModelSerializer):
class Meta:
model = PermissionToTab
fields = '__all__'
class PermissionSerializer(serializers.ModelSerializer): class PermissionSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = PermissionToAction model = Permission
fields = '__all__'
class RoleSerializer(serializers.ModelSerializer):
class Meta:
model = Role
fields = '__all__'

View File

@@ -8,7 +8,7 @@ from .views import RegisterView, ResetPasswordView, MeView, ChangePasswordView,
AdminUserView, AdminCreateAPIView, AdminUpdateAPIView AdminUserView, AdminCreateAPIView, AdminUpdateAPIView
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
# from .views.permission import PermissionToActionViewSetMixin from .views.permission import PermissionToActionViewSet, PermissionToTabViewSet, PermissionViewSet, RoleViewSet
router = DefaultRouter() router = DefaultRouter()
router.register("auth", RegisterView, basename="auth") router.register("auth", RegisterView, basename="auth")
@@ -16,7 +16,10 @@ router.register("auth", ResetPasswordView, basename="reset-password")
router.register("auth", MeView, basename="me") router.register("auth", MeView, basename="me")
router.register("auth", ChangePasswordView, basename="change-password") router.register("auth", ChangePasswordView, basename="change-password")
router.register("user", AdminUserView, basename="user-crud") router.register("user", AdminUserView, basename="user-crud")
# router.register("user", PermissionToActionViewSetMixin, basename="permission") router.register("action", PermissionToActionViewSet, basename="action")
router.register("permission-to-tab", PermissionToTabViewSet, basename="permission-to-tab")
router.register("permission", PermissionViewSet, basename="permission")
router.register("permission-role", RoleViewSet, basename="permission-role")
urlpatterns = [ urlpatterns = [

View File

@@ -1,18 +1,42 @@
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
from rest_framework.permissions import AllowAny from drf_spectacular.utils import extend_schema
from rest_framework.permissions import AllowAny, IsAdminUser
from rest_framework.viewsets import ModelViewSet
from core.apps.accounts.models.permission import PermissionToAction from core.apps.accounts.models.permission import PermissionToAction, PermissionToTab, Permission, Role
from core.apps.accounts.serializers.permission import PermissionSerializer from core.apps.accounts.serializers.permission import PermissionToActionSerializer, PermissionToTabSerializer, \
PermissionSerializer, RoleSerializer
# class PermissionToActionViewSetMixin(BaseViewSetMixin): @extend_schema(tags=["permission"])
# queryset = PermissionToAction.objects.all() class PermissionToActionViewSet(BaseViewSetMixin, ModelViewSet):
# permission_classes = [AllowAny] queryset = PermissionToAction.objects.all()
# serializer_class = PermissionSerializer serializer_class = PermissionToActionSerializer
#
# action_permission_classes = {} action_serializer_class = {
# action_serializer_class = { 'create': PermissionToActionSerializer,
# "list": PermissionSerializer, 'update': PermissionToActionSerializer,
# "retrieve": PermissionSerializer, }
# "create": PermissionSerializer,
# } action_permission_classes = {
'create': [AllowAny],
'destroy': [IsAdminUser],
}
@extend_schema(tags=["permission"])
class PermissionToTabViewSet(BaseViewSetMixin, ModelViewSet):
queryset = PermissionToTab.objects.all()
serializer_class = PermissionToTabSerializer
@extend_schema(tags=["permission"])
class PermissionViewSet(BaseViewSetMixin, ModelViewSet):
queryset = Permission.objects.all()
serializer_class = PermissionSerializer
class RoleViewSet(BaseViewSetMixin, ModelViewSet):
queryset = Role.objects.all()
serializer_class = RoleSerializer

View File

@@ -1,4 +1,4 @@
# Generated by Django 5.2.7 on 2026-04-24 12:55 # Generated by Django 5.2.7 on 2026-04-27 09:33
from django.db import migrations, models from django.db import migrations, models

View File

@@ -3,6 +3,7 @@ from core.apps.evaluation.models import CertificateModel
class BaseCertificateSerializer(serializers.ModelSerializer): class BaseCertificateSerializer(serializers.ModelSerializer):
file = serializers.SerializerMethodField()
class Meta: class Meta:
model = CertificateModel model = CertificateModel
@@ -10,4 +11,12 @@ class BaseCertificateSerializer(serializers.ModelSerializer):
"id", "id",
"title", "title",
"file", "file",
] ]
def get_file(self, obj):
if obj.file:
request = self.context.get('request')
if request:
return request.build_absolute_uri(obj.file.url)
return obj.file.url
return None

View File

@@ -128,6 +128,3 @@ class CreateQuickevaluationSerializer(serializers.ModelSerializer):
return super().create(validated_data) return super().create(validated_data)
class ArchiveQuickevaluationSerializer(serializers.Serializer):
id = serializers.IntegerField(required=True)
is_archive = serializers.BooleanField(required=True)

View File

@@ -30,10 +30,13 @@ from .views import (
TechPassportAPIView, TechPassportAPIView,
EvaluationStatusChange, EvaluationStatusChange,
CertificateView, CertificateView,
ArchiveQuickEvaluationView, ArchiveEvaluationrequestView, GetArchivedAutoEvaluationListAPIView, ArchivedAutoEvaluation,
ArchiveEvaluationrequestView, GetArchivedEvaluationListAPIView, ArchivedEvaluation, GetArchivedQuickevaluationListAPIView, ChangeQuickevaluationAPIView, ArchivedReqEvaluation,
GetArchivedReqEvaluationListAPIView,
AvgCostView,
) )
router = DefaultRouter() router = DefaultRouter()
router.register("document-category", DocumentCategoryView, basename="DocumentCategory") router.register("document-category", DocumentCategoryView, basename="DocumentCategory")
router.register("document", DocumentView, basename="Document") router.register("document", DocumentView, basename="Document")
@@ -78,13 +81,25 @@ urlpatterns = [
), ),
path("evaluation-request/<int:pk>/change-status/", EvaluationStatusChange.as_view(), path("evaluation-request/<int:pk>/change-status/", EvaluationStatusChange.as_view(),
name="evaluation-change-status"), name="evaluation-change-status"),
path("archive/quick-evaluation/", ArchiveQuickEvaluationView.as_view(), name="quick-evaluation-archive"), path("archive/quick-evaluation/", GetArchivedQuickevaluationListAPIView.as_view(), name="get-quick-evaluation-archive"),
path("archive/quick-evaluation/<int:pk>", ChangeQuickevaluationAPIView.as_view(), name="change-quick-evaluation-archive"),
path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"), path("archive/evaluation-request/", ArchiveEvaluationrequestView.as_view(), name="evaluation-request-archive"),
path("archived-evaluvation/", GetArchivedEvaluationListAPIView.as_view(), path("archived-evaluvation/", GetArchivedAutoEvaluationListAPIView.as_view(),
name="archived-evaluation"), name="archived-evaluation"),
path("auto-evaluvation-change-status/<int:pk>", ArchivedEvaluation.as_view(), path("auto-evaluvation-change-status/<int:pk>", ArchivedAutoEvaluation.as_view(),
name="archived-evaluation"), name="archived-evaluation"),
path("req-evaluvation-change-status/<int:pk>", ArchivedReqEvaluation.as_view(),
name="archived-req-evaluation"),
path("req-evaluvation-change-status/", GetArchivedReqEvaluationListAPIView.as_view(),
name="archived-req-evaluation"),
path(
"calculate_avg_cost/",
AvgCostView.as_view(),
name="calculate-avg-cost"
)
] ]

View File

@@ -14,3 +14,4 @@ from .vehicle import * # noqa
from .didox import * # noqa from .didox import * # noqa
from .tech_passport import * # noqa from .tech_passport import * # noqa
from .certificate import * # noqa from .certificate import * # noqa
from .avg_cost import *

View File

@@ -158,18 +158,21 @@ class AutoEvaluationListAppraisersView(GenericAPIView):
@extend_schema(tags=["AutoEvaluation"]) @extend_schema(tags=["AutoEvaluation"])
class GetArchivedEvaluationListAPIView(ListAPIView): class GetArchivedAutoEvaluationListAPIView(ListAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def get_queryset(self): def get_queryset(self):
return AutoEvaluationModel.objects.filter(is_archived=True) return AutoEvaluationModel.objects.filter(is_archived=True)
@extend_schema(tags=["AutoEvaluation"]) @extend_schema(tags=["AutoEvaluation"])
class ArchivedEvaluation(APIView): class ArchivedAutoEvaluation(APIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def post(self, request, pk): def post(self, request, pk):
auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk) auto_evaluation = get_object_or_404(AutoEvaluationModel, pk=pk)
auto_evaluation.is_archived = request.data["is_archived"] auto_evaluation.is_archived = request.data["is_archived"]
auto_evaluation.save() auto_evaluation.save()
return Response({"success": True}, status=200) return Response({"success": True,
"status": auto_evaluation.status,
"id": auto_evaluation.pk}, status=200)

View File

@@ -10,9 +10,26 @@ class AvgCostView(generics.GenericAPIView):
serializer_class = AvgCostSerializer serializer_class = AvgCostSerializer
permission_classes = [permissions.IsAuthenticated] permission_classes = [permissions.IsAuthenticated]
def post(self): def post(self, request):
serializer = self.get_serializer(data=self.request.data) serializer = self.get_serializer(data=request.data)
if serializer.is_valid(): if serializer.is_valid():
avg_cost = get_auto_avg_cost(serializer.validated_data) print(serializer.validated_data)
brand = serializer.validated_data['brand']
condition = serializer.validated_data['condition']
model = serializer.validated_data['model']
complication = serializer.validated_data['complication']
manufacture_date = serializer.validated_data['manufacture_date']
distance_covered = serializer.validated_data['distance_covered']
color = serializer.validated_data['color']
avg_cost = get_auto_avg_cost(
brand=brand,
condition=condition,
model=model,
complication=complication,
manufacture_date=manufacture_date,
distance_covered=str(distance_covered),
color=color
)
return Response(avg_cost, status=200) return Response(avg_cost, status=200)
return Response(serializer.errors, status=400) return Response(serializer.errors, status=400)

View File

@@ -15,7 +15,7 @@ class CertificateView(BaseViewSetMixin, ModelViewSet):
parser_classes = [MultiPartParser, FormParser] parser_classes = [MultiPartParser, FormParser]
filter_backends = [SearchFilter] filter_backends = [SearchFilter]
search_fields = ["title"] search_fields = ["title"]
pagination_class = None pagination_class = None

View File

@@ -1,14 +1,15 @@
from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import extend_schema, OpenApiResponse from drf_spectacular.utils import extend_schema
from rest_framework import status
from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.generics import ListAPIView
from rest_framework.parsers import FormParser, MultiPartParser from rest_framework.parsers import FormParser, MultiPartParser
from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.permissions import AllowAny, IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import status from rest_framework.views import APIView
from django.shortcuts import get_object_or_404 from rest_framework.viewsets import ModelViewSet
from core.apps.evaluation.filters.quick import QuickevaluationFilter from core.apps.evaluation.filters.quick import QuickevaluationFilter
from core.apps.evaluation.models import QuickEvaluationModel from core.apps.evaluation.models import QuickEvaluationModel
@@ -16,7 +17,6 @@ from core.apps.evaluation.serializers.quick import (
CreateQuickevaluationSerializer, CreateQuickevaluationSerializer,
ListQuickevaluationSerializer, ListQuickevaluationSerializer,
RetrieveQuickevaluationSerializer, RetrieveQuickevaluationSerializer,
ArchiveQuickevaluationSerializer,
) )
@@ -56,75 +56,27 @@ class QuickEvaluationView(BaseViewSetMixin, ModelViewSet):
"create": CreateQuickevaluationSerializer, "create": CreateQuickevaluationSerializer,
} }
@extend_schema(tags=["QuickEvaluation"]) @extend_schema(tags=["QuickEvaluation"])
class ArchiveQuickEvaluationView(GenericAPIView): class ChangeQuickevaluationAPIView(APIView):
def post(self, request, pk):
instance = get_object_or_404(QuickEvaluationModel, pk=pk)
is_archived = request.data.get("is_archived")
if is_archived is None:
return Response(
{"error": "Поле 'is_archived' обязательно"},
status=status.HTTP_400_BAD_REQUEST
)
instance.is_archived = is_archived
instance.save()
return Response({"success": True}, status=200)
@extend_schema(tags=["QuickEvaluation"])
class GetArchivedQuickevaluationListAPIView(ListAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
def get_serializer_class(self): def get_queryset(self):
if self.request.method == "GET": return QuickEvaluationModel.objects.filter(is_archived=True)
return ListQuickevaluationSerializer
return ArchiveQuickevaluationSerializer
@extend_schema(
tags=["QuickEvaluation"],
summary="Get archived quick evaluations list",
description="""
Returns only archived quick evaluations.
This endpoint works like quick-evaluation/,
but only records with is_archive=True are returned.
""",
responses={200: ListQuickevaluationSerializer(many=True)},
)
def get(self, request, *args, **kwargs):
queryset = QuickEvaluationModel.objects.filter(
is_archive=True
).order_by("-created_at")
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
@extend_schema(
tags=["QuickEvaluation"],
summary="Archive or unarchive quick evaluation",
description="""
Update archive status for quick evaluation.
- is_archive=true → archive
- is_archive=false → remove from archive
""",
request=ArchiveQuickevaluationSerializer,
responses={
200: OpenApiResponse(
description="Archive status updated successfully"
),
400: OpenApiResponse(
description="Validation error"
),
404: OpenApiResponse(
description="Quick evaluation not found"
),
},
)
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
validated_data = serializer.validated_data
obj = get_object_or_404(
QuickEvaluationModel,
id=validated_data["id"]
)
obj.is_archive = validated_data["is_archive"]
obj.save(update_fields=["is_archive"])
return Response(
{
"success": True,
"message": "Archive status updated successfully"
},
status=status.HTTP_200_OK
)

View File

@@ -1,16 +1,18 @@
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django_core.mixins import BaseViewSetMixin from django_core.mixins import BaseViewSetMixin
from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework import DjangoFilterBackend
from drf_spectacular.utils import OpenApiResponse
from drf_spectacular.utils import extend_schema from drf_spectacular.utils import extend_schema
from rest_framework import status
from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.filters import OrderingFilter, SearchFilter
from rest_framework.pagination import PageNumberPagination from rest_framework.generics import GenericAPIView, ListAPIView
from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework import status from rest_framework.viewsets import ModelViewSet
from core.apps.accounts.choices import RoleChoice
from core.apps.evaluation.choices.request import RequestStatus
from core.apps.evaluation.filters.request import EvaluationrequestFilter from core.apps.evaluation.filters.request import EvaluationrequestFilter
from core.apps.evaluation.models import EvaluationrequestModel from core.apps.evaluation.models import EvaluationrequestModel
from core.apps.evaluation.serializers.request import ( from core.apps.evaluation.serializers.request import (
@@ -19,9 +21,6 @@ from core.apps.evaluation.serializers.request import (
RetrieveEvaluationrequestSerializer, RetrieveEvaluationrequestSerializer,
ArchiveEvaluationrequestSerializer, ArchiveEvaluationrequestSerializer,
) )
from core.apps.evaluation.choices.request import RequestStatus
from rest_framework.generics import GenericAPIView
from drf_spectacular.utils import OpenApiResponse
# class RequestPagination(PageNumberPagination): # class RequestPagination(PageNumberPagination):
@@ -85,7 +84,6 @@ class EvaluationrequestView(BaseViewSetMixin, ModelViewSet):
).order_by("-created_at") ).order_by("-created_at")
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet): class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
serializer_class = ListEvaluationrequestSerializer serializer_class = ListEvaluationrequestSerializer
@@ -133,7 +131,8 @@ class AdminEvaluationrequestView(BaseViewSetMixin, ModelViewSet):
} }
def get_queryset(self): def get_queryset(self):
return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights", "form_ownership", "user").order_by("-created_at") return EvaluationrequestModel.objects.select_related("value_determined", "rate_goal", "property_rights",
"form_ownership", "user").order_by("-created_at")
def serializer_context(self): def serializer_context(self):
return self.serializer_class(context={"request": self.request}) return self.serializer_class(context={"request": self.request})
@@ -149,7 +148,6 @@ class EvaluationStatusChange(APIView):
evaluation = get_object_or_404(EvaluationrequestModel, pk=pk) evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
status_value = request.data.get('status') status_value = request.data.get('status')
if not status_value: if not status_value:
return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST) return Response({'detail': 'Status is required'}, status=status.HTTP_400_BAD_REQUEST)
@@ -176,6 +174,7 @@ class EvaluationStatusChange(APIView):
'id': evaluation.pk 'id': evaluation.pk
}) })
@extend_schema(tags=["EvaluationRequest"]) @extend_schema(tags=["EvaluationRequest"])
class ArchiveEvaluationrequestView(GenericAPIView): class ArchiveEvaluationrequestView(GenericAPIView):
permission_classes = [IsAuthenticated] permission_classes = [IsAuthenticated]
@@ -247,4 +246,28 @@ class ArchiveEvaluationrequestView(GenericAPIView):
"message": "Archive status updated successfully" "message": "Archive status updated successfully"
}, },
status=status.HTTP_200_OK status=status.HTTP_200_OK
) )
@extend_schema(tags=["EvaluationRequest"])
class GetArchivedReqEvaluationListAPIView(ListAPIView):
permission_classes = [IsAuthenticated]
def get_queryset(self):
return EvaluationrequestModel.objects.filter(is_archived=True)
@extend_schema(tags=["EvaluationRequest"])
class ArchivedReqEvaluation(APIView):
permission_classes = [IsAuthenticated]
def post(self, request, pk):
req_evaluation = get_object_or_404(EvaluationrequestModel, pk=pk)
req_evaluation.is_archived = request.data["is_archived"]
req_evaluation.save()
return Response({"success": True,
"status": req_evaluation.status,
"id": req_evaluation.pk})

View File

@@ -1,3 +1,4 @@
from datetime import datetime
import grpc import grpc
from google.protobuf.timestamp_pb2 import Timestamp from google.protobuf.timestamp_pb2 import Timestamp
from datetime import datetime from datetime import datetime
@@ -15,13 +16,17 @@ def get_auto_avg_cost(
distance_covered, distance_covered,
color color
): ):
# url = f"{env.str('RPC_IP')}:{env.str('RPC_PORT')}" channel = grpc.insecure_channel("94.230.232.47:50051")
# channel = grpc.insecure_channel(url)
channel = grpc.insecure_channel("192.168.1.120:50051")
stub = auto_pb2_grpc.AutoAvgCostServiceStub(channel) stub = auto_pb2_grpc.AutoAvgCostServiceStub(channel)
ts = Timestamp() ts = Timestamp()
ts.FromDatetime(manufacture_date) if isinstance(manufacture_date, datetime):
dt = manufacture_date
else:
dt = datetime.combine(manufacture_date, datetime.min.time())
ts.FromDatetime(dt)
response = stub.AutoAvgCost(auto_pb2.AutoAvgCostRequest( response = stub.AutoAvgCost(auto_pb2.AutoAvgCostRequest(
brand=brand, brand=brand,
@@ -32,6 +37,7 @@ def get_auto_avg_cost(
distance_covered=distance_covered, distance_covered=distance_covered,
color=color, color=color,
)) ))
print("manufacture_date:", manufacture_date, type(manufacture_date))
return { return {
"avg_cost": response.avg_cost, "avg_cost": response.avg_cost,

View File

@@ -84,7 +84,7 @@ services:
max-file: "5" max-file: "5"
web: web:
image: husanjon/sifatbaho:120 image: husanjon/sifatbaho:127
env_file: env_file:
- .env - .env
environment: environment:
@@ -129,7 +129,7 @@ services:
max-file: "5" max-file: "5"
celery: celery:
image: husanjon/sifatbaho:120 image: husanjon/sifatbaho:127
env_file: env_file:
- .env - .env
environment: environment: