Skip to content

Commit

Permalink
re-implemented invitation endpoint and adjusted timeout values
Browse files Browse the repository at this point in the history
  • Loading branch information
naman108 committed Nov 13, 2023
1 parent de8a262 commit 91f522e
Show file tree
Hide file tree
Showing 11 changed files with 87 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@

?mission?GetMissionCots = FreeTAKServer.components.extended.mission.mission_facade.Mission.get_mission_cots

?mission?GetInvitations = FreeTAKServer.components.extended.mission.mission_facade.Mission.get_invitations

[Mission]
__class = FreeTAKServer.components.extended.mission.mission_facade.Mission
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"type": "object",
"anyOf":
[
{ "$ref": "#/definitions/MissionInvitationList" },
{ "$ref": "#/definitions/MissionInvitationList" }
]
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

from FreeTAKServer.components.extended.mission.configuration.mission_constants import MISSION_INVITATION_LIST
from FreeTAKServer.components.extended.mission.controllers.builders.builder import Builder
from FreeTAKServer.components.extended.mission.controllers.mission_invitation_controller import MissionInvitationController
from FreeTAKServer.components.extended.mission.domain.mission_list_cot_content import MissionListCoTContent
from FreeTAKServer.components.extended.mission.persistence.mission_cot import MissionCoT
from FreeTAKServer.components.core.domain.domain import MissionInfo
from FreeTAKServer.core.util.time_utils import get_dtg
from FreeTAKServer.core.configuration.MainConfig import MainConfig
from FreeTAKServer.components.extended.mission.domain import MissionInvitationList

config = MainConfig.instance()

Expand All @@ -24,7 +24,7 @@ def build_empty_object(self, config_loader, *args, **kwargs):

configuration = config_loader.find_configuration(MISSION_INVITATION_LIST)

self.result = super()._create_model_object(configuration)
self.result = super()._create_model_object(configuration, extended_domain={"MissionInvitationList": MissionInvitationList})

