Skip to content

Commit

Permalink
LITE-29732 Add endpoint to retrieve upload shcedule task information
Browse files Browse the repository at this point in the history
  • Loading branch information
jonatrios committed Feb 29, 2024
1 parent e04da57 commit 393af4b
Show file tree
Hide file tree
Showing 11 changed files with 119 additions and 1 deletion.
4 changes: 3 additions & 1 deletion connect_bi_reporter/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
SECONDS_DELAY = 120
# Backoff factor in seconds between Upload tasks creation
SECONDS_BACKOFF_FACTOR = 10
CREATE_UPLOADS_METHOD_NAME = 'create_uploads'
PROCESS_UPLOADS_METHOD_NAME = 'process_upload'
PROCESS_UPLOAD_TAKS_BASE_METHOD_PAYLOAD = {
'method': 'process_upload',
'method': PROCESS_UPLOADS_METHOD_NAME,
'description': (
'This task will download the report from connect'
' and published it in the respective storage.'
Expand Down
9 changes: 9 additions & 0 deletions connect_bi_reporter/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,15 @@ def __init__(self, client: ConnectClient, context: Context, logger: Logger) -> N
def get_schedule_tasks(self):
return get_schedule_tasks(self.client, self.context)

def get_schedule_task_by_method_name(self, method_name: str):
existing_tasks = self.get_schedule_tasks()
task = None
for _task in existing_tasks:
if _task['method'] == method_name:
task = _task
break
return task

def create_schedule_task(
self,
trigger_type: TriggerTypeEnum,
Expand Down
Empty file.
Empty file.
18 changes: 18 additions & 0 deletions connect_bi_reporter/settings/api/schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from typing import Any, Dict

from connect_extension_utils.api.schemas import Events, NonNullSchema


_DictAny = Dict[Any, Any]


class EaasScheduleTaskSchema(NonNullSchema):
id: str
name: str
description: str
method: str
parameter: _DictAny
trigger: _DictAny
environment: _DictAny
events: Events
status: str
37 changes: 37 additions & 0 deletions connect_bi_reporter/settings/api/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@

from logging import Logger

from connect.client import ConnectClient
from connect.eaas.core.decorators import router
from connect.eaas.core.inject.common import get_call_context, get_logger
from connect.eaas.core.inject.models import Context
from connect.eaas.core.inject.synchronous import get_installation_client
from connect_extension_utils.api.errors import Http404
from fastapi import Depends, status

from connect_bi_reporter.constants import CREATE_UPLOADS_METHOD_NAME
from connect_bi_reporter.settings.api.schemas import EaasScheduleTaskSchema
from connect_bi_reporter.scheduler import Scheduler


class SettingsWebAppMixin:

@router.get(
'/settings/schedule-tasks/create-uploads',
summary='Returns the Schedule Task named `create_uploads`',
response_model=EaasScheduleTaskSchema,
status_code=status.HTTP_200_OK,
)
def get_create_upload_task_info(
self,
client: ConnectClient = Depends(get_installation_client),
context: Context = Depends(get_call_context),
logger: Logger = Depends(get_logger),
):
scheduler = Scheduler(client, context, logger)

task = scheduler.get_schedule_task_by_method_name(CREATE_UPLOADS_METHOD_NAME)

if not task:
raise Http404(obj_id=CREATE_UPLOADS_METHOD_NAME)
return EaasScheduleTaskSchema(**task)
2 changes: 2 additions & 0 deletions connect_bi_reporter/webapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

from connect_bi_reporter.credentials.api.views import CredentialsWebAppMixin
from connect_bi_reporter.feeds.api.views import FeedsWebAppMixin
from connect_bi_reporter.settings.api.views import SettingsWebAppMixin
from connect_bi_reporter.uploads.api.views import UploadsWebAppMixin
from connect_bi_reporter.scheduler import genererate_default_recurring_schedule_task

Expand All @@ -33,6 +34,7 @@ class ConnectBiReporterWebApplication(
CredentialsWebAppMixin,
FeedsWebAppMixin,
UploadsWebAppMixin,
SettingsWebAppMixin,
WebApplicationBase,
):

Expand Down
Empty file added tests/settings/__init__.py
Empty file.
Empty file added tests/settings/api/__init__.py
Empty file.
8 changes: 8 additions & 0 deletions tests/settings/api/test_schemas.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import json

from connect_bi_reporter.settings.api.schemas import EaasScheduleTaskSchema


def test_eaas_schema(eaas_schedule_task):
task = EaasScheduleTaskSchema(**eaas_schedule_task)
assert task.json() == json.dumps(eaas_schedule_task)
42 changes: 42 additions & 0 deletions tests/settings/api/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
def test_get_create_upload_task(
api_client,
mocker,
eaas_schedule_task,
):
mocker.patch(
'connect_bi_reporter.scheduler.get_schedule_tasks',
return_value=[eaas_schedule_task],
)

response = api_client.get(
'/api/settings/schedule-tasks/create-uploads',
)

assert response.status_code == 200

response_data = response.json()

assert response_data == eaas_schedule_task


def test_get_create_upload_task_not_found(
api_client,
mocker,
):
mocker.patch(
'connect_bi_reporter.scheduler.get_schedule_tasks',
return_value=[],
)

response = api_client.get(
'/api/settings/schedule-tasks/create-uploads',
)

assert response.status_code == 404

response_data = response.json()

assert response_data == {
'error_code': 'NFND_000',
'errors': ['Object `create_uploads` not found.'],
}

0 comments on commit 393af4b

Please sign in to comment.