Skip to content

Commit

Permalink
Merge branch 'fix/unstract-subscription-plugin-fixes' of github.com:Z…
Browse files Browse the repository at this point in the history
…ipstack/unstract into fix/unstract-subscription-plugin-fixes
  • Loading branch information
tahierhussain committed Jan 28, 2025
2 parents 56e2370 + 4280b15 commit 3f60269
Show file tree
Hide file tree
Showing 31 changed files with 237 additions and 223 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ repos:
--settings-path=pyproject.toml,
]
- repo: https://github.com/hadialqattan/pycln
rev: v2.4.0
rev: v2.5.0
hooks:
- id: pycln
args: [--config=pyproject.toml]
Expand Down
3 changes: 2 additions & 1 deletion backend/api_v2/key_helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from api_v2.exceptions import UnauthorizedKey
from api_v2.models import APIDeployment, APIKey
from api_v2.serializers import APIKeySerializer
from django.core.exceptions import ValidationError
from pipeline_v2.models import Pipeline
from rest_framework.request import Request
from workflow_manager.workflow_v2.workflow_helper import WorkflowHelper
Expand All @@ -29,7 +30,7 @@ def validate_api_key(
api_key_instance: APIKey = APIKey.objects.get(api_key=api_key)
if not KeyHelper.has_access(api_key_instance, instance):
raise UnauthorizedKey()
except APIKey.DoesNotExist:
except (APIKey.DoesNotExist, ValidationError):
raise UnauthorizedKey()

@staticmethod
Expand Down
3 changes: 0 additions & 3 deletions backend/backend/public_urls_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
from django.conf.urls.static import static
from django.urls import include, path

path_prefix = settings.PATH_PREFIX
api_path_prefix = settings.API_DEPLOYMENT_PATH_PREFIX

urlpatterns = [
path("", include("account_v2.urls")),
# Connector OAuth
Expand Down
7 changes: 6 additions & 1 deletion backend/backend/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ def get_required_setting(
"middleware.cache_control.CacheControlMiddleware",
]

TENANT_SUBFOLDER_PREFIX = f"/{PATH_PREFIX}/unstract"
TENANT_SUBFOLDER_PREFIX = f"{PATH_PREFIX}/unstract"
SHOW_PUBLIC_IF_NO_TENANT_FOUND = True

TEMPLATES = [
Expand Down Expand Up @@ -435,6 +435,11 @@ def get_required_setting(
"django_filters.rest_framework.DjangoFilterBackend",
"rest_framework.filters.OrderingFilter",
],
# For API versioning
"DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
"DEFAULT_VERSION": "v1",
"ALLOWED_VERSIONS": ["v1"],
"VERSION_PARAM": "version",
}

# These paths will work without authentication
Expand Down
6 changes: 0 additions & 6 deletions backend/file_management/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,3 @@ class FileInformationKey:
FILE_UPLOAD_MAX_SIZE = 100 * 1024 * 1024
FILE_UPLOAD_ALLOWED_EXT = ["pdf"]
FILE_UPLOAD_ALLOWED_MIME = ["application/pdf"]


class FileViewTypes:
ORIGINAL = "ORIGINAL"
EXTRACT = "EXTRACT"
SUMMARIZE = "SUMMARIZE"
7 changes: 3 additions & 4 deletions backend/middleware/organization_middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@

class OrganizationMiddleware(MiddlewareMixin):
def process_request(self, request):
tenant_prefix = settings.TENANT_SUBFOLDER_PREFIX.rstrip("/") + "/"
pattern = rf"^{tenant_prefix}(?P<org_id>[^/]+)/"
pattern = r"^/api/(?P<version>v[12])/unstract/(?P<org_id>[^/]+)/"

# Check if the URL matches the pattern with organization ID
match = re.match(pattern, request.path)
Expand All @@ -17,12 +16,12 @@ def process_request(self, request):
re.match(path, request.path)
for path in settings.ORGANIZATION_MIDDLEWARE_WHITELISTED_PATHS
):
request.path_info = "/" + request.path_info
return

org_id = match.group("org_id")
version = match.group("version")
request.organization_id = org_id
new_path = re.sub(pattern, "/" + tenant_prefix, request.path_info)
new_path = re.sub(pattern, f"/api/{version}/unstract/", request.path_info)
request.path_info = new_path
else:
request.organization_id = None
68 changes: 34 additions & 34 deletions backend/pdm.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ dependencies = [
"python-socketio==5.9.0", # For log_events
"social-auth-app-django==5.3.0", # For OAuth
"social-auth-core==4.4.2", # For OAuth
"unstract-sdk~=0.56.0rc3",
"unstract-sdk~=0.56.0rc4",
# ! IMPORTANT!
# Indirect local dependencies usually need to be added in their own projects
# as: https://pdm-project.org/latest/usage/dependency/#local-dependencies.
Expand Down
4 changes: 2 additions & 2 deletions backend/sample.env
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,9 @@ REMOTE_PROMPT_STUDIO_FILE_PATH=

# Structure Tool Image (Runs prompt studio exported tools)
# https://hub.docker.com/r/unstract/tool-structure
STRUCTURE_TOOL_IMAGE_URL="docker:unstract/tool-structure:0.0.59"
STRUCTURE_TOOL_IMAGE_URL="docker:unstract/tool-structure:0.0.60"
STRUCTURE_TOOL_IMAGE_NAME="unstract/tool-structure"
STRUCTURE_TOOL_IMAGE_TAG="0.0.59"
STRUCTURE_TOOL_IMAGE_TAG="0.0.60"

# Feature Flags
EVALUATION_SERVER_IP=unstract-flipt
Expand Down
7 changes: 4 additions & 3 deletions backend/workflow_manager/endpoint_v2/source.py
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,7 @@ def publish_input_output_list_file_logs(
return None

folders_list = "\n".join(f"- `{folder.strip()}`" for folder in folders)
input_log = f"##Folders to process:\n\n{folders_list}\n\n"
input_log = f"## Folders to process:\n\n{folders_list}\n\n"
self.execution_service.publish_update_log(
state=LogState.INPUT_UPDATE, message=input_log
)
Expand All @@ -256,9 +256,10 @@ def publish_input_output_list_file_logs(
def publish_input_file_content(self, input_file_path: str, input_text: str) -> None:
if not self.execution_service:
return None
output_log_message = f"##Input text:\n\n```text\n{input_text}\n```\n\n"
output_log_message = f"## Input text:\n\n```text\n{input_text}\n```\n\n"
input_log_message = (
"##Input file:\n\n```text\n" f"{os.path.basename(input_file_path)}\n```\n\n"
"## Input file:\n\n```text\n"
f"{os.path.basename(input_file_path)}\n```\n\n"
)
self.execution_service.publish_update_log(
state=LogState.INPUT_UPDATE, message=input_log_message
Expand Down
2 changes: 1 addition & 1 deletion backend/workflow_manager/urls.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from django.urls import include, path
from workflow_manager.endpoint_v2 import urls as endpoint_urls
from workflow_manager.workflow_v2 import urls as workflow_urls
from workflow_manager.workflow_v2.urls import workflow as workflow_urls

urlpatterns = [
path("endpoint/", include(endpoint_urls)),
Expand Down
21 changes: 17 additions & 4 deletions backend/workflow_manager/workflow_v2/execution_log_view.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import logging

from django.db.models.query import QuerySet
from permissions.permission import IsOwner
from rest_framework import viewsets
from rest_framework.versioning import URLPathVersioning
Expand All @@ -16,12 +17,24 @@ class WorkflowExecutionLogViewSet(viewsets.ModelViewSet):
serializer_class = WorkflowExecutionLogSerializer
pagination_class = CustomPagination

EVENT_TIME_FELID_ASC = "event_time"
EVENT_TIME_FIELD_ASC = "event_time"

def get_queryset(self):
def get_queryset(self) -> QuerySet:
# Get the execution_id:pk from the URL path
execution_id = self.kwargs.get("pk")
queryset = ExecutionLog.objects.filter(execution_id=execution_id).order_by(
self.EVENT_TIME_FELID_ASC
filter_param = {"execution_id": execution_id}

file_execution_id = self.request.query_params.get("file_execution_id")
if file_execution_id and file_execution_id == "null":
filter_param["file_execution_id"] = None
elif file_execution_id:
filter_param["file_execution_id"] = file_execution_id

log_level = self.request.query_params.get("log_level")
if log_level:
filter_param["data__level"] = log_level.upper()

queryset = ExecutionLog.objects.filter(**filter_param).order_by(
self.EVENT_TIME_FIELD_ASC
)
return queryset
Empty file.
Loading

0 comments on commit 3f60269

Please sign in to comment.