def add_object_data(self, mapped_object = None):
"""adds the data from the mapped object to the result object"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from abc import ABC
from typing import List, TYPE_CHECKING
from FreeTAKServer.components.extended.mission.controllers.builders.builder import Builder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_content_change_builder import MissionContentChangeBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_change_list_builder import MissionChangeListBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_external_data_change_builder import MissionExternalDataChangeBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_invitation_list_builder import MissionInvitationListBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_invitation_notification_builder import MissionInvitationNotificationBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_simple_change_builder import MissionSimpleChangeBuilder
from FreeTAKServer.components.extended.mission.controllers.builders.mission_simple_cot_change_builder import MissionSimpleCoTChangeBuilder
from FreeTAKServer.components.extended.mission.persistence.mission import Mission
from FreeTAKServer.components.extended.mission.persistence.mission_invitation import MissionInvitation
from FreeTAKServer.core.domain.node import Node

from digitalpy.core.main.controller import Controller
from digitalpy.core.zmanager.request import Request
from digitalpy.core.zmanager.response import Response
from digitalpy.core.zmanager.action_mapper import ActionMapper
from digitalpy.core.digipy_configuration.configuration import Configuration
from digitalpy.core.parsing.load_configuration import LoadConfiguration

if TYPE_CHECKING:
from FreeTAKServer.core.enterprise_sync.persistence.sqlalchemy.enterprise_sync_data_object import EnterpriseSyncDataObject

class MissionInvitationListDirector(Controller):
"""direct the building of mission changes"""
def __init__(self, request: Request, response: Response, sync_action_mapper: ActionMapper, configuration: Configuration):
super().__init__(request, response, sync_action_mapper, configuration)

def initialize(self, request, response):
super().initialize(request, response)

def execute(self, method=None):
getattr(self, method)(**self.request.get_values())
return self.response

def construct(self, mission_invitations: List[MissionInvitation], config_loader, *args, **kwargs) -> Node:
"""construct a node from a mapped object"""
mission_invitation_list_builder = MissionInvitationListBuilder(self.request, self.response, self.action_mapper, self.configuration)
mission_invitation_list_builder.initialize(self.request, self.response)
mission_invitation_list_builder.build_empty_object(config_loader, *args, **kwargs)
mission_invitation_list_builder.add_object_data()
mission_invitation_list = mission_invitation_list_builder.get_result()

for mission_invitation in mission_invitations:
#TODO add mission invitation building once we understand the schema
pass

return mission_invitation_list
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from FreeTAKServer.components.extended.mission.controllers.directors.mission_invitation_notification_director import MissionInvitationNotificationDirector
from FreeTAKServer.components.extended.mission.controllers.mission_persistence_controller import MissionPersistenceController
from FreeTAKServer.components.extended.mission.controllers.mission_subscription_controller import MissionSubscriptionController
from FreeTAKServer.components.extended.mission.controllers.directors.mission_invitation_list_director import MissionInvitationListDirector
from FreeTAKServer.core.util.serialization_utils import serialize_to_json
from digitalpy.core.main.controller import Controller
from digitalpy.core.zmanager.request import Request
Expand All @@ -10,6 +11,7 @@

from FreeTAKServer.core.configuration.MainConfig import MainConfig


class MissionInvitationController(Controller):
def __init__(
self,
Expand All @@ -25,20 +27,26 @@ def __init__(
self.invitation_notification_director = MissionInvitationNotificationDirector(
request, response, sync_action_mapper, configuration
)
self.invitation_list_director = MissionInvitationListDirector(
request, response, sync_action_mapper, configuration
)
self.subscription_controller = MissionSubscriptionController(
request, response, sync_action_mapper, configuration
)

def initialize(self, request: Request, response: Response):
super().initialize(request, response)
self.persistence_controller.initialize(request, response)
self.invitation_notification_director.initialize(request, response)
self.invitation_list_director.initialize(request, response)
self.subscription_controller.initialize(request, response)

def get_invitations(self, client_uid: str):
invitations = self.persistence_controller.get_invitations(client_uid)
def get_invitations(self, client_uid: str, config_loader, *args, **kwargs):
invitations = self.persistence_controller.get_client_invitations(client_uid)

for invitation in invitations:
pass
inivtation_model = self.invitation_list_director.construct(invitations, config_loader)

serialized_change_collections = serialize_to_json(invitations, self.request, self.execute_sub_action)
serialized_change_collections = serialize_to_json(inivtation_model, self.request, self.execute_sub_action)

self.response.set_value("mission_changes", serialized_change_collections)
return serialized_change_collections
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,15 @@ def get_subscription(self, mission: Mission, client_uid: str, *args, **kwargs) -
except Exception as ex:
raise ex

def get_client_invitations(self, client_uid: str, *args, **kwargs) -> List[MissionInvitation]:
"""this method is used to get all invitations associated with a client.
"""
try:
subscriptions : List[Subscription] = self.ses.query(Subscription).filter(Subscription.clientUid == client_uid).all() # type: ignore
return [subscription.invitation for subscription in subscriptions if subscription.invitation != None]
except Exception as ex:
raise ex

def get_subscription_id(self, subscription_id: str, *args, **kwargs) -> Subscription:
"""this method is used to get a subscription from the database.
"""
Expand Down
9 changes: 8 additions & 1 deletion FreeTAKServer/components/extended/mission/mission_facade.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from FreeTAKServer.components.extended.mission.controllers.mission_cot_controller import MissionCOTController
from FreeTAKServer.components.extended.mission.controllers.mission_external_data_controller import MissionExternalDataController
from FreeTAKServer.components.extended.mission.controllers.mission_hierarchy_controller import MissionHierarchyController
from FreeTAKServer.components.extended.mission.controllers.mission_invitation_controller import MissionInvitationController
from FreeTAKServer.components.extended.mission.controllers.mission_logs_controller import MissionLogsController
from FreeTAKServer.components.extended.mission.controllers.mission_notification_controller import MissionNotificationController
from FreeTAKServer.components.extended.mission.controllers.mission_persistence_controller import MissionPersistenceController
Expand Down Expand Up @@ -68,10 +69,12 @@ def __init__(
self.change_controller = MissionChangeController(request, response, sync_action_mapper, configuration)
self.notification_controller = MissionNotificationController(request, response, sync_action_mapper, configuration)
self.cot_controller = MissionCOTController(request, response, sync_action_mapper, configuration)
self.invitations_controller = MissionInvitationController(request, response, sync_action_mapper, configuration)
self.injected_values["action_mapper"] = action_mapper

def initialize(self, request, response):
super().initialize(request, response)
self.invitations_controller.initialize(request, response)
self.general_controller.initialize(request, response)
self.persistence_controller.initialize(request, response)
self.subscription_controller.initialize(request, response)
Expand Down Expand Up @@ -223,4 +226,8 @@ def get_mission_cots(self, *args, **kwargs):

@DefaultFacade.public
def send_cot_created_notification(self, *args, **kwargs):
self.notification_controller.send_cot_created_notification(*args, **kwargs)
self.notification_controller.send_cot_created_notification(*args, **kwargs)

@DefaultFacade.public
def get_invitations(self, *args, **kwargs):
self.invitations_controller.get_invitations(*args, **kwargs)
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ def get_invitations():
client_uid = request.args.get("clientUid", None)
if client_uid is None:
return '', 400
out_data = HTTPSTakApiCommunicationController().make_request("GetInvitations", "mission", {"client_uid": client_uid}, None, synchronous=True)
out_data = HTTPSTakApiCommunicationController().make_request("GetInvitations", "mission", {"client_uid": client_uid}, None, synchronous=True).get_value("mission_changes") # type: ignore
return out_data, 200

@page.route('/Marti/api/groups/all')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -325,7 +325,7 @@ def allowed_file(filename):
filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

APPLICATION_PROTOCOL = "xml"
API_REQUEST_TIMEOUT = 5000
API_REQUEST_TIMEOUT = 30

from eventlet import listen, wrap_ssl, wsgi
import ssl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1822,7 +1822,7 @@ def delete_repeated_messages(self):
# this will require changing it from using the API Pipe to use the ZManager instead

APPLICATION_PROTOCOL = "xml"
API_REQUEST_TIMEOUT = 5000
API_REQUEST_TIMEOUT = 30


class RestAPI(DigitalPyService):
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "FreeTAKServer"
version = "0.2.33"
version = "0.2.34"
description = "An open source server for the TAK family of applications."
authors = ["FreeTAKTeam <[email protected]>"]
readme = "README.md"
Expand Down

0 comments on commit 91f522e

Please sign in to comment.