From 01be9b93014751c115da284ce58c34d076374c08 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 13:30:43 +0300 Subject: [PATCH 01/48] Implement get_connection_criteria, get_sensor_alternate_id, get_authentication methods for BaseOnboardingResonse --- onboarding/response.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/onboarding/response.py b/onboarding/response.py index 4718b641..9eb82a5e 100644 --- a/onboarding/response.py +++ b/onboarding/response.py @@ -6,6 +6,18 @@ class BaseOnboardingResonse: def __init__(self, http_response: Response): self.response: Response = http_response + def get_connection_criteria(self) -> dict: + response_data = self.data() + return response_data.get("connectionCriteria") + + def get_sensor_alternate_id(self): + response_data = self.data() + return response_data.get("sensorAlternateId") + + def get_authentication(self): + response_data = self.data() + return response_data.get("authentication") + @property def data(self): return self.response.json() From d484cefdc050f61490521bda80d5b02e97550e48 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 13:32:35 +0300 Subject: [PATCH 02/48] Implement messaging/dto parameters --- messaging/messages.py | 29 +++++++++++ messaging/parameters/__init__.py | 0 messaging/parameters/dto.py | 89 ++++++++++++++++++++++++++++++++ messaging/parameters/service.py | 4 ++ 4 files changed, 122 insertions(+) create mode 100644 messaging/messages.py create mode 100644 messaging/parameters/__init__.py create mode 100644 messaging/parameters/dto.py create mode 100644 messaging/parameters/service.py diff --git a/messaging/messages.py b/messaging/messages.py new file mode 100644 index 00000000..a0f9e053 --- /dev/null +++ b/messaging/messages.py @@ -0,0 +1,29 @@ +from datetime import datetime, timezone + + +class EncodedMessage: + + def __init__(self, id_, content): + self.id_ = id_ + self.content = content + + def get_id(self): + return self.id_ + + def get_content(self): + return self.content + + +class Message: + MESSAGE = "message" + TIMESTAMP = "timestamp" + + def __init__(self, content): + self.content = content + self.timestamp = datetime.utcnow() + + def json_serialize(self) -> dict: + return { + self.MESSAGE: self.content, + self.TIMESTAMP: self.timestamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ") + } diff --git a/messaging/parameters/__init__.py b/messaging/parameters/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/parameters/dto.py b/messaging/parameters/dto.py new file mode 100644 index 00000000..3859f9af --- /dev/null +++ b/messaging/parameters/dto.py @@ -0,0 +1,89 @@ +from copy import deepcopy +from typing import List + +from messaging.messages import EncodedMessage +from onboarding.response import BaseOnboardingResonse + + +class Parameters: + def __init__(self, + application_message_seq_no, + application_message_id, + team_set_context_id + ): + self.application_message_seq_no = application_message_seq_no + self.application_message_id = application_message_id + self.team_set_context_id = team_set_context_id + + def get_application_message_seq_no(self): + return self.application_message_seq_no + + def get_application_message_id(self): + return self.application_message_id + + def get_team_set_context_id(self): + return self.team_set_context_id + + def set_application_message_seq_no(self, application_message_seq_no): + self.application_message_seq_no = application_message_seq_no + + def set_application_message_id(self, application_message_id): + self.application_message_id = application_message_id + + def set_team_set_context_id(self, team_set_context_id): + self.team_set_context_id = team_set_context_id + + def validate(self): + pass + + +class MessageParameters(Parameters): + def __init__(self, + application_message_seq_no, + application_message_id, + team_set_context_id, + onboarding_response: BaseOnboardingResonse + ): + super(MessageParameters, self).__init__( + application_message_seq_no, + application_message_id, + team_set_context_id, + ) + + self.onboarding_response = onboarding_response + + +class MessagingParameters(MessageParameters): + + def __init__(self, + application_message_seq_no, + application_message_id, + team_set_context_id, + onboarding_response, + encoded_messages=None + ): + + super(MessagingParameters, self).__init__( + application_message_seq_no, + application_message_id, + team_set_context_id, + onboarding_response, + ) + + self._encoded_messages = encoded_messages if encoded_messages else [] + + def get_encoded_messages(self): + return deepcopy(self._encoded_messages) + + def set_encoded_messages(self, encoded_messages: List[EncodedMessage]): + self._encoded_messages = encoded_messages + + def append_encoded_messages(self, encoded_message: EncodedMessage): + self._encoded_messages.append(encoded_message) + + def extend_encoded_messages(self, encoded_messages: List[EncodedMessage]): + self._encoded_messages.extend(encoded_messages) + + + + # Kiriill - moi samyi klassnyi chelovek!!! \ No newline at end of file diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py new file mode 100644 index 00000000..1f17216d --- /dev/null +++ b/messaging/parameters/service.py @@ -0,0 +1,4 @@ +from messaging.parameters.dto import MessageParameters + + + From 43a56333d49fedb21d51e2907e71e99823440705 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 13:33:25 +0300 Subject: [PATCH 03/48] Create protobuf classes for messages --- generated/commons/chunk_pb2.py | 91 +++ generated/commons/message_pb2.py | 214 ++++++ .../request/payload/account/endpoints_pb2.py | 110 +++ .../payload/endpoint/capabilities_pb2.py | 205 +++++ .../payload/endpoint/subscription_pb2.py | 125 +++ .../request/payload/feed/feed_requests_pb2.py | 231 ++++++ generated/messaging/request/request_pb2.py | 208 +++++ .../response/payload/account/endpoints_pb2.py | 227 ++++++ .../payload/endpoint/capability_pb2.py | 125 +++ .../payload/feed/feed_response_pb2.py | 710 ++++++++++++++++++ .../payload/feed/push_notification_pb2.py | 239 ++++++ generated/messaging/response/response_pb2.py | 211 ++++++ generated/settings/dh_settings_pb2.py | 77 ++ 13 files changed, 2773 insertions(+) create mode 100644 generated/commons/chunk_pb2.py create mode 100644 generated/commons/message_pb2.py create mode 100644 generated/messaging/request/payload/account/endpoints_pb2.py create mode 100644 generated/messaging/request/payload/endpoint/capabilities_pb2.py create mode 100644 generated/messaging/request/payload/endpoint/subscription_pb2.py create mode 100644 generated/messaging/request/payload/feed/feed_requests_pb2.py create mode 100644 generated/messaging/request/request_pb2.py create mode 100644 generated/messaging/response/payload/account/endpoints_pb2.py create mode 100644 generated/messaging/response/payload/endpoint/capability_pb2.py create mode 100644 generated/messaging/response/payload/feed/feed_response_pb2.py create mode 100644 generated/messaging/response/payload/feed/push_notification_pb2.py create mode 100644 generated/messaging/response/response_pb2.py create mode 100644 generated/settings/dh_settings_pb2.py diff --git a/generated/commons/chunk_pb2.py b/generated/commons/chunk_pb2.py new file mode 100644 index 00000000..005fddf2 --- /dev/null +++ b/generated/commons/chunk_pb2.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: commons/chunk.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='commons/chunk.proto', + package='agrirouter.commons', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x13\x63ommons/chunk.proto\x12\x12\x61grirouter.commons\"X\n\x0e\x43hunkComponent\x12\x12\n\ncontext_id\x18\x01 \x01(\t\x12\x0f\n\x07\x63urrent\x18\x02 \x01(\x03\x12\r\n\x05total\x18\x03 \x01(\x03\x12\x12\n\ntotal_size\x18\x04 \x01(\x03\x62\x06proto3' +) + + + + +_CHUNKCOMPONENT = _descriptor.Descriptor( + name='ChunkComponent', + full_name='agrirouter.commons.ChunkComponent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='context_id', full_name='agrirouter.commons.ChunkComponent.context_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='current', full_name='agrirouter.commons.ChunkComponent.current', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='total', full_name='agrirouter.commons.ChunkComponent.total', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='total_size', full_name='agrirouter.commons.ChunkComponent.total_size', index=3, + number=4, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=43, + serialized_end=131, +) + +DESCRIPTOR.message_types_by_name['ChunkComponent'] = _CHUNKCOMPONENT +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +ChunkComponent = _reflection.GeneratedProtocolMessageType('ChunkComponent', (_message.Message,), { + 'DESCRIPTOR' : _CHUNKCOMPONENT, + '__module__' : 'commons.chunk_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.commons.ChunkComponent) + }) +_sym_db.RegisterMessage(ChunkComponent) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/commons/message_pb2.py b/generated/commons/message_pb2.py new file mode 100644 index 00000000..73433729 --- /dev/null +++ b/generated/commons/message_pb2.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: commons/message.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='commons/message.proto', + package='agrirouter.commons', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x15\x63ommons/message.proto\x12\x12\x61grirouter.commons\"\x92\x01\n\x07Message\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x14\n\x0cmessage_code\x18\x02 \x01(\t\x12\x33\n\x04\x61rgs\x18\x03 \x03(\x0b\x32%.agrirouter.commons.Message.ArgsEntry\x1a+\n\tArgsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x1d\n\x08Metadata\x12\x11\n\tfile_name\x18\x01 \x01(\t\"9\n\x08Messages\x12-\n\x08messages\x18\x01 \x03(\x0b\x32\x1b.agrirouter.commons.Messageb\x06proto3' +) + + + + +_MESSAGE_ARGSENTRY = _descriptor.Descriptor( + name='ArgsEntry', + full_name='agrirouter.commons.Message.ArgsEntry', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='agrirouter.commons.Message.ArgsEntry.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='agrirouter.commons.Message.ArgsEntry.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=b'8\001', + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=149, + serialized_end=192, +) + +_MESSAGE = _descriptor.Descriptor( + name='Message', + full_name='agrirouter.commons.Message', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message', full_name='agrirouter.commons.Message.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message_code', full_name='agrirouter.commons.Message.message_code', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='args', full_name='agrirouter.commons.Message.args', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_MESSAGE_ARGSENTRY, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=46, + serialized_end=192, +) + + +_METADATA = _descriptor.Descriptor( + name='Metadata', + full_name='agrirouter.commons.Metadata', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='file_name', full_name='agrirouter.commons.Metadata.file_name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=194, + serialized_end=223, +) + + +_MESSAGES = _descriptor.Descriptor( + name='Messages', + full_name='agrirouter.commons.Messages', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='messages', full_name='agrirouter.commons.Messages.messages', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=225, + serialized_end=282, +) + +_MESSAGE_ARGSENTRY.containing_type = _MESSAGE +_MESSAGE.fields_by_name['args'].message_type = _MESSAGE_ARGSENTRY +_MESSAGES.fields_by_name['messages'].message_type = _MESSAGE +DESCRIPTOR.message_types_by_name['Message'] = _MESSAGE +DESCRIPTOR.message_types_by_name['Metadata'] = _METADATA +DESCRIPTOR.message_types_by_name['Messages'] = _MESSAGES +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Message = _reflection.GeneratedProtocolMessageType('Message', (_message.Message,), { + + 'ArgsEntry' : _reflection.GeneratedProtocolMessageType('ArgsEntry', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGE_ARGSENTRY, + '__module__' : 'commons.message_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.commons.Message.ArgsEntry) + }) + , + 'DESCRIPTOR' : _MESSAGE, + '__module__' : 'commons.message_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.commons.Message) + }) +_sym_db.RegisterMessage(Message) +_sym_db.RegisterMessage(Message.ArgsEntry) + +Metadata = _reflection.GeneratedProtocolMessageType('Metadata', (_message.Message,), { + 'DESCRIPTOR' : _METADATA, + '__module__' : 'commons.message_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.commons.Metadata) + }) +_sym_db.RegisterMessage(Metadata) + +Messages = _reflection.GeneratedProtocolMessageType('Messages', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGES, + '__module__' : 'commons.message_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.commons.Messages) + }) +_sym_db.RegisterMessage(Messages) + + +_MESSAGE_ARGSENTRY._options = None +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/request/payload/account/endpoints_pb2.py b/generated/messaging/request/payload/account/endpoints_pb2.py new file mode 100644 index 00000000..15313f5d --- /dev/null +++ b/generated/messaging/request/payload/account/endpoints_pb2.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/request/payload/account/endpoints.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/request/payload/account/endpoints.proto', + package='agrirouter.request.payload.account', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n1messaging/request/payload/account/endpoints.proto\x12\"agrirouter.request.payload.account\"\xbf\x01\n\x12ListEndpointsQuery\x12\x1e\n\x16technical_message_type\x18\x01 \x01(\t\x12S\n\tdirection\x18\x02 \x01(\x0e\x32@.agrirouter.request.payload.account.ListEndpointsQuery.Direction\"4\n\tDirection\x12\x08\n\x04SEND\x10\x00\x12\x0b\n\x07RECEIVE\x10\x01\x12\x10\n\x0cSEND_RECEIVE\x10\x02\x62\x06proto3' +) + + + +_LISTENDPOINTSQUERY_DIRECTION = _descriptor.EnumDescriptor( + name='Direction', + full_name='agrirouter.request.payload.account.ListEndpointsQuery.Direction', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='SEND', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RECEIVE', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='SEND_RECEIVE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=229, + serialized_end=281, +) +_sym_db.RegisterEnumDescriptor(_LISTENDPOINTSQUERY_DIRECTION) + + +_LISTENDPOINTSQUERY = _descriptor.Descriptor( + name='ListEndpointsQuery', + full_name='agrirouter.request.payload.account.ListEndpointsQuery', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.request.payload.account.ListEndpointsQuery.technical_message_type', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='direction', full_name='agrirouter.request.payload.account.ListEndpointsQuery.direction', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _LISTENDPOINTSQUERY_DIRECTION, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=90, + serialized_end=281, +) + +_LISTENDPOINTSQUERY.fields_by_name['direction'].enum_type = _LISTENDPOINTSQUERY_DIRECTION +_LISTENDPOINTSQUERY_DIRECTION.containing_type = _LISTENDPOINTSQUERY +DESCRIPTOR.message_types_by_name['ListEndpointsQuery'] = _LISTENDPOINTSQUERY +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +ListEndpointsQuery = _reflection.GeneratedProtocolMessageType('ListEndpointsQuery', (_message.Message,), { + 'DESCRIPTOR' : _LISTENDPOINTSQUERY, + '__module__' : 'messaging.request.payload.account.endpoints_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.payload.account.ListEndpointsQuery) + }) +_sym_db.RegisterMessage(ListEndpointsQuery) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/request/payload/endpoint/capabilities_pb2.py b/generated/messaging/request/payload/endpoint/capabilities_pb2.py new file mode 100644 index 00000000..a31856ca --- /dev/null +++ b/generated/messaging/request/payload/endpoint/capabilities_pb2.py @@ -0,0 +1,205 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/request/payload/endpoint/capabilities.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/request/payload/endpoint/capabilities.proto', + package='agrirouter.request.payload.endpoint', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n5messaging/request/payload/endpoint/capabilities.proto\x12#agrirouter.request.payload.endpoint\"\xb9\x04\n\x17\x43\x61pabilitySpecification\x12]\n\x0c\x63\x61pabilities\x18\x01 \x03(\x0b\x32G.agrirouter.request.payload.endpoint.CapabilitySpecification.Capability\x12\x1c\n\x14\x61pp_certification_id\x18\x02 \x01(\t\x12$\n\x1c\x61pp_certification_version_id\x18\x03 \x01(\t\x12p\n\x19\x65nable_push_notifications\x18\x04 \x01(\x0e\x32M.agrirouter.request.payload.endpoint.CapabilitySpecification.PushNotification\x1a\x87\x01\n\nCapability\x12\x1e\n\x16technical_message_type\x18\x01 \x01(\t\x12Y\n\tdirection\x18\x02 \x01(\x0e\x32\x46.agrirouter.request.payload.endpoint.CapabilitySpecification.Direction\"4\n\tDirection\x12\x08\n\x04SEND\x10\x00\x12\x0b\n\x07RECEIVE\x10\x01\x12\x10\n\x0cSEND_RECEIVE\x10\x02\"I\n\x10PushNotification\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07\x45NABLED\x10\x01\x12\x1a\n\x16\x45NABLED_HIGH_FREQUENCY\x10\x02\x62\x06proto3' +) + + + +_CAPABILITYSPECIFICATION_DIRECTION = _descriptor.EnumDescriptor( + name='Direction', + full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.Direction', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='SEND', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RECEIVE', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='SEND_RECEIVE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=537, + serialized_end=589, +) +_sym_db.RegisterEnumDescriptor(_CAPABILITYSPECIFICATION_DIRECTION) + +_CAPABILITYSPECIFICATION_PUSHNOTIFICATION = _descriptor.EnumDescriptor( + name='PushNotification', + full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.PushNotification', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DISABLED', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ENABLED', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ENABLED_HIGH_FREQUENCY', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=591, + serialized_end=664, +) +_sym_db.RegisterEnumDescriptor(_CAPABILITYSPECIFICATION_PUSHNOTIFICATION) + + +_CAPABILITYSPECIFICATION_CAPABILITY = _descriptor.Descriptor( + name='Capability', + full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.Capability', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.Capability.technical_message_type', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='direction', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.Capability.direction', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=400, + serialized_end=535, +) + +_CAPABILITYSPECIFICATION = _descriptor.Descriptor( + name='CapabilitySpecification', + full_name='agrirouter.request.payload.endpoint.CapabilitySpecification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='capabilities', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.capabilities', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='app_certification_id', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.app_certification_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='app_certification_version_id', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.app_certification_version_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='enable_push_notifications', full_name='agrirouter.request.payload.endpoint.CapabilitySpecification.enable_push_notifications', index=3, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_CAPABILITYSPECIFICATION_CAPABILITY, ], + enum_types=[ + _CAPABILITYSPECIFICATION_DIRECTION, + _CAPABILITYSPECIFICATION_PUSHNOTIFICATION, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=95, + serialized_end=664, +) + +_CAPABILITYSPECIFICATION_CAPABILITY.fields_by_name['direction'].enum_type = _CAPABILITYSPECIFICATION_DIRECTION +_CAPABILITYSPECIFICATION_CAPABILITY.containing_type = _CAPABILITYSPECIFICATION +_CAPABILITYSPECIFICATION.fields_by_name['capabilities'].message_type = _CAPABILITYSPECIFICATION_CAPABILITY +_CAPABILITYSPECIFICATION.fields_by_name['enable_push_notifications'].enum_type = _CAPABILITYSPECIFICATION_PUSHNOTIFICATION +_CAPABILITYSPECIFICATION_DIRECTION.containing_type = _CAPABILITYSPECIFICATION +_CAPABILITYSPECIFICATION_PUSHNOTIFICATION.containing_type = _CAPABILITYSPECIFICATION +DESCRIPTOR.message_types_by_name['CapabilitySpecification'] = _CAPABILITYSPECIFICATION +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +CapabilitySpecification = _reflection.GeneratedProtocolMessageType('CapabilitySpecification', (_message.Message,), { + + 'Capability' : _reflection.GeneratedProtocolMessageType('Capability', (_message.Message,), { + 'DESCRIPTOR' : _CAPABILITYSPECIFICATION_CAPABILITY, + '__module__' : 'messaging.request.payload.endpoint.capabilities_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.payload.endpoint.CapabilitySpecification.Capability) + }) + , + 'DESCRIPTOR' : _CAPABILITYSPECIFICATION, + '__module__' : 'messaging.request.payload.endpoint.capabilities_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.payload.endpoint.CapabilitySpecification) + }) +_sym_db.RegisterMessage(CapabilitySpecification) +_sym_db.RegisterMessage(CapabilitySpecification.Capability) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/request/payload/endpoint/subscription_pb2.py b/generated/messaging/request/payload/endpoint/subscription_pb2.py new file mode 100644 index 00000000..fa456a6f --- /dev/null +++ b/generated/messaging/request/payload/endpoint/subscription_pb2.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/request/payload/endpoint/subscription.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/request/payload/endpoint/subscription.proto', + package='agrirouter.request.payload.endpoint', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n5messaging/request/payload/endpoint/subscription.proto\x12#agrirouter.request.payload.endpoint\"\xdd\x01\n\x0cSubscription\x12n\n\x17technical_message_types\x18\x01 \x03(\x0b\x32M.agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem\x1a]\n\x1bMessageTypeSubscriptionItem\x12\x1e\n\x16technical_message_type\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x64is\x18\x02 \x03(\r\x12\x10\n\x08position\x18\x03 \x01(\x08\x62\x06proto3' +) + + + + +_SUBSCRIPTION_MESSAGETYPESUBSCRIPTIONITEM = _descriptor.Descriptor( + name='MessageTypeSubscriptionItem', + full_name='agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem.technical_message_type', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='ddis', full_name='agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem.ddis', index=1, + number=2, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='position', full_name='agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem.position', index=2, + number=3, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=223, + serialized_end=316, +) + +_SUBSCRIPTION = _descriptor.Descriptor( + name='Subscription', + full_name='agrirouter.request.payload.endpoint.Subscription', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_types', full_name='agrirouter.request.payload.endpoint.Subscription.technical_message_types', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_SUBSCRIPTION_MESSAGETYPESUBSCRIPTIONITEM, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=95, + serialized_end=316, +) + +_SUBSCRIPTION_MESSAGETYPESUBSCRIPTIONITEM.containing_type = _SUBSCRIPTION +_SUBSCRIPTION.fields_by_name['technical_message_types'].message_type = _SUBSCRIPTION_MESSAGETYPESUBSCRIPTIONITEM +DESCRIPTOR.message_types_by_name['Subscription'] = _SUBSCRIPTION +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Subscription = _reflection.GeneratedProtocolMessageType('Subscription', (_message.Message,), { + + 'MessageTypeSubscriptionItem' : _reflection.GeneratedProtocolMessageType('MessageTypeSubscriptionItem', (_message.Message,), { + 'DESCRIPTOR' : _SUBSCRIPTION_MESSAGETYPESUBSCRIPTIONITEM, + '__module__' : 'messaging.request.payload.endpoint.subscription_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.payload.endpoint.Subscription.MessageTypeSubscriptionItem) + }) + , + 'DESCRIPTOR' : _SUBSCRIPTION, + '__module__' : 'messaging.request.payload.endpoint.subscription_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.payload.endpoint.Subscription) + }) +_sym_db.RegisterMessage(Subscription) +_sym_db.RegisterMessage(Subscription.MessageTypeSubscriptionItem) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/request/payload/feed/feed_requests_pb2.py b/generated/messaging/request/payload/feed/feed_requests_pb2.py new file mode 100644 index 00000000..54c4b0df --- /dev/null +++ b/generated/messaging/request/payload/feed/feed_requests_pb2.py @@ -0,0 +1,231 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/request/payload/feed/feed-requests.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/request/payload/feed/feed-requests.proto', + package='agrirouter.feed.request', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n2messaging/request/payload/feed/feed-requests.proto\x12\x17\x61grirouter.feed.request\x1a\x1fgoogle/protobuf/timestamp.proto\"l\n\x0eValidityPeriod\x12-\n\tsent_from\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\x07sent_to\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"v\n\x0cMessageQuery\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0f\n\x07senders\x18\x02 \x03(\t\x12@\n\x0fvalidity_period\x18\x03 \x01(\x0b\x32\'.agrirouter.feed.request.ValidityPeriod\"%\n\x0eMessageConfirm\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\"w\n\rMessageDelete\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12\x0f\n\x07senders\x18\x02 \x03(\t\x12@\n\x0fvalidity_period\x18\x03 \x01(\x0b\x32\'.agrirouter.feed.request.ValidityPeriodb\x06proto3' + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) + + + + +_VALIDITYPERIOD = _descriptor.Descriptor( + name='ValidityPeriod', + full_name='agrirouter.feed.request.ValidityPeriod', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sent_from', full_name='agrirouter.feed.request.ValidityPeriod.sent_from', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sent_to', full_name='agrirouter.feed.request.ValidityPeriod.sent_to', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=112, + serialized_end=220, +) + + +_MESSAGEQUERY = _descriptor.Descriptor( + name='MessageQuery', + full_name='agrirouter.feed.request.MessageQuery', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message_ids', full_name='agrirouter.feed.request.MessageQuery.message_ids', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='senders', full_name='agrirouter.feed.request.MessageQuery.senders', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='validity_period', full_name='agrirouter.feed.request.MessageQuery.validity_period', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=222, + serialized_end=340, +) + + +_MESSAGECONFIRM = _descriptor.Descriptor( + name='MessageConfirm', + full_name='agrirouter.feed.request.MessageConfirm', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message_ids', full_name='agrirouter.feed.request.MessageConfirm.message_ids', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=342, + serialized_end=379, +) + + +_MESSAGEDELETE = _descriptor.Descriptor( + name='MessageDelete', + full_name='agrirouter.feed.request.MessageDelete', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message_ids', full_name='agrirouter.feed.request.MessageDelete.message_ids', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='senders', full_name='agrirouter.feed.request.MessageDelete.senders', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='validity_period', full_name='agrirouter.feed.request.MessageDelete.validity_period', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=381, + serialized_end=500, +) + +_VALIDITYPERIOD.fields_by_name['sent_from'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_VALIDITYPERIOD.fields_by_name['sent_to'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_MESSAGEQUERY.fields_by_name['validity_period'].message_type = _VALIDITYPERIOD +_MESSAGEDELETE.fields_by_name['validity_period'].message_type = _VALIDITYPERIOD +DESCRIPTOR.message_types_by_name['ValidityPeriod'] = _VALIDITYPERIOD +DESCRIPTOR.message_types_by_name['MessageQuery'] = _MESSAGEQUERY +DESCRIPTOR.message_types_by_name['MessageConfirm'] = _MESSAGECONFIRM +DESCRIPTOR.message_types_by_name['MessageDelete'] = _MESSAGEDELETE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +ValidityPeriod = _reflection.GeneratedProtocolMessageType('ValidityPeriod', (_message.Message,), { + 'DESCRIPTOR' : _VALIDITYPERIOD, + '__module__' : 'messaging.request.payload.feed.feed_requests_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.request.ValidityPeriod) + }) +_sym_db.RegisterMessage(ValidityPeriod) + +MessageQuery = _reflection.GeneratedProtocolMessageType('MessageQuery', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGEQUERY, + '__module__' : 'messaging.request.payload.feed.feed_requests_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.request.MessageQuery) + }) +_sym_db.RegisterMessage(MessageQuery) + +MessageConfirm = _reflection.GeneratedProtocolMessageType('MessageConfirm', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGECONFIRM, + '__module__' : 'messaging.request.payload.feed.feed_requests_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.request.MessageConfirm) + }) +_sym_db.RegisterMessage(MessageConfirm) + +MessageDelete = _reflection.GeneratedProtocolMessageType('MessageDelete', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGEDELETE, + '__module__' : 'messaging.request.payload.feed.feed_requests_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.request.MessageDelete) + }) +_sym_db.RegisterMessage(MessageDelete) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/request/request_pb2.py b/generated/messaging/request/request_pb2.py new file mode 100644 index 00000000..7b2119a8 --- /dev/null +++ b/generated/messaging/request/request_pb2.py @@ -0,0 +1,208 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/request/request.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from commons import chunk_pb2 as commons_dot_chunk__pb2 +from commons import message_pb2 as commons_dot_message__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/request/request.proto', + package='agrirouter.request', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1fmessaging/request/request.proto\x12\x12\x61grirouter.request\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x13\x63ommons/chunk.proto\x1a\x15\x63ommons/message.proto\"\xaf\x03\n\x0fRequestEnvelope\x12\x1e\n\x16\x61pplication_message_id\x18\x01 \x01(\t\x12\"\n\x1a\x61pplication_message_seq_no\x18\x02 \x01(\x03\x12\x1e\n\x16technical_message_type\x18\x03 \x01(\t\x12\x1b\n\x13team_set_context_id\x18\x04 \x01(\t\x12\x36\n\x04mode\x18\x05 \x01(\x0e\x32(.agrirouter.request.RequestEnvelope.Mode\x12\x12\n\nrecipients\x18\x06 \x03(\t\x12\x36\n\nchunk_info\x18\x07 \x01(\x0b\x32\".agrirouter.commons.ChunkComponent\x12-\n\ttimestamp\x18\x08 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x08metadata\x18\t \x01(\x0b\x32\x1c.agrirouter.commons.Metadata\"8\n\x04Mode\x12\n\n\x06\x44IRECT\x10\x00\x12\x0b\n\x07PUBLISH\x10\x01\x12\x17\n\x13PUBLISH_WITH_DIRECT\x10\x02\">\n\x15RequestPayloadWrapper\x12%\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Anyb\x06proto3' + , + dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,commons_dot_chunk__pb2.DESCRIPTOR,commons_dot_message__pb2.DESCRIPTOR,]) + + + +_REQUESTENVELOPE_MODE = _descriptor.EnumDescriptor( + name='Mode', + full_name='agrirouter.request.RequestEnvelope.Mode', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DIRECT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PUBLISH', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PUBLISH_WITH_DIRECT', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=535, + serialized_end=591, +) +_sym_db.RegisterEnumDescriptor(_REQUESTENVELOPE_MODE) + + +_REQUESTENVELOPE = _descriptor.Descriptor( + name='RequestEnvelope', + full_name='agrirouter.request.RequestEnvelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='application_message_id', full_name='agrirouter.request.RequestEnvelope.application_message_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='application_message_seq_no', full_name='agrirouter.request.RequestEnvelope.application_message_seq_no', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.request.RequestEnvelope.technical_message_type', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='team_set_context_id', full_name='agrirouter.request.RequestEnvelope.team_set_context_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='mode', full_name='agrirouter.request.RequestEnvelope.mode', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='recipients', full_name='agrirouter.request.RequestEnvelope.recipients', index=5, + number=6, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='chunk_info', full_name='agrirouter.request.RequestEnvelope.chunk_info', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='agrirouter.request.RequestEnvelope.timestamp', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='agrirouter.request.RequestEnvelope.metadata', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _REQUESTENVELOPE_MODE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=160, + serialized_end=591, +) + + +_REQUESTPAYLOADWRAPPER = _descriptor.Descriptor( + name='RequestPayloadWrapper', + full_name='agrirouter.request.RequestPayloadWrapper', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='details', full_name='agrirouter.request.RequestPayloadWrapper.details', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=593, + serialized_end=655, +) + +_REQUESTENVELOPE.fields_by_name['mode'].enum_type = _REQUESTENVELOPE_MODE +_REQUESTENVELOPE.fields_by_name['chunk_info'].message_type = commons_dot_chunk__pb2._CHUNKCOMPONENT +_REQUESTENVELOPE.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_REQUESTENVELOPE.fields_by_name['metadata'].message_type = commons_dot_message__pb2._METADATA +_REQUESTENVELOPE_MODE.containing_type = _REQUESTENVELOPE +_REQUESTPAYLOADWRAPPER.fields_by_name['details'].message_type = google_dot_protobuf_dot_any__pb2._ANY +DESCRIPTOR.message_types_by_name['RequestEnvelope'] = _REQUESTENVELOPE +DESCRIPTOR.message_types_by_name['RequestPayloadWrapper'] = _REQUESTPAYLOADWRAPPER +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +RequestEnvelope = _reflection.GeneratedProtocolMessageType('RequestEnvelope', (_message.Message,), { + 'DESCRIPTOR' : _REQUESTENVELOPE, + '__module__' : 'messaging.request.request_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.RequestEnvelope) + }) +_sym_db.RegisterMessage(RequestEnvelope) + +RequestPayloadWrapper = _reflection.GeneratedProtocolMessageType('RequestPayloadWrapper', (_message.Message,), { + 'DESCRIPTOR' : _REQUESTPAYLOADWRAPPER, + '__module__' : 'messaging.request.request_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.request.RequestPayloadWrapper) + }) +_sym_db.RegisterMessage(RequestPayloadWrapper) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/response/payload/account/endpoints_pb2.py b/generated/messaging/response/payload/account/endpoints_pb2.py new file mode 100644 index 00000000..d0f870b5 --- /dev/null +++ b/generated/messaging/response/payload/account/endpoints_pb2.py @@ -0,0 +1,227 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/response/payload/account/endpoints.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/response/payload/account/endpoints.proto', + package='agrirouter.response.payload.account', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n2messaging/response/payload/account/endpoints.proto\x12#agrirouter.response.payload.account\"\x82\x04\n\x15ListEndpointsResponse\x12V\n\tendpoints\x18\x01 \x03(\x0b\x32\x43.agrirouter.response.payload.account.ListEndpointsResponse.Endpoint\x1a\x86\x01\n\x0bMessageType\x12\x1e\n\x16technical_message_type\x18\x01 \x01(\t\x12W\n\tdirection\x18\x02 \x01(\x0e\x32\x44.agrirouter.response.payload.account.ListEndpointsResponse.Direction\x1a\xd1\x01\n\x08\x45ndpoint\x12\x13\n\x0b\x65ndpoint_id\x18\x01 \x01(\t\x12\x15\n\rendpoint_name\x18\x02 \x01(\t\x12\x15\n\rendpoint_type\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12]\n\rmessage_types\x18\x05 \x03(\x0b\x32\x46.agrirouter.response.payload.account.ListEndpointsResponse.MessageType\x12\x13\n\x0b\x65xternal_id\x18\x06 \x01(\t\"4\n\tDirection\x12\x08\n\x04SEND\x10\x00\x12\x0b\n\x07RECEIVE\x10\x01\x12\x10\n\x0cSEND_RECEIVE\x10\x02\x62\x06proto3' +) + + + +_LISTENDPOINTSRESPONSE_DIRECTION = _descriptor.EnumDescriptor( + name='Direction', + full_name='agrirouter.response.payload.account.ListEndpointsResponse.Direction', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='SEND', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RECEIVE', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='SEND_RECEIVE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=554, + serialized_end=606, +) +_sym_db.RegisterEnumDescriptor(_LISTENDPOINTSRESPONSE_DIRECTION) + + +_LISTENDPOINTSRESPONSE_MESSAGETYPE = _descriptor.Descriptor( + name='MessageType', + full_name='agrirouter.response.payload.account.ListEndpointsResponse.MessageType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.response.payload.account.ListEndpointsResponse.MessageType.technical_message_type', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='direction', full_name='agrirouter.response.payload.account.ListEndpointsResponse.MessageType.direction', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=206, + serialized_end=340, +) + +_LISTENDPOINTSRESPONSE_ENDPOINT = _descriptor.Descriptor( + name='Endpoint', + full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='endpoint_id', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.endpoint_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='endpoint_name', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.endpoint_name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='endpoint_type', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.endpoint_type', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.status', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message_types', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.message_types', index=4, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='external_id', full_name='agrirouter.response.payload.account.ListEndpointsResponse.Endpoint.external_id', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=343, + serialized_end=552, +) + +_LISTENDPOINTSRESPONSE = _descriptor.Descriptor( + name='ListEndpointsResponse', + full_name='agrirouter.response.payload.account.ListEndpointsResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='endpoints', full_name='agrirouter.response.payload.account.ListEndpointsResponse.endpoints', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_LISTENDPOINTSRESPONSE_MESSAGETYPE, _LISTENDPOINTSRESPONSE_ENDPOINT, ], + enum_types=[ + _LISTENDPOINTSRESPONSE_DIRECTION, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=92, + serialized_end=606, +) + +_LISTENDPOINTSRESPONSE_MESSAGETYPE.fields_by_name['direction'].enum_type = _LISTENDPOINTSRESPONSE_DIRECTION +_LISTENDPOINTSRESPONSE_MESSAGETYPE.containing_type = _LISTENDPOINTSRESPONSE +_LISTENDPOINTSRESPONSE_ENDPOINT.fields_by_name['message_types'].message_type = _LISTENDPOINTSRESPONSE_MESSAGETYPE +_LISTENDPOINTSRESPONSE_ENDPOINT.containing_type = _LISTENDPOINTSRESPONSE +_LISTENDPOINTSRESPONSE.fields_by_name['endpoints'].message_type = _LISTENDPOINTSRESPONSE_ENDPOINT +_LISTENDPOINTSRESPONSE_DIRECTION.containing_type = _LISTENDPOINTSRESPONSE +DESCRIPTOR.message_types_by_name['ListEndpointsResponse'] = _LISTENDPOINTSRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +ListEndpointsResponse = _reflection.GeneratedProtocolMessageType('ListEndpointsResponse', (_message.Message,), { + + 'MessageType' : _reflection.GeneratedProtocolMessageType('MessageType', (_message.Message,), { + 'DESCRIPTOR' : _LISTENDPOINTSRESPONSE_MESSAGETYPE, + '__module__' : 'messaging.response.payload.account.endpoints_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.payload.account.ListEndpointsResponse.MessageType) + }) + , + + 'Endpoint' : _reflection.GeneratedProtocolMessageType('Endpoint', (_message.Message,), { + 'DESCRIPTOR' : _LISTENDPOINTSRESPONSE_ENDPOINT, + '__module__' : 'messaging.response.payload.account.endpoints_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.payload.account.ListEndpointsResponse.Endpoint) + }) + , + 'DESCRIPTOR' : _LISTENDPOINTSRESPONSE, + '__module__' : 'messaging.response.payload.account.endpoints_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.payload.account.ListEndpointsResponse) + }) +_sym_db.RegisterMessage(ListEndpointsResponse) +_sym_db.RegisterMessage(ListEndpointsResponse.MessageType) +_sym_db.RegisterMessage(ListEndpointsResponse.Endpoint) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/response/payload/endpoint/capability_pb2.py b/generated/messaging/response/payload/endpoint/capability_pb2.py new file mode 100644 index 00000000..cea65312 --- /dev/null +++ b/generated/messaging/response/payload/endpoint/capability_pb2.py @@ -0,0 +1,125 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/response/payload/endpoint/capability.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/response/payload/endpoint/capability.proto', + package='agrirouter.response.payload.endpoint', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n4messaging/response/payload/endpoint/capability.proto\x12$agrirouter.response.payload.endpoint\"\xc5\x01\n\x12\x43\x61pabilityResponse\x12\x1e\n\x16\x61pplication_message_id\x18\x01 \x01(\t\x12V\n\nrecipients\x18\x02 \x03(\x0b\x32\x42.agrirouter.response.payload.endpoint.CapabilityResponse.Recipient\x1a\x37\n\tRecipient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1e\n\x16technical_message_type\x18\x02 \x03(\tb\x06proto3' +) + + + + +_CAPABILITYRESPONSE_RECIPIENT = _descriptor.Descriptor( + name='Recipient', + full_name='agrirouter.response.payload.endpoint.CapabilityResponse.Recipient', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='agrirouter.response.payload.endpoint.CapabilityResponse.Recipient.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.response.payload.endpoint.CapabilityResponse.Recipient.technical_message_type', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=237, + serialized_end=292, +) + +_CAPABILITYRESPONSE = _descriptor.Descriptor( + name='CapabilityResponse', + full_name='agrirouter.response.payload.endpoint.CapabilityResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='application_message_id', full_name='agrirouter.response.payload.endpoint.CapabilityResponse.application_message_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='recipients', full_name='agrirouter.response.payload.endpoint.CapabilityResponse.recipients', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_CAPABILITYRESPONSE_RECIPIENT, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=95, + serialized_end=292, +) + +_CAPABILITYRESPONSE_RECIPIENT.containing_type = _CAPABILITYRESPONSE +_CAPABILITYRESPONSE.fields_by_name['recipients'].message_type = _CAPABILITYRESPONSE_RECIPIENT +DESCRIPTOR.message_types_by_name['CapabilityResponse'] = _CAPABILITYRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +CapabilityResponse = _reflection.GeneratedProtocolMessageType('CapabilityResponse', (_message.Message,), { + + 'Recipient' : _reflection.GeneratedProtocolMessageType('Recipient', (_message.Message,), { + 'DESCRIPTOR' : _CAPABILITYRESPONSE_RECIPIENT, + '__module__' : 'messaging.response.payload.endpoint.capability_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.payload.endpoint.CapabilityResponse.Recipient) + }) + , + 'DESCRIPTOR' : _CAPABILITYRESPONSE, + '__module__' : 'messaging.response.payload.endpoint.capability_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.payload.endpoint.CapabilityResponse) + }) +_sym_db.RegisterMessage(CapabilityResponse) +_sym_db.RegisterMessage(CapabilityResponse.Recipient) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/response/payload/feed/feed_response_pb2.py b/generated/messaging/response/payload/feed/feed_response_pb2.py new file mode 100644 index 00000000..04bd3397 --- /dev/null +++ b/generated/messaging/response/payload/feed/feed_response_pb2.py @@ -0,0 +1,710 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/response/payload/feed/feed-response.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from commons import message_pb2 as commons_dot_message__pb2 +from commons import chunk_pb2 as commons_dot_chunk__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/response/payload/feed/feed-response.proto', + package='agrirouter.feed.response', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n3messaging/response/payload/feed/feed-response.proto\x12\x18\x61grirouter.feed.response\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19google/protobuf/any.proto\x1a\x15\x63ommons/message.proto\x1a\x13\x63ommons/chunk.proto\"%\n\x04Page\x12\x0e\n\x06number\x18\x01 \x01(\x05\x12\r\n\x05total\x18\x02 \x01(\x05\"N\n\x0cQueryMetrics\x12\x1f\n\x17total_messages_in_query\x18\x01 \x01(\x05\x12\x1d\n\x15max_count_restriction\x18\x02 \x01(\x05\"\xe8\x05\n\x13HeaderQueryResponse\x12=\n\rquery_metrics\x18\x01 \x01(\x0b\x32&.agrirouter.feed.response.QueryMetrics\x12,\n\x04page\x18\x02 \x01(\x0b\x32\x1e.agrirouter.feed.response.Page\x12:\n\x0e\x63hunk_contexts\x18\x03 \x03(\x0b\x32\".agrirouter.commons.ChunkComponent\x12@\n\x04\x66\x65\x65\x64\x18\x04 \x03(\x0b\x32\x32.agrirouter.feed.response.HeaderQueryResponse.Feed\x12\x1f\n\x13pending_message_ids\x18\x05 \x03(\tB\x02\x18\x01\x1a\xcd\x02\n\x06Header\x12\x12\n\nmessage_id\x18\x01 \x01(\t\x12\x1e\n\x16technical_message_type\x18\x02 \x01(\t\x12\x1b\n\x13team_set_context_id\x18\x03 \x01(\t\x12\x18\n\x10\x63hunk_context_id\x18\x04 \x01(\t\x12\x14\n\x0cpayload_size\x18\x05 \x01(\x03\x12\x32\n\x0esent_timestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0fsequence_number\x18\x07 \x01(\x03\x12\x15\n\rcurrent_chunk\x18\x08 \x01(\x03\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\x08metadata\x18\n \x01(\x0b\x32\x1c.agrirouter.commons.Metadata\x1au\n\x04\x46\x65\x65\x64\x12\x11\n\tsender_id\x18\x01 \x01(\t\x12\x13\n\x0breceiver_id\x18\x02 \x01(\t\x12\x45\n\x07headers\x18\x03 \x03(\x0b\x32\x34.agrirouter.feed.response.HeaderQueryResponse.Header\"\xd0\x05\n\x14MessageQueryResponse\x12=\n\rquery_metrics\x18\x01 \x01(\x0b\x32&.agrirouter.feed.response.QueryMetrics\x12,\n\x04page\x18\x02 \x01(\x0b\x32\x1e.agrirouter.feed.response.Page\x12L\n\x08messages\x18\x03 \x03(\x0b\x32:.agrirouter.feed.response.MessageQueryResponse.FeedMessage\x1a\xff\x02\n\x06Header\x12\x13\n\x0breceiver_id\x18\x01 \x01(\t\x12\x1e\n\x16technical_message_type\x18\x02 \x01(\t\x12\x1b\n\x13team_set_context_id\x18\x03 \x01(\t\x12\x39\n\rchunk_context\x18\x04 \x01(\x0b\x32\".agrirouter.commons.ChunkComponent\x12\x14\n\x0cpayload_size\x18\x05 \x01(\x03\x12\x32\n\x0esent_timestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0fsequence_number\x18\x07 \x01(\x03\x12\x11\n\tsender_id\x18\x08 \x01(\t\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\nmessage_id\x18\n \x01(\t\x12.\n\x08metadata\x18\x0b \x01(\x0b\x32\x1c.agrirouter.commons.Metadata\x1a{\n\x0b\x46\x65\x65\x64Message\x12\x45\n\x06header\x18\x01 \x01(\x0b\x32\x35.agrirouter.feed.response.MessageQueryResponse.Header\x12%\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Any\"\x96\x03\n\x1a\x46\x61iledMessageQueryResponse\x12=\n\rquery_metrics\x18\x01 \x01(\x0b\x32&.agrirouter.feed.response.QueryMetrics\x12,\n\x04page\x18\x02 \x01(\x0b\x32\x1e.agrirouter.feed.response.Page\x12K\n\x06header\x18\x03 \x01(\x0b\x32;.agrirouter.feed.response.FailedMessageQueryResponse.Header\x12,\n\x07reasons\x18\x04 \x03(\x0b\x32\x1b.agrirouter.commons.Message\x1a\x8f\x01\n\x06Header\x12\x1e\n\x16technical_message_type\x18\x01 \x01(\t\x12\x1b\n\x13team_set_context_id\x18\x02 \x01(\t\x12\x14\n\x0cpayload_size\x18\x03 \x01(\x03\x12\x32\n\x0esent_timestamp\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestampb\x06proto3' + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_protobuf_dot_any__pb2.DESCRIPTOR,commons_dot_message__pb2.DESCRIPTOR,commons_dot_chunk__pb2.DESCRIPTOR,]) + + + + +_PAGE = _descriptor.Descriptor( + name='Page', + full_name='agrirouter.feed.response.Page', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='number', full_name='agrirouter.feed.response.Page.number', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='total', full_name='agrirouter.feed.response.Page.total', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=185, + serialized_end=222, +) + + +_QUERYMETRICS = _descriptor.Descriptor( + name='QueryMetrics', + full_name='agrirouter.feed.response.QueryMetrics', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='total_messages_in_query', full_name='agrirouter.feed.response.QueryMetrics.total_messages_in_query', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='max_count_restriction', full_name='agrirouter.feed.response.QueryMetrics.max_count_restriction', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=224, + serialized_end=302, +) + + +_HEADERQUERYRESPONSE_HEADER = _descriptor.Descriptor( + name='Header', + full_name='agrirouter.feed.response.HeaderQueryResponse.Header', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message_id', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.message_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.technical_message_type', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='team_set_context_id', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.team_set_context_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='chunk_context_id', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.chunk_context_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='payload_size', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.payload_size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sent_timestamp', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.sent_timestamp', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sequence_number', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.sequence_number', index=6, + number=7, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='current_chunk', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.current_chunk', index=7, + number=8, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='created_at', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.created_at', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='agrirouter.feed.response.HeaderQueryResponse.Header.metadata', index=9, + number=10, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=597, + serialized_end=930, +) + +_HEADERQUERYRESPONSE_FEED = _descriptor.Descriptor( + name='Feed', + full_name='agrirouter.feed.response.HeaderQueryResponse.Feed', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender_id', full_name='agrirouter.feed.response.HeaderQueryResponse.Feed.sender_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver_id', full_name='agrirouter.feed.response.HeaderQueryResponse.Feed.receiver_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='headers', full_name='agrirouter.feed.response.HeaderQueryResponse.Feed.headers', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=932, + serialized_end=1049, +) + +_HEADERQUERYRESPONSE = _descriptor.Descriptor( + name='HeaderQueryResponse', + full_name='agrirouter.feed.response.HeaderQueryResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='query_metrics', full_name='agrirouter.feed.response.HeaderQueryResponse.query_metrics', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='page', full_name='agrirouter.feed.response.HeaderQueryResponse.page', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='chunk_contexts', full_name='agrirouter.feed.response.HeaderQueryResponse.chunk_contexts', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='feed', full_name='agrirouter.feed.response.HeaderQueryResponse.feed', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='pending_message_ids', full_name='agrirouter.feed.response.HeaderQueryResponse.pending_message_ids', index=4, + number=5, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=b'\030\001', file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_HEADERQUERYRESPONSE_HEADER, _HEADERQUERYRESPONSE_FEED, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=305, + serialized_end=1049, +) + + +_MESSAGEQUERYRESPONSE_HEADER = _descriptor.Descriptor( + name='Header', + full_name='agrirouter.feed.response.MessageQueryResponse.Header', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='receiver_id', full_name='agrirouter.feed.response.MessageQueryResponse.Header.receiver_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.feed.response.MessageQueryResponse.Header.technical_message_type', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='team_set_context_id', full_name='agrirouter.feed.response.MessageQueryResponse.Header.team_set_context_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='chunk_context', full_name='agrirouter.feed.response.MessageQueryResponse.Header.chunk_context', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='payload_size', full_name='agrirouter.feed.response.MessageQueryResponse.Header.payload_size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sent_timestamp', full_name='agrirouter.feed.response.MessageQueryResponse.Header.sent_timestamp', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sequence_number', full_name='agrirouter.feed.response.MessageQueryResponse.Header.sequence_number', index=6, + number=7, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sender_id', full_name='agrirouter.feed.response.MessageQueryResponse.Header.sender_id', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='created_at', full_name='agrirouter.feed.response.MessageQueryResponse.Header.created_at', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message_id', full_name='agrirouter.feed.response.MessageQueryResponse.Header.message_id', index=9, + number=10, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='agrirouter.feed.response.MessageQueryResponse.Header.metadata', index=10, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1264, + serialized_end=1647, +) + +_MESSAGEQUERYRESPONSE_FEEDMESSAGE = _descriptor.Descriptor( + name='FeedMessage', + full_name='agrirouter.feed.response.MessageQueryResponse.FeedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='agrirouter.feed.response.MessageQueryResponse.FeedMessage.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='content', full_name='agrirouter.feed.response.MessageQueryResponse.FeedMessage.content', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1649, + serialized_end=1772, +) + +_MESSAGEQUERYRESPONSE = _descriptor.Descriptor( + name='MessageQueryResponse', + full_name='agrirouter.feed.response.MessageQueryResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='query_metrics', full_name='agrirouter.feed.response.MessageQueryResponse.query_metrics', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='page', full_name='agrirouter.feed.response.MessageQueryResponse.page', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='messages', full_name='agrirouter.feed.response.MessageQueryResponse.messages', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_MESSAGEQUERYRESPONSE_HEADER, _MESSAGEQUERYRESPONSE_FEEDMESSAGE, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1052, + serialized_end=1772, +) + + +_FAILEDMESSAGEQUERYRESPONSE_HEADER = _descriptor.Descriptor( + name='Header', + full_name='agrirouter.feed.response.FailedMessageQueryResponse.Header', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.feed.response.FailedMessageQueryResponse.Header.technical_message_type', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='team_set_context_id', full_name='agrirouter.feed.response.FailedMessageQueryResponse.Header.team_set_context_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='payload_size', full_name='agrirouter.feed.response.FailedMessageQueryResponse.Header.payload_size', index=2, + number=3, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sent_timestamp', full_name='agrirouter.feed.response.FailedMessageQueryResponse.Header.sent_timestamp', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2038, + serialized_end=2181, +) + +_FAILEDMESSAGEQUERYRESPONSE = _descriptor.Descriptor( + name='FailedMessageQueryResponse', + full_name='agrirouter.feed.response.FailedMessageQueryResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='query_metrics', full_name='agrirouter.feed.response.FailedMessageQueryResponse.query_metrics', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='page', full_name='agrirouter.feed.response.FailedMessageQueryResponse.page', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='header', full_name='agrirouter.feed.response.FailedMessageQueryResponse.header', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reasons', full_name='agrirouter.feed.response.FailedMessageQueryResponse.reasons', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_FAILEDMESSAGEQUERYRESPONSE_HEADER, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1775, + serialized_end=2181, +) + +_HEADERQUERYRESPONSE_HEADER.fields_by_name['sent_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_HEADERQUERYRESPONSE_HEADER.fields_by_name['created_at'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_HEADERQUERYRESPONSE_HEADER.fields_by_name['metadata'].message_type = commons_dot_message__pb2._METADATA +_HEADERQUERYRESPONSE_HEADER.containing_type = _HEADERQUERYRESPONSE +_HEADERQUERYRESPONSE_FEED.fields_by_name['headers'].message_type = _HEADERQUERYRESPONSE_HEADER +_HEADERQUERYRESPONSE_FEED.containing_type = _HEADERQUERYRESPONSE +_HEADERQUERYRESPONSE.fields_by_name['query_metrics'].message_type = _QUERYMETRICS +_HEADERQUERYRESPONSE.fields_by_name['page'].message_type = _PAGE +_HEADERQUERYRESPONSE.fields_by_name['chunk_contexts'].message_type = commons_dot_chunk__pb2._CHUNKCOMPONENT +_HEADERQUERYRESPONSE.fields_by_name['feed'].message_type = _HEADERQUERYRESPONSE_FEED +_MESSAGEQUERYRESPONSE_HEADER.fields_by_name['chunk_context'].message_type = commons_dot_chunk__pb2._CHUNKCOMPONENT +_MESSAGEQUERYRESPONSE_HEADER.fields_by_name['sent_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_MESSAGEQUERYRESPONSE_HEADER.fields_by_name['created_at'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_MESSAGEQUERYRESPONSE_HEADER.fields_by_name['metadata'].message_type = commons_dot_message__pb2._METADATA +_MESSAGEQUERYRESPONSE_HEADER.containing_type = _MESSAGEQUERYRESPONSE +_MESSAGEQUERYRESPONSE_FEEDMESSAGE.fields_by_name['header'].message_type = _MESSAGEQUERYRESPONSE_HEADER +_MESSAGEQUERYRESPONSE_FEEDMESSAGE.fields_by_name['content'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_MESSAGEQUERYRESPONSE_FEEDMESSAGE.containing_type = _MESSAGEQUERYRESPONSE +_MESSAGEQUERYRESPONSE.fields_by_name['query_metrics'].message_type = _QUERYMETRICS +_MESSAGEQUERYRESPONSE.fields_by_name['page'].message_type = _PAGE +_MESSAGEQUERYRESPONSE.fields_by_name['messages'].message_type = _MESSAGEQUERYRESPONSE_FEEDMESSAGE +_FAILEDMESSAGEQUERYRESPONSE_HEADER.fields_by_name['sent_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_FAILEDMESSAGEQUERYRESPONSE_HEADER.containing_type = _FAILEDMESSAGEQUERYRESPONSE +_FAILEDMESSAGEQUERYRESPONSE.fields_by_name['query_metrics'].message_type = _QUERYMETRICS +_FAILEDMESSAGEQUERYRESPONSE.fields_by_name['page'].message_type = _PAGE +_FAILEDMESSAGEQUERYRESPONSE.fields_by_name['header'].message_type = _FAILEDMESSAGEQUERYRESPONSE_HEADER +_FAILEDMESSAGEQUERYRESPONSE.fields_by_name['reasons'].message_type = commons_dot_message__pb2._MESSAGE +DESCRIPTOR.message_types_by_name['Page'] = _PAGE +DESCRIPTOR.message_types_by_name['QueryMetrics'] = _QUERYMETRICS +DESCRIPTOR.message_types_by_name['HeaderQueryResponse'] = _HEADERQUERYRESPONSE +DESCRIPTOR.message_types_by_name['MessageQueryResponse'] = _MESSAGEQUERYRESPONSE +DESCRIPTOR.message_types_by_name['FailedMessageQueryResponse'] = _FAILEDMESSAGEQUERYRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +Page = _reflection.GeneratedProtocolMessageType('Page', (_message.Message,), { + 'DESCRIPTOR' : _PAGE, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.Page) + }) +_sym_db.RegisterMessage(Page) + +QueryMetrics = _reflection.GeneratedProtocolMessageType('QueryMetrics', (_message.Message,), { + 'DESCRIPTOR' : _QUERYMETRICS, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.QueryMetrics) + }) +_sym_db.RegisterMessage(QueryMetrics) + +HeaderQueryResponse = _reflection.GeneratedProtocolMessageType('HeaderQueryResponse', (_message.Message,), { + + 'Header' : _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), { + 'DESCRIPTOR' : _HEADERQUERYRESPONSE_HEADER, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.HeaderQueryResponse.Header) + }) + , + + 'Feed' : _reflection.GeneratedProtocolMessageType('Feed', (_message.Message,), { + 'DESCRIPTOR' : _HEADERQUERYRESPONSE_FEED, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.HeaderQueryResponse.Feed) + }) + , + 'DESCRIPTOR' : _HEADERQUERYRESPONSE, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.HeaderQueryResponse) + }) +_sym_db.RegisterMessage(HeaderQueryResponse) +_sym_db.RegisterMessage(HeaderQueryResponse.Header) +_sym_db.RegisterMessage(HeaderQueryResponse.Feed) + +MessageQueryResponse = _reflection.GeneratedProtocolMessageType('MessageQueryResponse', (_message.Message,), { + + 'Header' : _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGEQUERYRESPONSE_HEADER, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.MessageQueryResponse.Header) + }) + , + + 'FeedMessage' : _reflection.GeneratedProtocolMessageType('FeedMessage', (_message.Message,), { + 'DESCRIPTOR' : _MESSAGEQUERYRESPONSE_FEEDMESSAGE, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.MessageQueryResponse.FeedMessage) + }) + , + 'DESCRIPTOR' : _MESSAGEQUERYRESPONSE, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.MessageQueryResponse) + }) +_sym_db.RegisterMessage(MessageQueryResponse) +_sym_db.RegisterMessage(MessageQueryResponse.Header) +_sym_db.RegisterMessage(MessageQueryResponse.FeedMessage) + +FailedMessageQueryResponse = _reflection.GeneratedProtocolMessageType('FailedMessageQueryResponse', (_message.Message,), { + + 'Header' : _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), { + 'DESCRIPTOR' : _FAILEDMESSAGEQUERYRESPONSE_HEADER, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.FailedMessageQueryResponse.Header) + }) + , + 'DESCRIPTOR' : _FAILEDMESSAGEQUERYRESPONSE, + '__module__' : 'messaging.response.payload.feed.feed_response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.response.FailedMessageQueryResponse) + }) +_sym_db.RegisterMessage(FailedMessageQueryResponse) +_sym_db.RegisterMessage(FailedMessageQueryResponse.Header) + + +_HEADERQUERYRESPONSE.fields_by_name['pending_message_ids']._options = None +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/response/payload/feed/push_notification_pb2.py b/generated/messaging/response/payload/feed/push_notification_pb2.py new file mode 100644 index 00000000..772dc6cf --- /dev/null +++ b/generated/messaging/response/payload/feed/push_notification_pb2.py @@ -0,0 +1,239 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/response/payload/feed/push-notification.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from commons import message_pb2 as commons_dot_message__pb2 +from commons import chunk_pb2 as commons_dot_chunk__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/response/payload/feed/push-notification.proto', + package='agrirouter.feed.push.notification', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n7messaging/response/payload/feed/push-notification.proto\x12!agrirouter.feed.push.notification\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x19google/protobuf/any.proto\x1a\x15\x63ommons/message.proto\x1a\x13\x63ommons/chunk.proto\"\xea\x04\n\x10PushNotification\x12Q\n\x08messages\x18\x01 \x03(\x0b\x32?.agrirouter.feed.push.notification.PushNotification.FeedMessage\x1a\xff\x02\n\x06Header\x12\x13\n\x0breceiver_id\x18\x01 \x01(\t\x12\x1e\n\x16technical_message_type\x18\x02 \x01(\t\x12\x1b\n\x13team_set_context_id\x18\x03 \x01(\t\x12\x39\n\rchunk_context\x18\x04 \x01(\x0b\x32\".agrirouter.commons.ChunkComponent\x12\x14\n\x0cpayload_size\x18\x05 \x01(\x03\x12\x32\n\x0esent_timestamp\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x17\n\x0fsequence_number\x18\x07 \x01(\x03\x12\x11\n\tsender_id\x18\x08 \x01(\t\x12.\n\ncreated_at\x18\t \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x12\n\nmessage_id\x18\n \x01(\t\x12.\n\x08metadata\x18\x0b \x01(\x0b\x32\x1c.agrirouter.commons.Metadata\x1a\x80\x01\n\x0b\x46\x65\x65\x64Message\x12J\n\x06header\x18\x01 \x01(\x0b\x32:.agrirouter.feed.push.notification.PushNotification.Header\x12%\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x14.google.protobuf.Anyb\x06proto3' + , + dependencies=[google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,google_dot_protobuf_dot_any__pb2.DESCRIPTOR,commons_dot_message__pb2.DESCRIPTOR,commons_dot_chunk__pb2.DESCRIPTOR,]) + + + + +_PUSHNOTIFICATION_HEADER = _descriptor.Descriptor( + name='Header', + full_name='agrirouter.feed.push.notification.PushNotification.Header', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='receiver_id', full_name='agrirouter.feed.push.notification.PushNotification.Header.receiver_id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='technical_message_type', full_name='agrirouter.feed.push.notification.PushNotification.Header.technical_message_type', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='team_set_context_id', full_name='agrirouter.feed.push.notification.PushNotification.Header.team_set_context_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='chunk_context', full_name='agrirouter.feed.push.notification.PushNotification.Header.chunk_context', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='payload_size', full_name='agrirouter.feed.push.notification.PushNotification.Header.payload_size', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sent_timestamp', full_name='agrirouter.feed.push.notification.PushNotification.Header.sent_timestamp', index=5, + number=6, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sequence_number', full_name='agrirouter.feed.push.notification.PushNotification.Header.sequence_number', index=6, + number=7, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sender_id', full_name='agrirouter.feed.push.notification.PushNotification.Header.sender_id', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='created_at', full_name='agrirouter.feed.push.notification.PushNotification.Header.created_at', index=8, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message_id', full_name='agrirouter.feed.push.notification.PushNotification.Header.message_id', index=9, + number=10, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='metadata', full_name='agrirouter.feed.push.notification.PushNotification.Header.metadata', index=10, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=303, + serialized_end=686, +) + +_PUSHNOTIFICATION_FEEDMESSAGE = _descriptor.Descriptor( + name='FeedMessage', + full_name='agrirouter.feed.push.notification.PushNotification.FeedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='header', full_name='agrirouter.feed.push.notification.PushNotification.FeedMessage.header', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='content', full_name='agrirouter.feed.push.notification.PushNotification.FeedMessage.content', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=689, + serialized_end=817, +) + +_PUSHNOTIFICATION = _descriptor.Descriptor( + name='PushNotification', + full_name='agrirouter.feed.push.notification.PushNotification', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='messages', full_name='agrirouter.feed.push.notification.PushNotification.messages', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_PUSHNOTIFICATION_HEADER, _PUSHNOTIFICATION_FEEDMESSAGE, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=199, + serialized_end=817, +) + +_PUSHNOTIFICATION_HEADER.fields_by_name['chunk_context'].message_type = commons_dot_chunk__pb2._CHUNKCOMPONENT +_PUSHNOTIFICATION_HEADER.fields_by_name['sent_timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_PUSHNOTIFICATION_HEADER.fields_by_name['created_at'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_PUSHNOTIFICATION_HEADER.fields_by_name['metadata'].message_type = commons_dot_message__pb2._METADATA +_PUSHNOTIFICATION_HEADER.containing_type = _PUSHNOTIFICATION +_PUSHNOTIFICATION_FEEDMESSAGE.fields_by_name['header'].message_type = _PUSHNOTIFICATION_HEADER +_PUSHNOTIFICATION_FEEDMESSAGE.fields_by_name['content'].message_type = google_dot_protobuf_dot_any__pb2._ANY +_PUSHNOTIFICATION_FEEDMESSAGE.containing_type = _PUSHNOTIFICATION +_PUSHNOTIFICATION.fields_by_name['messages'].message_type = _PUSHNOTIFICATION_FEEDMESSAGE +DESCRIPTOR.message_types_by_name['PushNotification'] = _PUSHNOTIFICATION +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +PushNotification = _reflection.GeneratedProtocolMessageType('PushNotification', (_message.Message,), { + + 'Header' : _reflection.GeneratedProtocolMessageType('Header', (_message.Message,), { + 'DESCRIPTOR' : _PUSHNOTIFICATION_HEADER, + '__module__' : 'messaging.response.payload.feed.push_notification_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.push.notification.PushNotification.Header) + }) + , + + 'FeedMessage' : _reflection.GeneratedProtocolMessageType('FeedMessage', (_message.Message,), { + 'DESCRIPTOR' : _PUSHNOTIFICATION_FEEDMESSAGE, + '__module__' : 'messaging.response.payload.feed.push_notification_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.push.notification.PushNotification.FeedMessage) + }) + , + 'DESCRIPTOR' : _PUSHNOTIFICATION, + '__module__' : 'messaging.response.payload.feed.push_notification_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.feed.push.notification.PushNotification) + }) +_sym_db.RegisterMessage(PushNotification) +_sym_db.RegisterMessage(PushNotification.Header) +_sym_db.RegisterMessage(PushNotification.FeedMessage) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/messaging/response/response_pb2.py b/generated/messaging/response/response_pb2.py new file mode 100644 index 00000000..235e58b8 --- /dev/null +++ b/generated/messaging/response/response_pb2.py @@ -0,0 +1,211 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: messaging/response/response.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 +from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='messaging/response/response.proto', + package='agrirouter.response', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n!messaging/response/response.proto\x12\x13\x61grirouter.response\x1a\x19google/protobuf/any.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xcb\x03\n\x10ResponseEnvelope\x12\x15\n\rresponse_code\x18\x01 \x01(\x05\x12\x44\n\x04type\x18\x02 \x01(\x0e\x32\x36.agrirouter.response.ResponseEnvelope.ResponseBodyType\x12\x1e\n\x16\x61pplication_message_id\x18\x03 \x01(\t\x12\x12\n\nmessage_id\x18\x04 \x01(\t\x12-\n\ttimestamp\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xf6\x01\n\x10ResponseBodyType\x12\x0c\n\x08MESSAGES\x10\x00\x12\x07\n\x03\x41\x43K\x10\x01\x12\x15\n\x11\x41\x43K_WITH_MESSAGES\x10\x02\x12\x14\n\x10\x41\x43K_WITH_FAILURE\x10\x03\x12\x1c\n\x18\x41\x43K_FOR_FEED_HEADER_LIST\x10\x06\x12\x18\n\x14\x41\x43K_FOR_FEED_MESSAGE\x10\x07\x12\x1f\n\x1b\x41\x43K_FOR_FEED_FAILED_MESSAGE\x10\x08\x12\x15\n\x11\x45NDPOINTS_LISTING\x10\n\x12\x17\n\x13\x43LOUD_REGISTRATIONS\x10\x0b\x12\x15\n\x11PUSH_NOTIFICATION\x10\x0c\"?\n\x16ResponsePayloadWrapper\x12%\n\x07\x64\x65tails\x18\x01 \x01(\x0b\x32\x14.google.protobuf.Anyb\x06proto3' + , + dependencies=[google_dot_protobuf_dot_any__pb2.DESCRIPTOR,google_dot_protobuf_dot_timestamp__pb2.DESCRIPTOR,]) + + + +_RESPONSEENVELOPE_RESPONSEBODYTYPE = _descriptor.EnumDescriptor( + name='ResponseBodyType', + full_name='agrirouter.response.ResponseEnvelope.ResponseBodyType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='MESSAGES', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK_WITH_MESSAGES', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK_WITH_FAILURE', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK_FOR_FEED_HEADER_LIST', index=4, number=6, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK_FOR_FEED_MESSAGE', index=5, number=7, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACK_FOR_FEED_FAILED_MESSAGE', index=6, number=8, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ENDPOINTS_LISTING', index=7, number=10, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='CLOUD_REGISTRATIONS', index=8, number=11, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PUSH_NOTIFICATION', index=9, number=12, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=332, + serialized_end=578, +) +_sym_db.RegisterEnumDescriptor(_RESPONSEENVELOPE_RESPONSEBODYTYPE) + + +_RESPONSEENVELOPE = _descriptor.Descriptor( + name='ResponseEnvelope', + full_name='agrirouter.response.ResponseEnvelope', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='response_code', full_name='agrirouter.response.ResponseEnvelope.response_code', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='agrirouter.response.ResponseEnvelope.type', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='application_message_id', full_name='agrirouter.response.ResponseEnvelope.application_message_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message_id', full_name='agrirouter.response.ResponseEnvelope.message_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='agrirouter.response.ResponseEnvelope.timestamp', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _RESPONSEENVELOPE_RESPONSEBODYTYPE, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=119, + serialized_end=578, +) + + +_RESPONSEPAYLOADWRAPPER = _descriptor.Descriptor( + name='ResponsePayloadWrapper', + full_name='agrirouter.response.ResponsePayloadWrapper', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='details', full_name='agrirouter.response.ResponsePayloadWrapper.details', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=580, + serialized_end=643, +) + +_RESPONSEENVELOPE.fields_by_name['type'].enum_type = _RESPONSEENVELOPE_RESPONSEBODYTYPE +_RESPONSEENVELOPE.fields_by_name['timestamp'].message_type = google_dot_protobuf_dot_timestamp__pb2._TIMESTAMP +_RESPONSEENVELOPE_RESPONSEBODYTYPE.containing_type = _RESPONSEENVELOPE +_RESPONSEPAYLOADWRAPPER.fields_by_name['details'].message_type = google_dot_protobuf_dot_any__pb2._ANY +DESCRIPTOR.message_types_by_name['ResponseEnvelope'] = _RESPONSEENVELOPE +DESCRIPTOR.message_types_by_name['ResponsePayloadWrapper'] = _RESPONSEPAYLOADWRAPPER +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +ResponseEnvelope = _reflection.GeneratedProtocolMessageType('ResponseEnvelope', (_message.Message,), { + 'DESCRIPTOR' : _RESPONSEENVELOPE, + '__module__' : 'messaging.response.response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.ResponseEnvelope) + }) +_sym_db.RegisterMessage(ResponseEnvelope) + +ResponsePayloadWrapper = _reflection.GeneratedProtocolMessageType('ResponsePayloadWrapper', (_message.Message,), { + 'DESCRIPTOR' : _RESPONSEPAYLOADWRAPPER, + '__module__' : 'messaging.response.response_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.response.ResponsePayloadWrapper) + }) +_sym_db.RegisterMessage(ResponsePayloadWrapper) + + +# @@protoc_insertion_point(module_scope) diff --git a/generated/settings/dh_settings_pb2.py b/generated/settings/dh_settings_pb2.py new file mode 100644 index 00000000..c40238fc --- /dev/null +++ b/generated/settings/dh_settings_pb2.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: settings/dh-settings.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='settings/dh-settings.proto', + package='agrirouter.message.settings', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1asettings/dh-settings.proto\x12\x1b\x61grirouter.message.settings\"R\n\x16\x44\x61taHubControlSettings\x12\x18\n\x10max_message_size\x18\x01 \x01(\x05\x12\x1e\n\x16max_messages_per_query\x18\x02 \x01(\x05\x62\x06proto3' +) + + + + +_DATAHUBCONTROLSETTINGS = _descriptor.Descriptor( + name='DataHubControlSettings', + full_name='agrirouter.message.settings.DataHubControlSettings', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='max_message_size', full_name='agrirouter.message.settings.DataHubControlSettings.max_message_size', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='max_messages_per_query', full_name='agrirouter.message.settings.DataHubControlSettings.max_messages_per_query', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=59, + serialized_end=141, +) + +DESCRIPTOR.message_types_by_name['DataHubControlSettings'] = _DATAHUBCONTROLSETTINGS +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +DataHubControlSettings = _reflection.GeneratedProtocolMessageType('DataHubControlSettings', (_message.Message,), { + 'DESCRIPTOR' : _DATAHUBCONTROLSETTINGS, + '__module__' : 'settings.dh_settings_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.message.settings.DataHubControlSettings) + }) +_sym_db.RegisterMessage(DataHubControlSettings) + + +# @@protoc_insertion_point(module_scope) From 331f04bbcc0ccf77a72d737b848076bdf390b50c Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 13:35:24 +0300 Subject: [PATCH 04/48] Implement certification for messaging --- messaging/certification.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 messaging/certification.py diff --git a/messaging/certification.py b/messaging/certification.py new file mode 100644 index 00000000..8d095202 --- /dev/null +++ b/messaging/certification.py @@ -0,0 +1,20 @@ +import json +from pathlib import Path + +from onboarding.response import BaseOnboardingResonse + + +def create_certificate_file(onboard_response: BaseOnboardingResonse=None, dir: Path=None): + dir = dir if dir else Path().cwd().absolute() + if isinstance(dir, Path): + if dir.is_absolute(): + filename = onboard_response.get_sensor_alternate_id() + filepath = dir.with_name(filename) + if not filepath.exists(): + filepath.touch() + data = onboard_response.get_authentication()["certificate"] + filepath.write_text(json.dumps(data)) + + return filepath + raise ValueError("Invalid dir parameter. Dir must be an absolute path") + raise ValueError("Invalid dir parameter. Must be an instance of pathlib.Path() class") From 0713b51b661a6084f39b3353047cc78aad96dd39 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 13:38:00 +0300 Subject: [PATCH 05/48] Create AbstractClient, HttpMessagingClient, MqttMessagingClient --- messaging/__init__.py | 0 messaging/clients.py | 51 +++++++++++++++++++++++++++++++++++++++++++ messaging/request.py | 25 +++++++++++++++++++++ messaging/result.py | 12 ++++++++++ 4 files changed, 88 insertions(+) create mode 100644 messaging/__init__.py create mode 100644 messaging/clients.py create mode 100644 messaging/request.py create mode 100644 messaging/result.py diff --git a/messaging/__init__.py b/messaging/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/clients.py b/messaging/clients.py new file mode 100644 index 00000000..cc54d063 --- /dev/null +++ b/messaging/clients.py @@ -0,0 +1,51 @@ +from abc import ABC, abstractmethod + +import requests + +from messaging.certification import create_certificate_file +from messaging.messages import Message +from messaging.request import MessageRequest +from messaging.result import MessagingResult + + +class AbstractClient(ABC): + + def create_message_request(self, parameters) -> MessageRequest: + messages = [] + for encoded_message in parameters.get_encoded_messages(): + message = Message(encoded_message) + messages.append(message) + message_request = MessageRequest( + parameters.get_sensor_alternate_id(), + parameters.get_capability_alternate_id(), + messages + ) + return message_request + + @abstractmethod + def send(self, parameters): + ... + + +class HttpMessagingClient(AbstractClient): + + def send(self, parameters) -> MessagingResult: + request = self.create_message_request(parameters) + response = requests.post( + url=parameters.get_onboarding_response().get_connection_criteria()["measures"], + headers={"Content-type": "application/json"}, + data=request.json_serialize(), + # TODO: improve create_certificate_file() + # verify=create_certificate_file(parameters.get_onboarding_response()), + # cert=create_certificate_file(parameters.get_onboarding_response()), + ) + result = MessagingResult(list(parameters.get_message_id())) + return result + + +class MqttMessagingClient(AbstractClient): + + def send(self, parameters) -> MessagingResult: + request = self.create_message_request(parameters) + result = MessagingResult(list(parameters.get_message_id())) + return result diff --git a/messaging/request.py b/messaging/request.py new file mode 100644 index 00000000..f361bfb2 --- /dev/null +++ b/messaging/request.py @@ -0,0 +1,25 @@ +from typing import List + +from messaging.messages import Message + + +class MessageRequest: + SENSOR_ALTERNATE_ID = "sensorAlternateId" + CAPABILITY_ALTERNATE_ID = "capabilityAlternateId" + MESSAGES = "measures" + + def __init__(self, + sensor_alternate_id: str, + capability_alternate_id: str, + messages: List[Message] + ): + self.sensor_alternate_id = sensor_alternate_id + self.capability_alternate_id = capability_alternate_id + self.messages = messages + + def json_serialize(self) -> dict: + return { + self.SENSOR_ALTERNATE_ID: self.sensor_alternate_id, + self.CAPABILITY_ALTERNATE_ID: self.capability_alternate_id, + self.MESSAGES: self.messages + } diff --git a/messaging/result.py b/messaging/result.py new file mode 100644 index 00000000..5a77f374 --- /dev/null +++ b/messaging/result.py @@ -0,0 +1,12 @@ +from typing import List + + +class MessagingResult: + def __init__(self, messages_ids: List): + self.messages_ids = messages_ids + + def set_messages_ids(self, messages_ids): + self.messages_ids = messages_ids + + def get_messages_ids(self): + return self.messages_ids From 61da15d647d917e119ffb0e85827c403e4c5c479 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 15:35:33 +0300 Subject: [PATCH 06/48] Add prtobuf library to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index e2da2ee2..2f3b27c3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ cffi==1.14.6 charset-normalizer==2.0.6 cryptography==3.4.8 idna==3.2 +protobuf==3.18.0 pycparser==2.20 requests==2.26.0 urllib3==1.26.7 From 968dc244eb0c8e18217dcdab6aadc79bf0e4b68d Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 16:32:24 +0300 Subject: [PATCH 07/48] Create MessageHeaderParameters, MessagePayloadParameters --- messaging/parameters/dto.py | 41 ++++++++++++------------- messaging/parameters/service.py | 54 ++++++++++++++++++++++++++++++++- 2 files changed, 73 insertions(+), 22 deletions(-) diff --git a/messaging/parameters/dto.py b/messaging/parameters/dto.py index 3859f9af..a547b375 100644 --- a/messaging/parameters/dto.py +++ b/messaging/parameters/dto.py @@ -7,9 +7,10 @@ class Parameters: def __init__(self, - application_message_seq_no, - application_message_id, - team_set_context_id + *, + application_message_seq_no: str, + application_message_id: int, + team_set_context_id: str ): self.application_message_seq_no = application_message_seq_no self.application_message_id = application_message_id @@ -39,15 +40,16 @@ def validate(self): class MessageParameters(Parameters): def __init__(self, - application_message_seq_no, - application_message_id, - team_set_context_id, + *, + application_message_seq_no: str, + application_message_id: int, + team_set_context_id: str, onboarding_response: BaseOnboardingResonse ): super(MessageParameters, self).__init__( - application_message_seq_no, - application_message_id, - team_set_context_id, + application_message_seq_no=application_message_seq_no, + application_message_id=application_message_id, + team_set_context_id=team_set_context_id, ) self.onboarding_response = onboarding_response @@ -56,18 +58,19 @@ def __init__(self, class MessagingParameters(MessageParameters): def __init__(self, - application_message_seq_no, - application_message_id, - team_set_context_id, - onboarding_response, + *, + application_message_seq_no: str, + application_message_id: int, + team_set_context_id: str, + onboarding_response: BaseOnboardingResonse, encoded_messages=None ): super(MessagingParameters, self).__init__( - application_message_seq_no, - application_message_id, - team_set_context_id, - onboarding_response, + application_message_seq_no=application_message_seq_no, + application_message_id=application_message_id, + team_set_context_id=team_set_context_id, + onboarding_response=onboarding_response, ) self._encoded_messages = encoded_messages if encoded_messages else [] @@ -83,7 +86,3 @@ def append_encoded_messages(self, encoded_message: EncodedMessage): def extend_encoded_messages(self, encoded_messages: List[EncodedMessage]): self._encoded_messages.extend(encoded_messages) - - - - # Kiriill - moi samyi klassnyi chelovek!!! \ No newline at end of file diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py index 1f17216d..4f7523f2 100644 --- a/messaging/parameters/service.py +++ b/messaging/parameters/service.py @@ -1,4 +1,56 @@ -from messaging.parameters.dto import MessageParameters +from generated.commons.chunk_pb2 import ChunkComponent +from messaging.parameters.dto import MessageParameters, Parameters +class MessageHeaderParameters(Parameters): + def __init__(self, + *, + technical_message_type: str, + mode: str, + recipients: list, + chunk_component: ChunkComponent, + team_set_context_id: str, + application_message_seq_no: str, + application_message_id: int, + ): + super(MessageHeaderParameters, self).__init__( + application_message_seq_no=application_message_seq_no, + application_message_id=application_message_id, + team_set_context_id=team_set_context_id + ) + + self.technical_message_type = technical_message_type + self.mode = mode + self.recipients = recipients + self.chunk_component = chunk_component + + def get_technical_message_type(self) -> str: + return self.technical_message_type + + def get_mode(self) -> str: + return self.mode + + def get_recipients(self) -> list: + return self.recipients + + def get_chunk_component(self) -> ChunkComponent: + return self.chunk_component + + +class MessagePayloadParameters: + + def __init__(self, + *, + type_url: str, + value: str, + ): + + self.type_url = type_url + self.value = value + + def get_type_url(self) -> str: + return self.type_url + + def get_value(self) -> str: + return self.value From 6a194e4ee72800ba022a07a5081b91123f182ac0 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 16:40:07 +0300 Subject: [PATCH 08/48] Add paho-mqtt to requirements --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 2f3b27c3..458446b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ cffi==1.14.6 charset-normalizer==2.0.6 cryptography==3.4.8 idna==3.2 +paho-mqtt==1.5.1 protobuf==3.18.0 pycparser==2.20 requests==2.26.0 From 6c5d38908b3c9a2634acc0de7e224919bc387cad Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 16:46:32 +0300 Subject: [PATCH 09/48] Fix MqttMessagingClient --- messaging/clients.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/messaging/clients.py b/messaging/clients.py index cc54d063..f2fc701c 100644 --- a/messaging/clients.py +++ b/messaging/clients.py @@ -39,13 +39,13 @@ def send(self, parameters) -> MessagingResult: # verify=create_certificate_file(parameters.get_onboarding_response()), # cert=create_certificate_file(parameters.get_onboarding_response()), ) - result = MessagingResult(list(parameters.get_message_id())) + result = MessagingResult([parameters.get_message_id()]) return result class MqttMessagingClient(AbstractClient): def send(self, parameters) -> MessagingResult: - request = self.create_message_request(parameters) - result = MessagingResult(list(parameters.get_message_id())) + mqtt_payload = self.create_message_request(parameters) + result = MessagingResult([parameters.get_message_id()]) return result From b6e37e460890c5b91c1e840ce3ac7c149fbbd126 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 4 Oct 2021 17:11:07 +0300 Subject: [PATCH 10/48] Create cloud_virtualized_app_registration_pb2.py protobuf file --- .../cloud_virtualized_app_registration_pb2.py | 325 ++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py diff --git a/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py b/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py new file mode 100644 index 00000000..61c203da --- /dev/null +++ b/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py @@ -0,0 +1,325 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: cloud-provider-integration/cloud-virtualized-app-registration.proto +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from commons import message_pb2 as commons_dot_message__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='cloud-provider-integration/cloud-virtualized-app-registration.proto', + package='agrirouter.cloud.registration', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\nCcloud-provider-integration/cloud-virtualized-app-registration.proto\x12\x1d\x61grirouter.cloud.registration\x1a\x15\x63ommons/message.proto\"\xb7\x01\n\x11OnboardingRequest\x12i\n\x13onboarding_requests\x18\x01 \x03(\x0b\x32L.agrirouter.cloud.registration.OnboardingRequest.EndpointRegistrationDetails\x1a\x37\n\x1b\x45ndpointRegistrationDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\xaf\x03\n\x12OnboardingResponse\x12j\n\x13onboarded_endpoints\x18\x01 \x03(\x0b\x32M.agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails\x12L\n\x08\x66\x61ilures\x18\x02 \x03(\x0b\x32:.agrirouter.cloud.registration.OnboardingResponse.Failures\x1a\x99\x01\n\x1b\x45ndpointRegistrationDetails\x12\n\n\x02id\x18\x01 \x01(\t\x12\x1b\n\x13\x64\x65vice_alternate_id\x18\x02 \x01(\t\x12\x1b\n\x13sensor_alternate_id\x18\x03 \x01(\t\x12\x1f\n\x17\x63\x61pability_alternate_id\x18\x04 \x01(\t\x12\x13\n\x0b\x65ndpoint_id\x18\x05 \x01(\t\x1a\x43\n\x08\x46\x61ilures\x12\n\n\x02id\x18\x01 \x01(\t\x12+\n\x06reason\x18\x02 \x01(\x0b\x32\x1b.agrirouter.commons.Message\"\'\n\x12OffboardingRequest\x12\x11\n\tendpoints\x18\x01 \x03(\tb\x06proto3' + , + dependencies=[commons_dot_message__pb2.DESCRIPTOR,]) + + + + +_ONBOARDINGREQUEST_ENDPOINTREGISTRATIONDETAILS = _descriptor.Descriptor( + name='EndpointRegistrationDetails', + full_name='agrirouter.cloud.registration.OnboardingRequest.EndpointRegistrationDetails', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='agrirouter.cloud.registration.OnboardingRequest.EndpointRegistrationDetails.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='agrirouter.cloud.registration.OnboardingRequest.EndpointRegistrationDetails.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=254, + serialized_end=309, +) + +_ONBOARDINGREQUEST = _descriptor.Descriptor( + name='OnboardingRequest', + full_name='agrirouter.cloud.registration.OnboardingRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='onboarding_requests', full_name='agrirouter.cloud.registration.OnboardingRequest.onboarding_requests', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_ONBOARDINGREQUEST_ENDPOINTREGISTRATIONDETAILS, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=126, + serialized_end=309, +) + + +_ONBOARDINGRESPONSE_ENDPOINTREGISTRATIONDETAILS = _descriptor.Descriptor( + name='EndpointRegistrationDetails', + full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='device_alternate_id', full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails.device_alternate_id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='sensor_alternate_id', full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails.sensor_alternate_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='capability_alternate_id', full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails.capability_alternate_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='endpoint_id', full_name='agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails.endpoint_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=521, + serialized_end=674, +) + +_ONBOARDINGRESPONSE_FAILURES = _descriptor.Descriptor( + name='Failures', + full_name='agrirouter.cloud.registration.OnboardingResponse.Failures', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='id', full_name='agrirouter.cloud.registration.OnboardingResponse.Failures.id', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reason', full_name='agrirouter.cloud.registration.OnboardingResponse.Failures.reason', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=676, + serialized_end=743, +) + +_ONBOARDINGRESPONSE = _descriptor.Descriptor( + name='OnboardingResponse', + full_name='agrirouter.cloud.registration.OnboardingResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='onboarded_endpoints', full_name='agrirouter.cloud.registration.OnboardingResponse.onboarded_endpoints', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='failures', full_name='agrirouter.cloud.registration.OnboardingResponse.failures', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[_ONBOARDINGRESPONSE_ENDPOINTREGISTRATIONDETAILS, _ONBOARDINGRESPONSE_FAILURES, ], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=312, + serialized_end=743, +) + + +_OFFBOARDINGREQUEST = _descriptor.Descriptor( + name='OffboardingRequest', + full_name='agrirouter.cloud.registration.OffboardingRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='endpoints', full_name='agrirouter.cloud.registration.OffboardingRequest.endpoints', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=745, + serialized_end=784, +) + +_ONBOARDINGREQUEST_ENDPOINTREGISTRATIONDETAILS.containing_type = _ONBOARDINGREQUEST +_ONBOARDINGREQUEST.fields_by_name['onboarding_requests'].message_type = _ONBOARDINGREQUEST_ENDPOINTREGISTRATIONDETAILS +_ONBOARDINGRESPONSE_ENDPOINTREGISTRATIONDETAILS.containing_type = _ONBOARDINGRESPONSE +_ONBOARDINGRESPONSE_FAILURES.fields_by_name['reason'].message_type = commons_dot_message__pb2._MESSAGE +_ONBOARDINGRESPONSE_FAILURES.containing_type = _ONBOARDINGRESPONSE +_ONBOARDINGRESPONSE.fields_by_name['onboarded_endpoints'].message_type = _ONBOARDINGRESPONSE_ENDPOINTREGISTRATIONDETAILS +_ONBOARDINGRESPONSE.fields_by_name['failures'].message_type = _ONBOARDINGRESPONSE_FAILURES +DESCRIPTOR.message_types_by_name['OnboardingRequest'] = _ONBOARDINGREQUEST +DESCRIPTOR.message_types_by_name['OnboardingResponse'] = _ONBOARDINGRESPONSE +DESCRIPTOR.message_types_by_name['OffboardingRequest'] = _OFFBOARDINGREQUEST +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +OnboardingRequest = _reflection.GeneratedProtocolMessageType('OnboardingRequest', (_message.Message,), { + + 'EndpointRegistrationDetails' : _reflection.GeneratedProtocolMessageType('EndpointRegistrationDetails', (_message.Message,), { + 'DESCRIPTOR' : _ONBOARDINGREQUEST_ENDPOINTREGISTRATIONDETAILS, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OnboardingRequest.EndpointRegistrationDetails) + }) + , + 'DESCRIPTOR' : _ONBOARDINGREQUEST, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OnboardingRequest) + }) +_sym_db.RegisterMessage(OnboardingRequest) +_sym_db.RegisterMessage(OnboardingRequest.EndpointRegistrationDetails) + +OnboardingResponse = _reflection.GeneratedProtocolMessageType('OnboardingResponse', (_message.Message,), { + + 'EndpointRegistrationDetails' : _reflection.GeneratedProtocolMessageType('EndpointRegistrationDetails', (_message.Message,), { + 'DESCRIPTOR' : _ONBOARDINGRESPONSE_ENDPOINTREGISTRATIONDETAILS, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OnboardingResponse.EndpointRegistrationDetails) + }) + , + + 'Failures' : _reflection.GeneratedProtocolMessageType('Failures', (_message.Message,), { + 'DESCRIPTOR' : _ONBOARDINGRESPONSE_FAILURES, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OnboardingResponse.Failures) + }) + , + 'DESCRIPTOR' : _ONBOARDINGRESPONSE, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OnboardingResponse) + }) +_sym_db.RegisterMessage(OnboardingResponse) +_sym_db.RegisterMessage(OnboardingResponse.EndpointRegistrationDetails) +_sym_db.RegisterMessage(OnboardingResponse.Failures) + +OffboardingRequest = _reflection.GeneratedProtocolMessageType('OffboardingRequest', (_message.Message,), { + 'DESCRIPTOR' : _OFFBOARDINGREQUEST, + '__module__' : 'cloud_provider_integration.cloud_virtualized_app_registration_pb2' + # @@protoc_insertion_point(class_scope:agrirouter.cloud.registration.OffboardingRequest) + }) +_sym_db.RegisterMessage(OffboardingRequest) + + +# @@protoc_insertion_point(module_scope) From 09db5b9e6cb52879b6905ba2bc085ffccf0c2e98 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:07:52 +0300 Subject: [PATCH 11/48] Create utils --- messaging/{clients.py => services.py} | 0 utils/__init__.py | 0 utils/utc_time_util.py | 6 ++++++ utils/uuid_util.py | 5 +++++ 4 files changed, 11 insertions(+) rename messaging/{clients.py => services.py} (100%) create mode 100644 utils/__init__.py create mode 100644 utils/utc_time_util.py create mode 100644 utils/uuid_util.py diff --git a/messaging/clients.py b/messaging/services.py similarity index 100% rename from messaging/clients.py rename to messaging/services.py diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/utils/utc_time_util.py b/utils/utc_time_util.py new file mode 100644 index 00000000..b86f3afb --- /dev/null +++ b/utils/utc_time_util.py @@ -0,0 +1,6 @@ +from datetime import datetime + + +def now_as_utc_timestamp(): + timestamp = datetime.utcnow() + return timestamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ") diff --git a/utils/uuid_util.py b/utils/uuid_util.py new file mode 100644 index 00000000..0c9bd872 --- /dev/null +++ b/utils/uuid_util.py @@ -0,0 +1,5 @@ +import uuid + + +def new_uuid(): + return uuid.uuid4() From a535a25e466462f6f9072979f9fe0ae45d8477e7 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:08:36 +0300 Subject: [PATCH 12/48] Fix imports in protobuf generated files --- generated/messaging/request/request_pb2.py | 4 ++-- .../messaging/response/payload/feed/feed_response_pb2.py | 4 ++-- .../messaging/response/payload/feed/push_notification_pb2.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/generated/messaging/request/request_pb2.py b/generated/messaging/request/request_pb2.py index 7b2119a8..51241337 100644 --- a/generated/messaging/request/request_pb2.py +++ b/generated/messaging/request/request_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from commons import chunk_pb2 as commons_dot_chunk__pb2 -from commons import message_pb2 as commons_dot_message__pb2 +from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 +from generated.commons import message_pb2 as commons_dot_message__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/messaging/response/payload/feed/feed_response_pb2.py b/generated/messaging/response/payload/feed/feed_response_pb2.py index 04bd3397..82f87676 100644 --- a/generated/messaging/response/payload/feed/feed_response_pb2.py +++ b/generated/messaging/response/payload/feed/feed_response_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 -from commons import message_pb2 as commons_dot_message__pb2 -from commons import chunk_pb2 as commons_dot_chunk__pb2 +from generated.commons import message_pb2 as commons_dot_message__pb2 +from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/messaging/response/payload/feed/push_notification_pb2.py b/generated/messaging/response/payload/feed/push_notification_pb2.py index 772dc6cf..cad40928 100644 --- a/generated/messaging/response/payload/feed/push_notification_pb2.py +++ b/generated/messaging/response/payload/feed/push_notification_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 -from commons import message_pb2 as commons_dot_message__pb2 -from commons import chunk_pb2 as commons_dot_chunk__pb2 +from generated.commons import message_pb2 as commons_dot_message__pb2 +from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 DESCRIPTOR = _descriptor.FileDescriptor( From 8d8a0f60a5f0c590498eabbd8884460c7093089a Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:09:06 +0300 Subject: [PATCH 13/48] Implement encoding messages --- messaging/encode.py | 46 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 messaging/encode.py diff --git a/messaging/encode.py b/messaging/encode.py new file mode 100644 index 00000000..63ad06f3 --- /dev/null +++ b/messaging/encode.py @@ -0,0 +1,46 @@ +import base64 + +from google.protobuf.any_pb2 import Any +from google.protobuf.internal.encoder import _VarintBytes + +from generated.messaging.request.request_pb2 import RequestEnvelope, RequestPayloadWrapper +from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters +from utils.utc_time_util import now_as_utc_timestamp +from utils.uuid_util import new_uuid + + +def write_proto_parts_to_buffer(parts: list, buffer: bytes = b""): + for part in parts: + part_size = part.ByteSize() + buffer += _VarintBytes(part_size) + buffer += part.SerializeToString() + + return buffer + + +def encode(header_parameters: MessageHeaderParameters, payload_parameters: MessagePayloadParameters) -> bytes: + request_envelope = encode_header(header_parameters) + request_payload = encode_payload(payload_parameters) + + raw_data = write_proto_parts_to_buffer([request_envelope, request_payload]) + + return base64.b64encode(raw_data) + + +def encode_header(header_parameters: MessageHeaderParameters) -> RequestEnvelope: + request_envelope = RequestEnvelope() + request_envelope.application_id = header_parameters.get_application_message_id() \ + if header_parameters.get_application_message_id() else new_uuid() + request_envelope.application_message_seq_no = header_parameters.get_application_message_seq_no() + request_envelope.technical_message_type = header_parameters.get_technical_message_type() + request_envelope.mode = header_parameters.get_mode() + request_envelope.timestamp = now_as_utc_timestamp() + return request_envelope + + +def encode_payload(payload_parameters: MessagePayloadParameters) -> RequestPayloadWrapper: + any_proto_wrapper = Any() + any_proto_wrapper.type_url = payload_parameters.get_type_url() + any_proto_wrapper.value = payload_parameters.get_value() + request_payload = RequestPayloadWrapper(any_proto_wrapper) + return request_payload From 364aeaacc167cb5ceb20c20abd36c5b0f0520258 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:09:27 +0300 Subject: [PATCH 14/48] Implement decoding messages --- messaging/decode.py | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 messaging/decode.py diff --git a/messaging/decode.py b/messaging/decode.py new file mode 100644 index 00000000..2feb8751 --- /dev/null +++ b/messaging/decode.py @@ -0,0 +1,48 @@ +import base64 +from ctypes import Union + +from google.protobuf.any_pb2 import Any +from google.protobuf.internal.decoder import _DecodeVarint + +from generated.commons.message_pb2 import Messages +from generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse +from generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, MessageQueryResponse +from generated.messaging.response.response_pb2 import ResponseEnvelope, ResponsePayloadWrapper +from messaging.messages import DecodedMessage + + +def read_properties_buffers_from_input_stream(input_stream) -> tuple: + result = [] + pos = 0 + while pos < len(input_stream): + msg_len, pos = _DecodeVarint(input_stream, pos) + + msg_buf = input_stream[pos:pos + msg_len] + result.append(msg_buf) + + pos += msg_len + + return tuple(result) + + +def decode_response(message: bytes) -> DecodedMessage: + input_stream = base64.b64decode(message) + response_envelope_buffer, response_payload_buffer = read_properties_buffers_from_input_stream(input_stream) + + envelope = ResponseEnvelope().MergeFromString(response_envelope_buffer) + payload = ResponsePayloadWrapper().MergeFromString(response_payload_buffer) + + message = DecodedMessage(envelope, payload) + + return message + + +def decode_details(details: Any): + if details.type_url == "Messages": + return Messages().MergeFromString(details.value) + elif details.type_url == "ListEndpointsResponse": + return ListEndpointsResponse().MergeFromString(details.value) + elif details.type_url == "HeaderQueryResponse": + return HeaderQueryResponse().MergeFromString(details.value) + elif details.type_url == "MessageQueryResponse": + return MessageQueryResponse().MergeFromString(details.value) From c75405c879c1064cf80a095de073e2fb9658d151 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:10:41 +0300 Subject: [PATCH 15/48] Implement mqtt client --- messaging/clients/__init__.py | 0 messaging/clients/http.py | 22 ++++++ messaging/clients/mqtt.py | 138 ++++++++++++++++++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 messaging/clients/__init__.py create mode 100644 messaging/clients/http.py create mode 100644 messaging/clients/mqtt.py diff --git a/messaging/clients/__init__.py b/messaging/clients/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/clients/http.py b/messaging/clients/http.py new file mode 100644 index 00000000..08530c77 --- /dev/null +++ b/messaging/clients/http.py @@ -0,0 +1,22 @@ +class HttpClient: + + headers = {"Content-Type": "application/json"} + + def __init__(self, + on_message_callback: callable, + timeout=20 + ): + self.on_message_callback = on_message_callback + self.timeout = timeout + + def publish(self): + pass + + def subscribe(self): + pass + + def unsubscribe(self): + pass + + def _start_loop(self): + pass diff --git a/messaging/clients/mqtt.py b/messaging/clients/mqtt.py new file mode 100644 index 00000000..4e8dd555 --- /dev/null +++ b/messaging/clients/mqtt.py @@ -0,0 +1,138 @@ +from typing import Any, List, Tuple + +from paho.mqtt import client as mqtt_client +from paho.mqtt.client import MQTTv31, MQTTMessageInfo + + +class MqttClient: + + def __init__(self, + client_id: str = "", + on_message_callback: callable = None, + userdata: Any = None, + clean_session: bool = True + ): + # TODO: Implement on_message_callback parameter validation: + # must take params as described at https://pypi.org/project/paho-mqtt/#callbacks + + self.mqtt_client = mqtt_client.Client( + client_id=client_id, + clean_session=clean_session, + userdata=userdata, + protocol=MQTTv31, + transport="tcp" + ) + self.mqtt_client.on_message = on_message_callback if on_message_callback else self._get_on_message_callback() + self.mqtt_client.on_connect = self._get_on_connect_callback() + self.mqtt_client.on_disconnect = self._get_on_disconnect_callback() + self.mqtt_client.on_subscribe = self._get_on_subscribe_callback() + self.mqtt_client.on_unsubscribe = self._get_on_unsubscribe_callback() + + def connect(self, host: str, port: str) -> None: + self.mqtt_client.connect_async( + host=host, + port=port + ) + self.mqtt_client.loop_start() + + def disconnect(self): + self.mqtt_client.loop_stop() + self.mqtt_client.disconnect() + + def publish(self, topic, payload, qos=0) -> MQTTMessageInfo: + """ + + :param topic: str representing unique name of the topic that the message should be published on + :param payload: The actual message to send + :param qos: int representing the quality of service level to use. May be [0, 1, 2] + :return: MQTTMessageInfo + """ + message_info = self.mqtt_client.publish( + topic=topic, + payload=payload, + qos=qos + ) + return message_info + + def subscribe(self, topics: List[Tuple[str, int]]) -> tuple: + """ + + :param topics: list of tuples [(topic, qos),] containing topic to subscribe on + and desired quality of service + + topic: str representing unique name of the topic to subscribe on + qos: int representing the quality of service level to use. May be [0, 1, 2] + + Example: topics=[('my/topic/1', 0), ('my/topic/2', 1), ('my/topic/3', 2)] + + :return: tuple + """ + result, mid = self.mqtt_client.subscribe(topics) + return result, mid + + def unsubscribe(self, topics: List[str]) -> tuple: + """ + + :param topics: list of strings [topic, topic] containing topic to unsubscribe from + + topic: str representing unique name of the topic to unsubscribe from + + Example: topics=['my/topic/1', 'my/topic/2', 'my/topic/3'] + + :return: tuple + """ + result, mid = self.mqtt_client.unsubscribe(topics) + return result, mid + + @staticmethod + def _get_on_connect_callback() -> callable: + + def on_connect(client, userdata, flags, rc, properties=None): + if rc == 0: + print("Connected to MQTT Broker!") + else: + print(f"Failed to connect, return code: {rc}") + + return client, userdata, flags, rc, properties + + return on_connect + + @staticmethod + def _get_on_message_callback() -> callable: + + def on_message(client, userdata, msg): + # print(f"Received `{msg.payload.decode()}` from `{msg.topic}` topic") + + return client, userdata, msg + + return on_message + + @staticmethod + def _get_on_subscribe_callback() -> callable: + + def on_subscribe(client, userdata, mid, granted_qos, properties=None): + # print(f"Subscribed {userdata} to `{properties}`") + + return client, userdata, mid, granted_qos, properties + + return on_subscribe + + @staticmethod + def _get_on_disconnect_callback() -> callable: + + def on_disconnect(client, userdata, rc): + # print(f"Disconnected from from `{properties}`") + + return client, userdata, rc + + return on_disconnect + + @staticmethod + def _get_on_unsubscribe_callback() -> callable: + + def on_unsubscribe(client, userdata, mid): + # print(f"Unsubscribed `{userdata}` from `{properties}`") + + return client, userdata, mid + + return on_unsubscribe From 6a9bd3e1fe25f89114719307d5e551b69509cce6 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:12:01 +0300 Subject: [PATCH 16/48] Implement MQttMessagingService. Refactor HttpMessagingService --- messaging/services.py | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/messaging/services.py b/messaging/services.py index f2fc701c..a05cdcc3 100644 --- a/messaging/services.py +++ b/messaging/services.py @@ -3,12 +3,13 @@ import requests from messaging.certification import create_certificate_file +from messaging.clients.mqtt import MqttClient from messaging.messages import Message from messaging.request import MessageRequest from messaging.result import MessagingResult -class AbstractClient(ABC): +class AbstractMessagingClient(ABC): def create_message_request(self, parameters) -> MessageRequest: messages = [] @@ -27,7 +28,10 @@ def send(self, parameters): ... -class HttpMessagingClient(AbstractClient): +class HttpMessagingService(AbstractMessagingClient): + + def __init__(self, onboarding_response): + self.onboarding_response = onboarding_response def send(self, parameters) -> MessagingResult: request = self.create_message_request(parameters) @@ -42,10 +46,41 @@ def send(self, parameters) -> MessagingResult: result = MessagingResult([parameters.get_message_id()]) return result + def subscribe(self): + pass -class MqttMessagingClient(AbstractClient): + def unsubscribe(self): + pass - def send(self, parameters) -> MessagingResult: + +class MqttMessagingService(AbstractMessagingClient): + + def __init__(self, + onboarding_response, + on_message_callback: callable = None, + ): + + self.onboarding_response = onboarding_response + self.client = MqttClient( + client_id=self.onboarding_response.get_client_id(), + on_message_callback=on_message_callback, + ) + self.client.connect( + self.onboarding_response.get_connection_criteria()["host"], + self.onboarding_response.get_connection_criteria()["port"] + ) + + def send(self, parameters, qos: int = 0) -> MessagingResult: mqtt_payload = self.create_message_request(parameters) + self.client.publish( + self.onboarding_response.get_connection_criteria()["measures"], mqtt_payload, + qos=qos + ) result = MessagingResult([parameters.get_message_id()]) return result + + def subscribe(self): + pass + + def unsubscribe(self): + pass From 55e9b4448d86cba1c7a0654a14da1840252f965e Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:12:39 +0300 Subject: [PATCH 17/48] Refactor messaging/parameters --- messaging/parameters/dto.py | 2 +- messaging/parameters/service.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/messaging/parameters/dto.py b/messaging/parameters/dto.py index a547b375..eda96140 100644 --- a/messaging/parameters/dto.py +++ b/messaging/parameters/dto.py @@ -9,7 +9,7 @@ class Parameters: def __init__(self, *, application_message_seq_no: str, - application_message_id: int, + application_message_id: int = None, team_set_context_id: str ): self.application_message_seq_no = application_message_seq_no diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py index 4f7523f2..2646baf8 100644 --- a/messaging/parameters/service.py +++ b/messaging/parameters/service.py @@ -12,7 +12,7 @@ def __init__(self, chunk_component: ChunkComponent, team_set_context_id: str, application_message_seq_no: str, - application_message_id: int, + application_message_id: int = None, ): super(MessageHeaderParameters, self).__init__( application_message_seq_no=application_message_seq_no, From 76465a662c7baf0243957dd55a3a950fe5856cd2 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 16:13:17 +0300 Subject: [PATCH 18/48] Decoded Message --- messaging/messages.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/messaging/messages.py b/messaging/messages.py index a0f9e053..ed411e81 100644 --- a/messaging/messages.py +++ b/messaging/messages.py @@ -14,6 +14,18 @@ def get_content(self): return self.content +class DecodedMessage: + def __init__(self, response_envelope, response_payload): + self.response_envelope = response_envelope + self.response_payload = response_payload + + def get_response_payload(self): + return self.response_payload + + def get_response_envelope(self): + return self.response_envelope + + class Message: MESSAGE = "message" TIMESTAMP = "timestamp" From 0da66d41fa57928fa7700f47c4d72dcf16213a36 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 20:23:02 +0300 Subject: [PATCH 19/48] Create TypeUrlNotFoundError --- messaging/exceptions.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 messaging/exceptions.py diff --git a/messaging/exceptions.py b/messaging/exceptions.py new file mode 100644 index 00000000..84345c5d --- /dev/null +++ b/messaging/exceptions.py @@ -0,0 +1,5 @@ +from onboarding.exceptions import AgriRouuterBaseException + + +class TypeUrlNotFoundError(AgriRouuterBaseException): + _message = "Given type url not found" From c7f8ac7eae13d4133fba12c336459e9cc2a5fa72 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 20:23:42 +0300 Subject: [PATCH 20/48] Create TypeUrl service --- utils/type_url.py | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 utils/type_url.py diff --git a/utils/type_url.py b/utils/type_url.py new file mode 100644 index 00000000..2628eee7 --- /dev/null +++ b/utils/type_url.py @@ -0,0 +1,43 @@ +from generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingResponse, \ + OnboardingRequest +from generated.commons.message_pb2 import Messages +from generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery +from generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification +from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageDelete, MessageConfirm, MessageQuery +from generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse +from generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, MessageQueryResponse +from messaging.exceptions import TypeUrlNotFoundError + + +class TypeUrl: + prefix = "types.agrirouter.com/" + + @classmethod + def get_type_url(cls, class_): + if class_.__name__ == Messages.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == ListEndpointsResponse.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == HeaderQueryResponse.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == MessageQueryResponse.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == MessageDelete.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == MessageConfirm.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == OnboardingResponse.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == OnboardingRequest.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == CapabilitySpecification.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == Subscription.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == MessageQuery.__name__: + return cls.prefix + class_.__name__ + elif class_.__name__ == ListEndpointsQuery.__name__: + return cls.prefix + class_.__name__ + else: + raise TypeUrlNotFoundError(f"The {class_} type url not found") From 0b6d1f78d6ad1f1f55ce73ffbf3d499f586eb426 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 5 Oct 2021 20:24:13 +0300 Subject: [PATCH 21/48] Refactor messaging/decode --- messaging/decode.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/messaging/decode.py b/messaging/decode.py index 2feb8751..7023e019 100644 --- a/messaging/decode.py +++ b/messaging/decode.py @@ -9,6 +9,7 @@ from generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, MessageQueryResponse from generated.messaging.response.response_pb2 import ResponseEnvelope, ResponsePayloadWrapper from messaging.messages import DecodedMessage +from utils.type_url import TypeUrl def read_properties_buffers_from_input_stream(input_stream) -> tuple: @@ -38,11 +39,11 @@ def decode_response(message: bytes) -> DecodedMessage: def decode_details(details: Any): - if details.type_url == "Messages": + if details.type_url == TypeUrl.get_type_url(Messages.__name__): return Messages().MergeFromString(details.value) - elif details.type_url == "ListEndpointsResponse": + elif details.type_url == TypeUrl.get_type_url(ListEndpointsResponse.__name__): return ListEndpointsResponse().MergeFromString(details.value) - elif details.type_url == "HeaderQueryResponse": + elif details.type_url == TypeUrl.get_type_url(HeaderQueryResponse.__name__): return HeaderQueryResponse().MergeFromString(details.value) - elif details.type_url == "MessageQueryResponse": + elif details.type_url == TypeUrl.get_type_url(MessageQueryResponse.__name__): return MessageQueryResponse().MergeFromString(details.value) From fbab5ccedb54aaf936c8e530ac6c10046392978a Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 6 Oct 2021 02:03:36 +0300 Subject: [PATCH 22/48] Fix generated/cload_virtualized_add_registration --- .../cloud_virtualized_app_registration_pb2.py | 2 +- messaging/services.py | 86 ------------------- 2 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 messaging/services.py diff --git a/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py b/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py index 61c203da..acc12be5 100644 --- a/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py +++ b/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py @@ -11,7 +11,7 @@ _sym_db = _symbol_database.Default() -from commons import message_pb2 as commons_dot_message__pb2 +from generated.commons import message_pb2 as commons_dot_message__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/messaging/services.py b/messaging/services.py deleted file mode 100644 index a05cdcc3..00000000 --- a/messaging/services.py +++ /dev/null @@ -1,86 +0,0 @@ -from abc import ABC, abstractmethod - -import requests - -from messaging.certification import create_certificate_file -from messaging.clients.mqtt import MqttClient -from messaging.messages import Message -from messaging.request import MessageRequest -from messaging.result import MessagingResult - - -class AbstractMessagingClient(ABC): - - def create_message_request(self, parameters) -> MessageRequest: - messages = [] - for encoded_message in parameters.get_encoded_messages(): - message = Message(encoded_message) - messages.append(message) - message_request = MessageRequest( - parameters.get_sensor_alternate_id(), - parameters.get_capability_alternate_id(), - messages - ) - return message_request - - @abstractmethod - def send(self, parameters): - ... - - -class HttpMessagingService(AbstractMessagingClient): - - def __init__(self, onboarding_response): - self.onboarding_response = onboarding_response - - def send(self, parameters) -> MessagingResult: - request = self.create_message_request(parameters) - response = requests.post( - url=parameters.get_onboarding_response().get_connection_criteria()["measures"], - headers={"Content-type": "application/json"}, - data=request.json_serialize(), - # TODO: improve create_certificate_file() - # verify=create_certificate_file(parameters.get_onboarding_response()), - # cert=create_certificate_file(parameters.get_onboarding_response()), - ) - result = MessagingResult([parameters.get_message_id()]) - return result - - def subscribe(self): - pass - - def unsubscribe(self): - pass - - -class MqttMessagingService(AbstractMessagingClient): - - def __init__(self, - onboarding_response, - on_message_callback: callable = None, - ): - - self.onboarding_response = onboarding_response - self.client = MqttClient( - client_id=self.onboarding_response.get_client_id(), - on_message_callback=on_message_callback, - ) - self.client.connect( - self.onboarding_response.get_connection_criteria()["host"], - self.onboarding_response.get_connection_criteria()["port"] - ) - - def send(self, parameters, qos: int = 0) -> MessagingResult: - mqtt_payload = self.create_message_request(parameters) - self.client.publish( - self.onboarding_response.get_connection_criteria()["measures"], mqtt_payload, - qos=qos - ) - result = MessagingResult([parameters.get_message_id()]) - return result - - def subscribe(self): - pass - - def unsubscribe(self): - pass From ac2b46e65ce936cdab69fc891c0da04421f64348 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 6 Oct 2021 02:04:13 +0300 Subject: [PATCH 23/48] Create TechnicalMessageType enum --- messaging/enums.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 messaging/enums.py diff --git a/messaging/enums.py b/messaging/enums.py new file mode 100644 index 00000000..ccaeb29a --- /dev/null +++ b/messaging/enums.py @@ -0,0 +1,15 @@ +from auth.enums import BaseEnum + + +class TechnicalMessageType(BaseEnum): + EMPTY = "" + CAPABILITIES = "dke:capabilities" + SUBSCRIPTION = "dke:subscription" + LIST_ENDPOINTS = "dke:list_endpoints" + LIST_ENDPOINTS_UNFILTERED = "dke:list_endpoints_unfiltered" + FEED_CONFIRM = "dke:feed_confirm" + FEED_DELETE = "dke:feed_delete" + FEED_HEADER_QUERY = "dke:feed_header_query" + FEED_MESSAGE_QUERY = "dke:feed_message_query" + CLOUD_ONBOARD_ENDPOINTS = "dke:cloud_onboard_endpoints" + CLOUD_OFFBOARD_ENDPOINTS = "dke:cloud_offboard_endpoints" From 02e89f98f011644d29536aeab7c65018bfe956e2 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 6 Oct 2021 02:05:17 +0300 Subject: [PATCH 24/48] Rename function encode to encode_messge --- messaging/encode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/messaging/encode.py b/messaging/encode.py index 63ad06f3..32ed357d 100644 --- a/messaging/encode.py +++ b/messaging/encode.py @@ -18,7 +18,7 @@ def write_proto_parts_to_buffer(parts: list, buffer: bytes = b""): return buffer -def encode(header_parameters: MessageHeaderParameters, payload_parameters: MessagePayloadParameters) -> bytes: +def encode_message(header_parameters: MessageHeaderParameters, payload_parameters: MessagePayloadParameters) -> bytes: request_envelope = encode_header(header_parameters) request_payload = encode_payload(payload_parameters) From d7d1ca4a1b2997c19c4f1d21cb80658313c12def Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 6 Oct 2021 02:22:26 +0300 Subject: [PATCH 25/48] Implement MessagingServiceParameters --- messaging/parameters/dto.py | 9 +- messaging/parameters/service.py | 174 ++++++++++++++++++++++++++++++-- 2 files changed, 174 insertions(+), 9 deletions(-) diff --git a/messaging/parameters/dto.py b/messaging/parameters/dto.py index eda96140..3b8f9845 100644 --- a/messaging/parameters/dto.py +++ b/messaging/parameters/dto.py @@ -54,14 +54,17 @@ def __init__(self, self.onboarding_response = onboarding_response + def get_onboarding_response(self): + return self.onboarding_response + class MessagingParameters(MessageParameters): def __init__(self, *, - application_message_seq_no: str, - application_message_id: int, - team_set_context_id: str, + application_message_seq_no: str = None, + application_message_id: int = None, + team_set_context_id: str = None, onboarding_response: BaseOnboardingResonse, encoded_messages=None ): diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py index 2646baf8..e3b20e5c 100644 --- a/messaging/parameters/service.py +++ b/messaging/parameters/service.py @@ -1,4 +1,10 @@ +from abc import ABC, abstractmethod +from copy import deepcopy +from typing import List + from generated.commons.chunk_pb2 import ChunkComponent +from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from generated.messaging.request.payload.feed.feed_requests_pb2 import ValidityPeriod from messaging.parameters.dto import MessageParameters, Parameters @@ -6,12 +12,12 @@ class MessageHeaderParameters(Parameters): def __init__(self, *, - technical_message_type: str, - mode: str, - recipients: list, - chunk_component: ChunkComponent, - team_set_context_id: str, - application_message_seq_no: str, + technical_message_type: str = None, + mode: str = None, + team_set_context_id: str = None, + application_message_seq_no: str = None, + recipients: list = None, + chunk_component: ChunkComponent = None, application_message_id: int = None, ): super(MessageHeaderParameters, self).__init__( @@ -54,3 +60,159 @@ def get_type_url(self) -> str: def get_value(self) -> str: return self.value + + +class CapabilityParameters(MessageParameters): + + def __init__(self, + application_id, + certification_version_id, + enable_push_notification, + capability_parameters: list = None, + **kwargs + ): + self.application_id = application_id + self.certification_version_id = certification_version_id + self.enable_push_notification = enable_push_notification + self.capability_parameters = capability_parameters if capability_parameters else [] + super(CapabilityParameters, self).__init__(**kwargs) + + def get_application_id(self): + return self.application_id + + def get_certification_version_id(self): + return self.certification_version_id + + def get_enable_push_notification(self): + return self.enable_push_notification + + def get_capability_parameters(self): + return deepcopy(self.capability_parameters) + + def set_application_id(self, application_id): + self.application_id = application_id + + def set_certification_version_id(self, certification_version_id): + self.certification_version_id = certification_version_id + + def set_enable_push_notification(self, enable_push_notification): + self.enable_push_notification = enable_push_notification + + def set_capability_parameters(self, capability_parameters: list): + self.capability_parameters = capability_parameters + + def add_capability_parameters(self, capability_parameter): + self.capability_parameters.append(capability_parameter) + + def extend_capability_parameters(self, capability_parameters: list): + self.capability_parameters.extend(capability_parameters) + + +class FeedConfirmParameters(MessageParameters): + def __init__(self, message_ids: list = None, **kwargs): + self.message_ids = message_ids if message_ids else [] + super(FeedConfirmParameters, self).__init__(**kwargs) + + def get_message_ids(self): + return deepcopy(self.message_ids) + + def set_message_ids(self, message_ids: list): + self.message_ids = message_ids + + def add_message_ids(self, message_id): + self.message_ids.append(message_id) + + def extend_message_ids(self, message_ids): + self.message_ids.extend(message_ids) + + +class FeedDeleteParameters(MessageParameters): + def __init__(self, + message_ids: list = None, + receivers: list = None, + validity_period: ValidityPeriod = None, + **kwargs): + self.message_ids = message_ids if message_ids else [] + self.receivers = receivers if receivers else [] + self.validity_period = validity_period + super(FeedDeleteParameters, self).__init__(**kwargs) + + def get_message_ids(self): + return deepcopy(self.message_ids) + + def set_message_ids(self, message_ids: list): + self.message_ids = message_ids + + def add_message_ids(self, message_id): + self.message_ids.append(message_id) + + def extend_message_ids(self, message_ids): + self.message_ids.extend(message_ids) + + def get_receivers(self): + return deepcopy(self.receivers) + + def set_receivers(self, receivers: list): + self.receivers = receivers + + def add_receivers(self, receiver): + self.receivers.append(receiver) + + def extend_receivers(self, receivers): + self.receivers.extend(receivers) + + def get_validity_period(self): + return self.validity_period + + def set_validity_period(self, validity_period: ValidityPeriod): + self.validity_period = validity_period + + +class ListEndpointsParameters(MessageParameters): + def __init__(self, + technical_message_type: str = None, + direction: str = None, + filtered: bool = False, + **kwargs): + self.technical_message_type = technical_message_type + self.direction = direction + self.filtered = filtered + super(ListEndpointsParameters, self).__init__(**kwargs) + + def get_technical_message_type(self) -> str: + return self.technical_message_type + + def set_technical_message_type(self, technical_message_type: str): + self.technical_message_type = technical_message_type + + def get_direction(self) -> str: + return self.direction + + def set_direction(self, direction: str): + self.direction = direction + + def is_filtered(self): + return self.filtered + + def set_filtered(self, filtered: bool): + self.filtered = filtered + + +class SubscriptionParameters(MessageParameters): + def __init__(self, + subscription_items: List[Subscription.MessageTypeSubscriptionItem] = None, + **kwargs): + self.subscription_items = subscription_items if subscription_items else [] + super(SubscriptionParameters, self).__init__(**kwargs) + + def get_subscription_items(self) -> List[Subscription.MessageTypeSubscriptionItem]: + return self.subscription_items + + def set_subscription_items(self, subscription_items: List[Subscription.MessageTypeSubscriptionItem]) -> None: + self.subscription_items = subscription_items + + def add_subscription_items(self, subscription_item: Subscription.MessageTypeSubscriptionItem) -> None: + self.subscription_items.append(subscription_item) + + def extend_direction(self, subscription_items: List[Subscription.MessageTypeSubscriptionItem]) -> None: + self.subscription_items.extend(subscription_items) From e759732d20dca6edef7c536c7cf1147f933abf02 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 6 Oct 2021 02:23:07 +0300 Subject: [PATCH 26/48] Implement MEssagingServices classes --- messaging/services/__init__.py | 0 messaging/services/cloud/__init__.py | 0 messaging/services/commons.py | 86 ++++++++++++ messaging/services/http/__init__.py | 0 messaging/services/messaging.py | 189 +++++++++++++++++++++++++++ 5 files changed, 275 insertions(+) create mode 100644 messaging/services/__init__.py create mode 100644 messaging/services/cloud/__init__.py create mode 100644 messaging/services/commons.py create mode 100644 messaging/services/http/__init__.py create mode 100644 messaging/services/messaging.py diff --git a/messaging/services/__init__.py b/messaging/services/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/services/cloud/__init__.py b/messaging/services/cloud/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/services/commons.py b/messaging/services/commons.py new file mode 100644 index 00000000..a05cdcc3 --- /dev/null +++ b/messaging/services/commons.py @@ -0,0 +1,86 @@ +from abc import ABC, abstractmethod + +import requests + +from messaging.certification import create_certificate_file +from messaging.clients.mqtt import MqttClient +from messaging.messages import Message +from messaging.request import MessageRequest +from messaging.result import MessagingResult + + +class AbstractMessagingClient(ABC): + + def create_message_request(self, parameters) -> MessageRequest: + messages = [] + for encoded_message in parameters.get_encoded_messages(): + message = Message(encoded_message) + messages.append(message) + message_request = MessageRequest( + parameters.get_sensor_alternate_id(), + parameters.get_capability_alternate_id(), + messages + ) + return message_request + + @abstractmethod + def send(self, parameters): + ... + + +class HttpMessagingService(AbstractMessagingClient): + + def __init__(self, onboarding_response): + self.onboarding_response = onboarding_response + + def send(self, parameters) -> MessagingResult: + request = self.create_message_request(parameters) + response = requests.post( + url=parameters.get_onboarding_response().get_connection_criteria()["measures"], + headers={"Content-type": "application/json"}, + data=request.json_serialize(), + # TODO: improve create_certificate_file() + # verify=create_certificate_file(parameters.get_onboarding_response()), + # cert=create_certificate_file(parameters.get_onboarding_response()), + ) + result = MessagingResult([parameters.get_message_id()]) + return result + + def subscribe(self): + pass + + def unsubscribe(self): + pass + + +class MqttMessagingService(AbstractMessagingClient): + + def __init__(self, + onboarding_response, + on_message_callback: callable = None, + ): + + self.onboarding_response = onboarding_response + self.client = MqttClient( + client_id=self.onboarding_response.get_client_id(), + on_message_callback=on_message_callback, + ) + self.client.connect( + self.onboarding_response.get_connection_criteria()["host"], + self.onboarding_response.get_connection_criteria()["port"] + ) + + def send(self, parameters, qos: int = 0) -> MessagingResult: + mqtt_payload = self.create_message_request(parameters) + self.client.publish( + self.onboarding_response.get_connection_criteria()["measures"], mqtt_payload, + qos=qos + ) + result = MessagingResult([parameters.get_message_id()]) + return result + + def subscribe(self): + pass + + def unsubscribe(self): + pass diff --git a/messaging/services/http/__init__.py b/messaging/services/http/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/messaging/services/messaging.py b/messaging/services/messaging.py new file mode 100644 index 00000000..06ca7a85 --- /dev/null +++ b/messaging/services/messaging.py @@ -0,0 +1,189 @@ +from generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery +from generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification +from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageConfirm +from generated.messaging.request.request_pb2 import RequestEnvelope +from messaging.encode import encode_message +from messaging.enums import TechnicalMessageType +from messaging.messages import EncodedMessage +from messaging.parameters.dto import MessageParameters, MessagingParameters +from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, CapabilityParameters, \ + FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, SubscriptionParameters +from utils.type_url import TypeUrl +from utils.uuid_util import new_uuid + + +class AbstractService: + + def __init__(self, messaging_service): + self.messaging_service = messaging_service + + def send(self, parameters): + messaging_parameters = MessagingParameters( + onboarding_response=parameters.get_onboarding_response(), + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + ) + encoded_messages = self.encode(parameters) + messaging_parameters.set_encoded_messages([encoded_messages.get_content()]) + return self.messaging_service.send(messaging_parameters) + + @staticmethod + def encode(*args, **kwargs) -> EncodedMessage: + ... + + +class CapabilityService(AbstractService): + + @staticmethod + def encode(parameters: CapabilityParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.CAPABILITIES.value + ) + + capability_specification = CapabilitySpecification( + app_certification_id=parameters.get_application_id(), + app_certification_version_id=parameters.get_certification_version_id(), + enable_push_notifications=parameters.get_enable_push_notification() + ) + if parameters.get_capability_parameters(): + capability_specification.capabilities = parameters.get_capability_parameters() + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(CapabilitySpecification.__name__), + value=capability_specification.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class FeedConfirmService(AbstractService): + + @staticmethod + def encode(parameters: FeedConfirmParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.FEED_CONFIRM.value + ) + + message_confirm = MessageConfirm( + message_ids=parameters.get_message_ids() + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(MessageConfirm.__name__), + value=message_confirm.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class FeedDeleteService(AbstractService): + + @staticmethod + def encode(parameters: FeedDeleteParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.FEED_CONFIRM.value + ) + + message_confirm = MessageConfirm( + message_ids=parameters.get_message_ids() + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(MessageConfirm.__name__), + value=message_confirm.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class ListEndpointsService(AbstractService): + + @staticmethod + def encode(parameters: ListEndpointsParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.LIST_ENDPOINTS.value if parameters.is_filtered() + else TechnicalMessageType.LIST_ENDPOINTS_UNFILTERED.value + ) + + list_endpoints_query = ListEndpointsQuery( + technical_message_type=parameters.get_technical_message_type(), + direction=parameters.get_direction() + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(ListEndpointsQuery.__name__), + value=list_endpoints_query.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class SubscriptionService(AbstractService): + + @staticmethod + def encode(parameters: SubscriptionParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.SUBSCRIPTION.value + ) + + subscription = Subscription( + technical_message_types=parameters.get_subscription_items(), + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(Subscription.__name__), + value=subscription.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message From 59fcaeac8fb914e74a0262b6bda6276b120aec4c Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 11:00:11 +0300 Subject: [PATCH 27/48] Add AR Public Keys to handle signature verification --- constants/keys.py | 0 environments/environments.py | 11 +++++++++++ environments/keys.py | 19 +++++++++++++++++++ 3 files changed, 30 insertions(+) delete mode 100644 constants/keys.py create mode 100644 environments/keys.py diff --git a/constants/keys.py b/constants/keys.py deleted file mode 100644 index e69de29b..00000000 diff --git a/environments/environments.py b/environments/environments.py index 9e6d75b2..f33a195b 100644 --- a/environments/environments.py +++ b/environments/environments.py @@ -1,3 +1,5 @@ +from environments.keys import AR_QA_PUBLIC_KEY, AR_PROD_PUBLIC_KEY + class BaseEnvironment: _AGRIROUTER_LOGIN_URL = "/app" @@ -10,6 +12,8 @@ class BaseEnvironment: _API_PREFIX = "" _REGISTRATION_SERVICE_URL = "" + AR_PUBLIC_KEY = None + def get_base_url(self) -> str: return self._ENV_BASE_URL @@ -45,14 +49,21 @@ def get_secured_onboarding_authorization_url(self, application_id, response_type def get_mqtt_server_url(self, host, port) -> str: return self._MQTT_URL_TEMPLATE.format(host=host, port=port) + def get_env_public_key(self): + return self.AR_PUBLIC_KEY + class ProductionEnvironment(BaseEnvironment): _ENV_BASE_URL = "https://goto.my-agrirouter.com" _API_PREFIX = "/api/v1.0" _REGISTRATION_SERVICE_URL = "https://onboard.my-agrirouter.com" + AR_PUBLIC_KEY = AR_PROD_PUBLIC_KEY + class QAEnvironment(BaseEnvironment): _ENV_BASE_URL = "https://agrirouter-qa.cfapps.eu10.hana.ondemand.com" _API_PREFIX = "/api/v1.0" _REGISTRATION_SERVICE_URL = "https://agrirouter-registration-service-hubqa-eu10.cfapps.eu10.hana.ondemand.com" + + AR_PUBLIC_KEY = AR_QA_PUBLIC_KEY diff --git a/environments/keys.py b/environments/keys.py new file mode 100644 index 00000000..7ed3a292 --- /dev/null +++ b/environments/keys.py @@ -0,0 +1,19 @@ +AR_QA_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\n" \ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8xF9661acn+iS+QS+9Y\n" \ + "3HvTfUVcismzbuvxHgHA7YeoOUFxyj3lkaTnXm7hzQe4wDEDgwpJSGAzxIIYSUXe\n" \ + "8EsWLorg5O0tRexx5SP3+kj1i83DATBJCXP7k+bAF4u2FVJphC1m2BfLxelGLjzx\n" \ + "VAS/v6+EwvYaT1AI9FFqW/a2o92IsVPOh9oM9eds3lBOAbH/8XrmVIeHofw+XbTH\n" \ + "1/7MLD6IE2+HbEeY0F96nioXArdQWXcjUQsTch+p0p9eqh23Ak4ef5oGcZhNd4yp\n" \ + "Y8M6ppvIMiXkgWSPJevCJjhxRJRmndY+ajYGx7CLePx7wNvxXWtkng3yh+7WiZ/Y\n" \ + "qwIDAQAB\n" \ + "-----END PUBLIC KEY-----" + +AR_PROD_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\n" \ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCxD31sYtzH9NTfZ6n8H\n" \ + "+H/QgOaoTL9GAakplAsdwYSLjBpgYMZOHIgkdM9ksRP8WsITChtZtxrCnBjR8bap\n" \ + "ekPT/pM9zPZlNEPxUlylJNwwTWjzTJP03+Yr07Q8v8fTJ5VWzAHlHtGQ/sI7yXA8\n" \ + "pzruTNre1MzxO3lkljt2Q2e7CVXAp1b53BghgysppL9Bl7NK1R+vdWSs0B1Db/Gj\n" \ + "alOkWUnhivTjRMX61RGDCQSVSEaX12EvJX7FooAsW3NFeZCgeZGWEa5ZMALIiBL4\n" \ + "GNASOOHju7ewlYjkyGIRxxAoc3C0w5dg1qlLiAFWToYwgDOcUpLRjU/7bzGiGvp8\n" \ + "RwIDAQAB\n" \ + "-----END PUBLIC KEY-----" From a9301247cadf38d841b49b7ccc36a3fe4d8388d3 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 11:01:06 +0300 Subject: [PATCH 28/48] Refactor auth --- auth/auth.py | 4 ++-- auth/response.py | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/auth/auth.py b/auth/auth.py index d0525e82..b6853236 100644 --- a/auth/auth.py +++ b/auth/auth.py @@ -26,8 +26,8 @@ def extract_auth_response(self, url: str) -> AuthResponse: query_params = self._extract_query_params(parsed_url.query) return AuthResponse(query_params) - @staticmethod - def verify_auth_response(response, public_key): + def verify_auth_response(self, response, public_key=None): + public_key = public_key if public_key else self._environment.get_env_public_key() response.verify(public_key) @staticmethod diff --git a/auth/response.py b/auth/response.py index 40a6b9c3..3015a538 100644 --- a/auth/response.py +++ b/auth/response.py @@ -22,7 +22,16 @@ def __init__(self, query_params): self._token = query_params.get(self.TOKEN_KEY, None) self._error = query_params.get(self.ERROR_KEY, None) self.is_successful = not bool(self._error) - self.is_valid = False + self._was_verified = False + self._is_valid = False + + @property + def is_valid(self): + if not self._was_verified: + raise PermissionError("The response was not verified yet. Please verify first. " + "You can access is_valid only after verifying") + + return self._is_valid def verify(self, public_key) -> None: """ @@ -37,13 +46,14 @@ def verify(self, public_key) -> None: encoded_data = self._state + self._token unquoted_signature = unquote(self._signature) encoded_signature = base64.b64decode(unquoted_signature.encode("utf-8")) + self._was_verified = True try: verify_signature(encoded_data, encoded_signature, public_key) except InvalidSignature: print("Response is invalid: invalid signature.") - self.is_valid = False + self._is_valid = False - self.is_valid = True + self._is_valid = True @staticmethod def decode_token(token: Union[str, bytes]) -> dict: @@ -63,7 +73,3 @@ def get_auth_result(self) -> dict: self.TOKEN_KEY: self._token, self.CRED_KEY: decoded_token } - - -def decorator(func): - pass From 331f3d2f731f6b02acaf44e67beb95be67d8f3a0 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 12:00:57 +0300 Subject: [PATCH 29/48] Implement QueryMessagesService, QueryHeaderService --- messaging/parameters/service.py | 84 +++++++++++++++++++++++++++++++++ messaging/services/messaging.py | 69 ++++++++++++++++++++++++++- 2 files changed, 151 insertions(+), 2 deletions(-) diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py index e3b20e5c..215a776d 100644 --- a/messaging/parameters/service.py +++ b/messaging/parameters/service.py @@ -198,6 +198,90 @@ def set_filtered(self, filtered: bool): self.filtered = filtered +class QueryMessageParameters(MessageParameters): + def __init__(self, + senders: list = None, + message_ids: list = None, + validity_period: ValidityPeriod = None, + **kwargs): + self.senders = senders + self.message_ids = message_ids + self.validity_period = validity_period + super(QueryMessageParameters, self).__init__(**kwargs) + + def get_senders(self) -> list: + return self.senders + + def set_senders(self, senders: list) -> None: + self.senders = senders + + def add_senders(self, sender) -> None: + self.senders.append(sender) + + def extend_senders(self, senders) -> None: + self.senders.extend(senders) + + def get_message_ids(self) -> list: + return self.message_ids + + def set_message_ids(self, message_ids: list) -> None: + self.message_ids = message_ids + + def add_message_ids(self, message_id) -> None: + self.message_ids.append(message_id) + + def extend_message_ids(self, message_ids) -> None: + self.message_ids.extend(message_ids) + + def get_validity_period(self) -> ValidityPeriod: + return self.validity_period + + def set_validity_period(self, validity_period: list) -> None: + self.validity_period = validity_period + + +class QueryHeaderParameters(MessageParameters): + def __init__(self, + senders: list = None, + message_ids: list = None, + validity_period: ValidityPeriod = None, + **kwargs): + self.senders = senders + self.message_ids = message_ids + self.validity_period = validity_period + super(QueryHeaderParameters, self).__init__(**kwargs) + + def get_senders(self) -> list: + return self.senders + + def set_senders(self, senders: list) -> None: + self.senders = senders + + def add_senders(self, sender) -> None: + self.senders.append(sender) + + def extend_senders(self, senders) -> None: + self.senders.extend(senders) + + def get_message_ids(self) -> list: + return self.message_ids + + def set_message_ids(self, message_ids: list) -> None: + self.message_ids = message_ids + + def add_message_ids(self, message_id) -> None: + self.message_ids.append(message_id) + + def extend_message_ids(self, message_ids) -> None: + self.message_ids.extend(message_ids) + + def get_validity_period(self) -> ValidityPeriod: + return self.validity_period + + def set_validity_period(self, validity_period: list) -> None: + self.validity_period = validity_period + + class SubscriptionParameters(MessageParameters): def __init__(self, subscription_items: List[Subscription.MessageTypeSubscriptionItem] = None, diff --git a/messaging/services/messaging.py b/messaging/services/messaging.py index 06ca7a85..83190187 100644 --- a/messaging/services/messaging.py +++ b/messaging/services/messaging.py @@ -1,14 +1,15 @@ from generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery from generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription -from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageConfirm +from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageConfirm, MessageQuery from generated.messaging.request.request_pb2 import RequestEnvelope from messaging.encode import encode_message from messaging.enums import TechnicalMessageType from messaging.messages import EncodedMessage from messaging.parameters.dto import MessageParameters, MessagingParameters from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, CapabilityParameters, \ - FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, SubscriptionParameters + FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, SubscriptionParameters, QueryHeaderParameters, \ + QueryMessageParameters from utils.type_url import TypeUrl from utils.uuid_util import new_uuid @@ -159,6 +160,70 @@ def encode(parameters: ListEndpointsParameters) -> EncodedMessage: return encoded_message +class QueryMessagesService(AbstractService): + + @staticmethod + def encode(parameters: QueryMessageParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.FEED_MESSAGE_QUERY.value + ) + + message_query = MessageQuery( + senders=parameters.get_senders(), + message_ids=parameters.get_message_ids(), + validity_period=parameters.get_validity_period(), + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(MessageQuery.__name__), + value=message_query.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class QueryHeaderService(AbstractService): + + @staticmethod + def encode(parameters: QueryHeaderParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.FEED_HEADER_QUERY.value + ) + + message_query = MessageQuery( + senders=parameters.get_senders(), + message_ids=parameters.get_message_ids(), + validity_period=parameters.get_validity_period(), + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(MessageQuery.__name__), + value=message_query.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + class SubscriptionService(AbstractService): @staticmethod From e0e67a62a4ee120420f6c2c08dbbf960213cd33b Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 13:22:53 +0300 Subject: [PATCH 30/48] Implement OutboxService --- logging/__init__.py | 0 logging/logging.py | 5 +++ messaging/exceptions.py | 4 ++ messaging/messages.py | 74 +++++++++++++++++++++++++++++++ messaging/result.py | 37 +++++++++++++++- messaging/services/commons.py | 3 -- messaging/services/http/outbox.py | 21 +++++++++ my_test.py | 68 ++++++++++++++++++++++++++++ 8 files changed, 208 insertions(+), 4 deletions(-) create mode 100644 logging/__init__.py create mode 100644 logging/logging.py create mode 100644 messaging/services/http/outbox.py create mode 100644 my_test.py diff --git a/logging/__init__.py b/logging/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/logging/logging.py b/logging/logging.py new file mode 100644 index 00000000..4684610d --- /dev/null +++ b/logging/logging.py @@ -0,0 +1,5 @@ +import logging + + +class LoggingMixin: + pass diff --git a/messaging/exceptions.py b/messaging/exceptions.py index 84345c5d..c02bff86 100644 --- a/messaging/exceptions.py +++ b/messaging/exceptions.py @@ -3,3 +3,7 @@ class TypeUrlNotFoundError(AgriRouuterBaseException): _message = "Given type url not found" + + +class WrongFieldError(AgriRouuterBaseException): + _message = "Unknown field" diff --git a/messaging/messages.py b/messaging/messages.py index ed411e81..f470fa0d 100644 --- a/messaging/messages.py +++ b/messaging/messages.py @@ -1,4 +1,8 @@ +import json from datetime import datetime, timezone +from typing import Union, List, Dict + +from messaging.exceptions import WrongFieldError class EncodedMessage: @@ -39,3 +43,73 @@ def json_serialize(self) -> dict: self.MESSAGE: self.content, self.TIMESTAMP: self.timestamp.strftime("%Y-%m-%dT%H:%M:%S.%fZ") } + + +class Command: + MESSAGE = "message" + + def __init__(self, message: str = None): + self.message = message + + def json_deserialize(self, data: Union[Dict[str, str], str]): + messages = data if type(data) == list else json.loads(data) + for key, value in messages.keys(): + if key == self.MESSAGE: + self.message = value + else: + raise WrongFieldError(f"Unknown field `{key}` for {self.__class__}") + + def get_message(self) -> str: + return self.message + + def set_message(self, message: str): + self.message = message + + +class OutboxMessage: + + CAPABILITY_ALTERNATE_ID = "capabilityAlternateId" + SENSOR_ALTERNATE_ID = "sensorAlternateId" + COMMAND = "command" + + def __init__(self, + capability_alternate_id: str = None, + sensor_alternate_id: str = None, + command: Command = None, + ): + self.capability_alternate_id = capability_alternate_id + self.sensor_alternate_id = sensor_alternate_id + self.command = command + + def json_deserialize(self, data: Union[list, str]): + data = data if type(data) == list else json.loads(data) + for key, value in data.keys(): + if key == self.CAPABILITY_ALTERNATE_ID: + self.capability_alternate_id = value + elif key == self.SENSOR_ALTERNATE_ID: + self.sensor_alternate_id = value + elif key == self.COMMAND: + self.command = Command.json_deserialize(value) + else: + raise WrongFieldError(f"Unknown field `{key}` for {self.__class__}") + + def get_capability_alternate_id(self) -> str: + return self.capability_alternate_id + + def set_capability_alternate_id(self, capability_alternate_id: str) -> None: + self.capability_alternate_id = capability_alternate_id + + def get_sensor_alternate_id(self) -> str: + return self.sensor_alternate_id + + def set_sensor_alternate_id(self, sensor_alternate_id: str) -> None: + self.sensor_alternate_id = sensor_alternate_id + + def get_command(self) -> Command: + return self.command + + def set_command(self, command: Command) -> None: + self.command = command + + def json_deserialize(self): + pass diff --git a/messaging/result.py b/messaging/result.py index 5a77f374..3c3c4292 100644 --- a/messaging/result.py +++ b/messaging/result.py @@ -1,4 +1,7 @@ -from typing import List +import json +from typing import List, Union + +from messaging.messages import OutboxMessage class MessagingResult: @@ -10,3 +13,35 @@ def set_messages_ids(self, messages_ids): def get_messages_ids(self): return self.messages_ids + + +class OutboxResponse: + def __init__(self, + status_code: int = None, + messages: List[OutboxMessage] = None + ): + + self.status_code = status_code + self.messages = messages if messages else [] + + def json_deserialize(self, data: Union[list, str]): + messages = data if type(data) == list else json.loads(data) + self.set_messages([OutboxMessage.json_deserialize(message) for message in messages]) + + def get_status_code(self) -> int: + return self.status_code + + def set_status_code(self, status_code: int) -> None: + self.status_code = status_code + + def get_messages(self) -> List[OutboxMessage]: + return self.messages + + def set_messages(self, messages: List[OutboxMessage]) -> None: + self.messages = messages + + def add_messages(self, message: OutboxMessage) -> None: + self.messages.append(message) + + def extend_messages(self, messages: List[OutboxMessage]) -> None: + self.messages.extend(messages) diff --git a/messaging/services/commons.py b/messaging/services/commons.py index a05cdcc3..d45764e2 100644 --- a/messaging/services/commons.py +++ b/messaging/services/commons.py @@ -30,9 +30,6 @@ def send(self, parameters): class HttpMessagingService(AbstractMessagingClient): - def __init__(self, onboarding_response): - self.onboarding_response = onboarding_response - def send(self, parameters) -> MessagingResult: request = self.create_message_request(parameters) response = requests.post( diff --git a/messaging/services/http/outbox.py b/messaging/services/http/outbox.py new file mode 100644 index 00000000..1172bc8b --- /dev/null +++ b/messaging/services/http/outbox.py @@ -0,0 +1,21 @@ +import requests + +from messaging.result import OutboxResponse + + +class OutboxService: + + def fetch(self, onboarding_response) -> OutboxResponse: + response = requests.get( + url=onboarding_response.get_connection_criteria()["commands"], + headers={"Content-type": "application/json"}, + # TODO: improve create_certificate_file() + # verify=create_certificate_file(parameters.get_onboarding_response()), + # cert=create_certificate_file(parameters.get_onboarding_response()), + ) + + outbox_response = OutboxResponse(status_code=response.status_code) + outbox_response.json_deserialize(response.json()["contents"]) + + return outbox_response + diff --git a/my_test.py b/my_test.py new file mode 100644 index 00000000..a081ad1d --- /dev/null +++ b/my_test.py @@ -0,0 +1,68 @@ +import os + +from auth.auth import Authorization +from auth.parameters import AuthUrlParameter +from onboarding.onboarding import SoftwareOnboarding +from onboarding.parameters import SoftwareOnboardingParameter + +APPLICATION_ID = os.getenv("APPLICATION_ID", "8c947a45-c57d-42d2-affc-206e21d63a50") +ENV = os.getenv("ENVIRONMENT", "QA") +token = "http://fuf.me/?state=46c81f94-d117-4658-9a38-a85692448219&token=eyJhY2NvdW50IjoiMGJhMjRlZWUtYzMwYi00N2U1LWJkYzktNzcwM2NmYjEzNmEwIiwicmVnY29kZSI6IjhlYWNiMTk4ZmMiLCJleHBpcmVzIjoiMjAyMS0wOS0yM1QxNjowODo0My44ODhaIn0%3D&signature=SUL9SQMWAfG4%2FEyT0rejkRfAyioxJIOs4sxI5wxeB8TkIiv0MR6YFKw1tPIkM4lluZKHEIgr5WvM3b3SvII9TtEbzZf995R8GIlNP6yyP51TF%2F4vZMbkMjq%2B2g1o0qw%2FyuDQcGz1RpOJWCuBOjMXu9quzGO8xvDW7LjrN%2BMA9rzJZYb1toNf51O0eO4BDWL5L1oLvrKrqvaErKcIoRJtTVJ51awOWMARDkGZahcRdWrZbdGUbQwIyKJQu4vH8%2B4ytlyXPSWEYwKE2VFoAjhzWsKODdRRxDbNNLWsW8sxKamdXjSOC8inHUFsFNoxLbwZEnKROm2s3OfKGYuibXOpXw%3D%3D" +private_key = os.getenv("PRIVATE_KEY", + "-----BEGIN PRIVATE KEY-----\n" + "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8WVUWBhEiQYvo\n" + "DL9q/Z5LbIhqDtcdFYWBUV7A96AXJaNRA9J7m3a6es05S7pRynv9yT8i+bhz/qDf\n" + "18MPOaqLglTw58ylVtTGmIlIZr85KJecO5aQnKN1pz8LyKnQSk4IWMBZ0T6mcaEO\n" + "fLVcDCmLi3T9a07xT4g5i2PGnLI6nd1pf3sLuKEzUjp455xU3oJrP0HfwSc+DXZQ\n" + "YDk2Rk6mfPgEczBhRmqDFp44+WHgyq4CcXl92M5XdOSYVaRs/W6fcEmRTqjBxp1u\n" + "M3kNAIaOC4XNfxVV8kSCfZW0gVtuGqxGK+80OZay3Vc1nQZGm+IUVBHKbPVauhXS\n" + "UH0/28qbAgMBAAECggEANVX8vMBaEL/L/RnDCOqp7UTeOl5adx91j2G5+d4FhRiA\n" + "73usGpmzHOqSe/OgXvH+e6cGDIL3w00rREgGsiSL0XbGU/PoJTf6CAUA9zI1W1vN\n" + "1w2evPPGbBZAybb4s4WfJEjxq12QJrUNvRr+hoLhLuV+axb8o2P4uQbqab9Mz0ER\n" + "lczCbHi4VDs1fwmNR3o47T1J4Qffzv1nMlor3pSrDzRDebic7/DC5JFkYZNGUtHk\n" + "jKDF5Uv7Vzxgb4Of+i3JA5mRMqvG33pdenvvetwl9X69WOiC29bVlymSHyybBE4A\n" + "ItfCAHIiY3nUL7UqzoIXpsyPs3ftkiy3Hn7isVSpLQKBgQDjadkGlqIgXCKZ8RS6\n" + "a4iLTTTlh8Ur+vMrejBLPul1oxz2dRWZy8zykfNN2MPz7q2xT8wXGuxgj+jei/fi\n" + "Gk08+UudMhV5Dtshb3fFq0NFCBe1ZUEX/wAcKC4Ed9xuuHpe7HOKAG0AsnzS8MPC\n" + "lcMiL1/vz0GuRbsiyMY6hXweZQKBgQDUBmQNqOBWDTQkO/8MFHopo6Ju9iNvZ4fC\n" + "u4SWqL+5BO3nnQHAQyslsj8FNilqhgMI+zaFFbZMZPv5opBSaAR0CQanKxMe3c9I\n" + "XYkAJH2+M0fpp80LtxwShD411UDhIypzumfKe8vUXRW/8TWfl6VidfEVjxw6Rc2D\n" + "g9btI4k0/wKBgQC42plnGZq/4yTdLXJD9pUPZrrQuQQ1M8/mT3RiNclfri8kxxe/\n" + "5EG8C5dSeBkQd7sInmyve1sZQuFvxSbBy89s+NfV95gsxz6odwtMymHsAyACe0Pm\n" + "VYmpWZ/OUgAEoEAYWOuyCZaRMoT0knEOAt6TMx8wt7AUEOqE497+QvMZYQKBgQC6\n" + "ARlJenvEQjUaDKBFYrmBShK4MasIktThG0zINyZrFE35wR3GI6b4nRT4Z3mSABst\n" + "h+Vef5u8DWOYrurZwHMXsMtrYDiX/ZNZMuV7gIfnkmlmLFWQD4XLIMTKyVjvqcAW\n" + "YtOnKU+58CeiieO3LHxkkn97oF7tKEuRMtock+5M1QKBgC2fquqxXMrBEIoMGCZs\n" + "ooU5V9gOjFVKC52VWnTNgmOWTqgZuqxPJtCTN5wPvhOSggQuHPwBHa9ioshJ0dGE\n" + "6jdxGaJjAc82q2KZu9VEqoH/Xa2aS8dPEHwfJtzUVTia6WkrFtMFNaDMFd6byWDQ\n" + "ai+T4i2J3/SDL0BfsFWdQuje\n" + "-----END PRIVATE KEY-----" + ) + +public_key = "-----BEGIN PUBLIC KEY-----\n" \ + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFlVFgYRIkGL6Ay/av2e\n" \ + "S2yIag7XHRWFgVFewPegFyWjUQPSe5t2unrNOUu6Ucp7/ck/Ivm4c/6g39fDDzmq\n" \ + "i4JU8OfMpVbUxpiJSGa/OSiXnDuWkJyjdac/C8ip0EpOCFjAWdE+pnGhDny1XAwp\n" \ + "i4t0/WtO8U+IOYtjxpyyOp3daX97C7ihM1I6eOecVN6Caz9B38EnPg12UGA5NkZO\n" \ + "pnz4BHMwYUZqgxaeOPlh4MquAnF5fdjOV3TkmFWkbP1un3BJkU6owcadbjN5DQCG\n" \ + "jguFzX8VVfJEgn2VtIFbbhqsRivvNDmWst1XNZ0GRpviFFQRymz1WroV0lB9P9vK\n" \ + "mwIDAQAB\n" \ + "-----END PUBLIC KEY-----" + +AR_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8xF9661acn+iS+QS+9Y\n3HvTfUVcismzbuvxHgHA7YeoOUFxyj3lkaTnXm7hzQe4wDEDgwpJSGAzxIIYSUXe\n8EsWLorg5O0tRexx5SP3+kj1i83DATBJCXP7k+bAF4u2FVJphC1m2BfLxelGLjzx\nVAS/v6+EwvYaT1AI9FFqW/a2o92IsVPOh9oM9eds3lBOAbH/8XrmVIeHofw+XbTH\n1/7MLD6IE2+HbEeY0F96nioXArdQWXcjUQsTch+p0p9eqh23Ak4ef5oGcZhNd4yp\nY8M6ppvIMiXkgWSPJevCJjhxRJRmndY+ajYGx7CLePx7wNvxXWtkng3yh+7WiZ/Y\nqwIDAQAB\n-----END PUBLIC KEY-----" + + +# auth_params = AuthUrlParameter(APPLICATION_ID, "onboard") +# auth_client = Authorization(ENV) +# +# onboarding_params = params = SoftwareOnboardingParameter( +# id_="urn:myapp:code:hgas234", +# application_id="8c947a45-c57d-42d2-affc-206e21d63a50", +# certification_version_id="8c947a45-c57d-42d2-affc-206e21d63a50", +# gateway_id="2", +# utc_timestamp="2021-09-28T12:00:03.000Z", +# time_zone="+03:00", +# reg_code="437929116d" +# ) +# onboarding_client = SoftwareOnboarding("QA") + From 0f00ca2c8eb82cb6ca34e214062c57183affa75d Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 14:09:37 +0300 Subject: [PATCH 31/48] Implement CloudOnboardService, CloudOffboardService --- messaging/parameters/service.py | 46 ++++++++++++++++++ messaging/services/cloud.py | 71 ++++++++++++++++++++++++++++ messaging/services/cloud/__init__.py | 0 my_test.py | 68 -------------------------- 4 files changed, 117 insertions(+), 68 deletions(-) create mode 100644 messaging/services/cloud.py delete mode 100644 messaging/services/cloud/__init__.py delete mode 100644 my_test.py diff --git a/messaging/parameters/service.py b/messaging/parameters/service.py index 215a776d..65148835 100644 --- a/messaging/parameters/service.py +++ b/messaging/parameters/service.py @@ -62,6 +62,52 @@ def get_value(self) -> str: return self.value +class CloudOnboardParameters(MessageParameters): + + def __init__(self, + # List[EndpointRegistrationDetails] - must be defined in generated by by proto schemes, + # but they are not + onboarding_requests: list = None, + **kwargs + ): + self.onboarding_requests = onboarding_requests if onboarding_requests else [] + super(CloudOnboardParameters, self).__init__(**kwargs) + + def get_onboarding_requests(self) -> list: + return self.onboarding_requests + + def set_onboarding_requests(self, onboarding_requests: list) -> None: + self.onboarding_requests = onboarding_requests + + def add_onboarding_requests(self, onboarding_request) -> None: + self.onboarding_requests.append(onboarding_request) + + def extend_onboarding_requests(self, onboarding_requests: list) -> None: + self.onboarding_requests.extend(onboarding_requests) + + +class CloudOffboardParameters(MessageParameters): + + def __init__(self, + endpoints: List[str] = None, + **kwargs + ): + self.endpoints = endpoints if endpoints else [] + super(CloudOffboardParameters, self).__init__(**kwargs) + + def get_endpoints(self) -> List[str]: + return self.endpoints + + def set_endpoints(self, endpoints: list) -> None: + self.endpoints = endpoints + + def add_endpoints(self, endpoint: str) -> None: + self.endpoints.append(endpoint) + + def extend_endpoints(self, endpoints: List[str]) -> None: + self.endpoints.extend(endpoints) + + class CapabilityParameters(MessageParameters): def __init__(self, diff --git a/messaging/services/cloud.py b/messaging/services/cloud.py new file mode 100644 index 00000000..7349f5e3 --- /dev/null +++ b/messaging/services/cloud.py @@ -0,0 +1,71 @@ +from generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingRequest, \ + OffboardingRequest +from generated.messaging.request.request_pb2 import RequestEnvelope +from messaging.encode import encode_message +from messaging.enums import TechnicalMessageType +from messaging.messages import EncodedMessage +from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, CloudOnboardParameters, \ + CloudOffboardParameters +from messaging.services.messaging import AbstractService +from utils.type_url import TypeUrl +from utils.uuid_util import new_uuid + + +class CloudOnboardService(AbstractService): + + @staticmethod + def encode(parameters: CloudOnboardParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.CLOUD_ONBOARD_ENDPOINTS.value + ) + + onboarding_request = OnboardingRequest( + onboarding_requests=parameters.get_onboarding_requests() + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(OnboardingRequest.__name__), + value=onboarding_request.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message + + +class CloudOffboardService(AbstractService): + + @staticmethod + def encode(parameters: CloudOffboardParameters) -> EncodedMessage: + message_header_parameters = MessageHeaderParameters( + application_message_id=parameters.get_application_message_id(), + application_message_seq_no=parameters.get_application_message_seq_no(), + team_set_context_id=parameters.get_team_set_context_id(), + mode=RequestEnvelope.Mode.Value("DIRECT"), + technical_message_type=TechnicalMessageType.CLOUD_OFFBOARD_ENDPOINTS.value + ) + + offboarding_request = OffboardingRequest( + endpoints=parameters.get_endpoints() + ) + + message_payload_parameters = MessagePayloadParameters( + type_url=TypeUrl.get_type_url(OffboardingRequest.__name__), + value=offboarding_request.SerializeToString() + ) + + message_content = encode_message(message_header_parameters, message_payload_parameters) + encoded_message = EncodedMessage( + id_=new_uuid(), + content=message_content + ) + + return encoded_message diff --git a/messaging/services/cloud/__init__.py b/messaging/services/cloud/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/my_test.py b/my_test.py deleted file mode 100644 index a081ad1d..00000000 --- a/my_test.py +++ /dev/null @@ -1,68 +0,0 @@ -import os - -from auth.auth import Authorization -from auth.parameters import AuthUrlParameter -from onboarding.onboarding import SoftwareOnboarding -from onboarding.parameters import SoftwareOnboardingParameter - -APPLICATION_ID = os.getenv("APPLICATION_ID", "8c947a45-c57d-42d2-affc-206e21d63a50") -ENV = os.getenv("ENVIRONMENT", "QA") -token = "http://fuf.me/?state=46c81f94-d117-4658-9a38-a85692448219&token=eyJhY2NvdW50IjoiMGJhMjRlZWUtYzMwYi00N2U1LWJkYzktNzcwM2NmYjEzNmEwIiwicmVnY29kZSI6IjhlYWNiMTk4ZmMiLCJleHBpcmVzIjoiMjAyMS0wOS0yM1QxNjowODo0My44ODhaIn0%3D&signature=SUL9SQMWAfG4%2FEyT0rejkRfAyioxJIOs4sxI5wxeB8TkIiv0MR6YFKw1tPIkM4lluZKHEIgr5WvM3b3SvII9TtEbzZf995R8GIlNP6yyP51TF%2F4vZMbkMjq%2B2g1o0qw%2FyuDQcGz1RpOJWCuBOjMXu9quzGO8xvDW7LjrN%2BMA9rzJZYb1toNf51O0eO4BDWL5L1oLvrKrqvaErKcIoRJtTVJ51awOWMARDkGZahcRdWrZbdGUbQwIyKJQu4vH8%2B4ytlyXPSWEYwKE2VFoAjhzWsKODdRRxDbNNLWsW8sxKamdXjSOC8inHUFsFNoxLbwZEnKROm2s3OfKGYuibXOpXw%3D%3D" -private_key = os.getenv("PRIVATE_KEY", - "-----BEGIN PRIVATE KEY-----\n" - "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8WVUWBhEiQYvo\n" - "DL9q/Z5LbIhqDtcdFYWBUV7A96AXJaNRA9J7m3a6es05S7pRynv9yT8i+bhz/qDf\n" - "18MPOaqLglTw58ylVtTGmIlIZr85KJecO5aQnKN1pz8LyKnQSk4IWMBZ0T6mcaEO\n" - "fLVcDCmLi3T9a07xT4g5i2PGnLI6nd1pf3sLuKEzUjp455xU3oJrP0HfwSc+DXZQ\n" - "YDk2Rk6mfPgEczBhRmqDFp44+WHgyq4CcXl92M5XdOSYVaRs/W6fcEmRTqjBxp1u\n" - "M3kNAIaOC4XNfxVV8kSCfZW0gVtuGqxGK+80OZay3Vc1nQZGm+IUVBHKbPVauhXS\n" - "UH0/28qbAgMBAAECggEANVX8vMBaEL/L/RnDCOqp7UTeOl5adx91j2G5+d4FhRiA\n" - "73usGpmzHOqSe/OgXvH+e6cGDIL3w00rREgGsiSL0XbGU/PoJTf6CAUA9zI1W1vN\n" - "1w2evPPGbBZAybb4s4WfJEjxq12QJrUNvRr+hoLhLuV+axb8o2P4uQbqab9Mz0ER\n" - "lczCbHi4VDs1fwmNR3o47T1J4Qffzv1nMlor3pSrDzRDebic7/DC5JFkYZNGUtHk\n" - "jKDF5Uv7Vzxgb4Of+i3JA5mRMqvG33pdenvvetwl9X69WOiC29bVlymSHyybBE4A\n" - "ItfCAHIiY3nUL7UqzoIXpsyPs3ftkiy3Hn7isVSpLQKBgQDjadkGlqIgXCKZ8RS6\n" - "a4iLTTTlh8Ur+vMrejBLPul1oxz2dRWZy8zykfNN2MPz7q2xT8wXGuxgj+jei/fi\n" - "Gk08+UudMhV5Dtshb3fFq0NFCBe1ZUEX/wAcKC4Ed9xuuHpe7HOKAG0AsnzS8MPC\n" - "lcMiL1/vz0GuRbsiyMY6hXweZQKBgQDUBmQNqOBWDTQkO/8MFHopo6Ju9iNvZ4fC\n" - "u4SWqL+5BO3nnQHAQyslsj8FNilqhgMI+zaFFbZMZPv5opBSaAR0CQanKxMe3c9I\n" - "XYkAJH2+M0fpp80LtxwShD411UDhIypzumfKe8vUXRW/8TWfl6VidfEVjxw6Rc2D\n" - "g9btI4k0/wKBgQC42plnGZq/4yTdLXJD9pUPZrrQuQQ1M8/mT3RiNclfri8kxxe/\n" - "5EG8C5dSeBkQd7sInmyve1sZQuFvxSbBy89s+NfV95gsxz6odwtMymHsAyACe0Pm\n" - "VYmpWZ/OUgAEoEAYWOuyCZaRMoT0knEOAt6TMx8wt7AUEOqE497+QvMZYQKBgQC6\n" - "ARlJenvEQjUaDKBFYrmBShK4MasIktThG0zINyZrFE35wR3GI6b4nRT4Z3mSABst\n" - "h+Vef5u8DWOYrurZwHMXsMtrYDiX/ZNZMuV7gIfnkmlmLFWQD4XLIMTKyVjvqcAW\n" - "YtOnKU+58CeiieO3LHxkkn97oF7tKEuRMtock+5M1QKBgC2fquqxXMrBEIoMGCZs\n" - "ooU5V9gOjFVKC52VWnTNgmOWTqgZuqxPJtCTN5wPvhOSggQuHPwBHa9ioshJ0dGE\n" - "6jdxGaJjAc82q2KZu9VEqoH/Xa2aS8dPEHwfJtzUVTia6WkrFtMFNaDMFd6byWDQ\n" - "ai+T4i2J3/SDL0BfsFWdQuje\n" - "-----END PRIVATE KEY-----" - ) - -public_key = "-----BEGIN PUBLIC KEY-----\n" \ - "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFlVFgYRIkGL6Ay/av2e\n" \ - "S2yIag7XHRWFgVFewPegFyWjUQPSe5t2unrNOUu6Ucp7/ck/Ivm4c/6g39fDDzmq\n" \ - "i4JU8OfMpVbUxpiJSGa/OSiXnDuWkJyjdac/C8ip0EpOCFjAWdE+pnGhDny1XAwp\n" \ - "i4t0/WtO8U+IOYtjxpyyOp3daX97C7ihM1I6eOecVN6Caz9B38EnPg12UGA5NkZO\n" \ - "pnz4BHMwYUZqgxaeOPlh4MquAnF5fdjOV3TkmFWkbP1un3BJkU6owcadbjN5DQCG\n" \ - "jguFzX8VVfJEgn2VtIFbbhqsRivvNDmWst1XNZ0GRpviFFQRymz1WroV0lB9P9vK\n" \ - "mwIDAQAB\n" \ - "-----END PUBLIC KEY-----" - -AR_PUBLIC_KEY = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8xF9661acn+iS+QS+9Y\n3HvTfUVcismzbuvxHgHA7YeoOUFxyj3lkaTnXm7hzQe4wDEDgwpJSGAzxIIYSUXe\n8EsWLorg5O0tRexx5SP3+kj1i83DATBJCXP7k+bAF4u2FVJphC1m2BfLxelGLjzx\nVAS/v6+EwvYaT1AI9FFqW/a2o92IsVPOh9oM9eds3lBOAbH/8XrmVIeHofw+XbTH\n1/7MLD6IE2+HbEeY0F96nioXArdQWXcjUQsTch+p0p9eqh23Ak4ef5oGcZhNd4yp\nY8M6ppvIMiXkgWSPJevCJjhxRJRmndY+ajYGx7CLePx7wNvxXWtkng3yh+7WiZ/Y\nqwIDAQAB\n-----END PUBLIC KEY-----" - - -# auth_params = AuthUrlParameter(APPLICATION_ID, "onboard") -# auth_client = Authorization(ENV) -# -# onboarding_params = params = SoftwareOnboardingParameter( -# id_="urn:myapp:code:hgas234", -# application_id="8c947a45-c57d-42d2-affc-206e21d63a50", -# certification_version_id="8c947a45-c57d-42d2-affc-206e21d63a50", -# gateway_id="2", -# utc_timestamp="2021-09-28T12:00:03.000Z", -# time_zone="+03:00", -# reg_code="437929116d" -# ) -# onboarding_client = SoftwareOnboarding("QA") - From 5392b9ad582a068bfab8708b73768cbf584c478a Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 14:58:16 +0300 Subject: [PATCH 32/48] Fix SoftwareOnboardingHeader.sign() method --- onboarding/headers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/onboarding/headers.py b/onboarding/headers.py index 8ebf313e..d9715861 100644 --- a/onboarding/headers.py +++ b/onboarding/headers.py @@ -35,7 +35,7 @@ def get_header(self) -> dict: return self.params def sign(self, signature): - self.params["X-Agrirouter-Signature"] = signature + self.params["X-Agrirouter-Signature"] = signature.decode() def _set_params(self, reg_code: str, application_id: str, signature: str, content_type: str): header = dict() From 440ff75ce71a237a12fd3b0320d3d0a1c2f8aa23 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 15:10:24 +0300 Subject: [PATCH 33/48] Fix imports --- agrirouter/constants/keys.py | 0 agrirouter/environments/enums.py | 0 agrirouter/environments/environments.py | 2 +- .../cloud_virtualized_app_registration_pb2.py | 2 +- .../generated}/commons/chunk_pb2.py | 0 .../generated}/commons/message_pb2.py | 0 .../request/payload/account/endpoints_pb2.py | 0 .../payload/endpoint/capabilities_pb2.py | 0 .../payload/endpoint/subscription_pb2.py | 0 .../request/payload/feed/feed_requests_pb2.py | 0 .../messaging/request/request_pb2.py | 4 +-- .../response/payload/account/endpoints_pb2.py | 0 .../payload/endpoint/capability_pb2.py | 0 .../payload/feed/feed_response_pb2.py | 4 +-- .../payload/feed/push_notification_pb2.py | 4 +-- .../messaging/response/response_pb2.py | 0 .../generated}/settings/dh_settings_pb2.py | 0 {logging => agrirouter/messaging}/__init__.py | 0 .../messaging}/certification.py | 2 +- .../messaging/clients}/__init__.py | 0 .../messaging}/clients/http.py | 0 .../messaging}/clients/mqtt.py | 0 {messaging => agrirouter/messaging}/decode.py | 13 +++++---- {messaging => agrirouter/messaging}/encode.py | 8 +++--- {messaging => agrirouter/messaging}/enums.py | 2 +- .../messaging}/exceptions.py | 2 +- .../messaging}/messages.py | 2 +- .../messaging/parameters}/__init__.py | 0 .../messaging}/parameters/dto.py | 4 +-- .../messaging}/parameters/service.py | 8 +++--- .../messaging}/request.py | 2 +- {messaging => agrirouter/messaging}/result.py | 2 +- .../messaging/services}/__init__.py | 0 .../messaging}/services/cloud.py | 20 ++++++------- .../messaging}/services/commons.py | 10 +++---- .../messaging/services/http}/__init__.py | 0 .../messaging}/services/http/outbox.py | 0 .../messaging}/services/messaging.py | 28 +++++++++---------- .../http => agrirouter/utils}/__init__.py | 0 {utils => agrirouter/utils}/type_url.py | 20 +++++++------ {utils => agrirouter/utils}/utc_time_util.py | 0 {utils => agrirouter/utils}/uuid_util.py | 0 logging/logging.py | 5 ---- utils/__init__.py | 0 44 files changed, 71 insertions(+), 73 deletions(-) delete mode 100644 agrirouter/constants/keys.py delete mode 100644 agrirouter/environments/enums.py rename {generated => agrirouter/generated}/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py (99%) rename {generated => agrirouter/generated}/commons/chunk_pb2.py (100%) rename {generated => agrirouter/generated}/commons/message_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/request/payload/account/endpoints_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/request/payload/endpoint/capabilities_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/request/payload/endpoint/subscription_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/request/payload/feed/feed_requests_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/request/request_pb2.py (98%) rename {generated => agrirouter/generated}/messaging/response/payload/account/endpoints_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/response/payload/endpoint/capability_pb2.py (100%) rename {generated => agrirouter/generated}/messaging/response/payload/feed/feed_response_pb2.py (99%) rename {generated => agrirouter/generated}/messaging/response/payload/feed/push_notification_pb2.py (98%) rename {generated => agrirouter/generated}/messaging/response/response_pb2.py (100%) rename {generated => agrirouter/generated}/settings/dh_settings_pb2.py (100%) rename {logging => agrirouter/messaging}/__init__.py (100%) rename {messaging => agrirouter/messaging}/certification.py (92%) rename {messaging => agrirouter/messaging/clients}/__init__.py (100%) rename {messaging => agrirouter/messaging}/clients/http.py (100%) rename {messaging => agrirouter/messaging}/clients/mqtt.py (100%) rename {messaging => agrirouter/messaging}/decode.py (74%) rename {messaging => agrirouter/messaging}/encode.py (84%) rename {messaging => agrirouter/messaging}/enums.py (92%) rename {messaging => agrirouter/messaging}/exceptions.py (72%) rename {messaging => agrirouter/messaging}/messages.py (98%) rename {messaging/clients => agrirouter/messaging/parameters}/__init__.py (100%) rename {messaging => agrirouter/messaging}/parameters/dto.py (96%) rename {messaging => agrirouter/messaging}/parameters/service.py (97%) rename {messaging => agrirouter/messaging}/request.py (93%) rename {messaging => agrirouter/messaging}/result.py (95%) rename {messaging/parameters => agrirouter/messaging/services}/__init__.py (100%) rename {messaging => agrirouter/messaging}/services/cloud.py (77%) rename {messaging => agrirouter/messaging}/services/commons.py (89%) rename {messaging/services => agrirouter/messaging/services/http}/__init__.py (100%) rename {messaging => agrirouter/messaging}/services/http/outbox.py (100%) rename {messaging => agrirouter/messaging}/services/messaging.py (89%) rename {messaging/services/http => agrirouter/utils}/__init__.py (100%) rename {utils => agrirouter/utils}/type_url.py (61%) rename {utils => agrirouter/utils}/utc_time_util.py (100%) rename {utils => agrirouter/utils}/uuid_util.py (100%) delete mode 100644 logging/logging.py delete mode 100644 utils/__init__.py diff --git a/agrirouter/constants/keys.py b/agrirouter/constants/keys.py deleted file mode 100644 index e69de29b..00000000 diff --git a/agrirouter/environments/enums.py b/agrirouter/environments/enums.py deleted file mode 100644 index e69de29b..00000000 diff --git a/agrirouter/environments/environments.py b/agrirouter/environments/environments.py index f33a195b..503ecd6b 100644 --- a/agrirouter/environments/environments.py +++ b/agrirouter/environments/environments.py @@ -1,4 +1,4 @@ -from environments.keys import AR_QA_PUBLIC_KEY, AR_PROD_PUBLIC_KEY +from agrirouter.environments.keys import AR_QA_PUBLIC_KEY, AR_PROD_PUBLIC_KEY class BaseEnvironment: diff --git a/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py b/agrirouter/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py similarity index 99% rename from generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py rename to agrirouter/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py index acc12be5..2ce2e547 100644 --- a/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py +++ b/agrirouter/generated/cloud_provider_integration/cloud_virtualized_app_registration_pb2.py @@ -11,7 +11,7 @@ _sym_db = _symbol_database.Default() -from generated.commons import message_pb2 as commons_dot_message__pb2 +from agrirouter.generated.commons import message_pb2 as commons_dot_message__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/commons/chunk_pb2.py b/agrirouter/generated/commons/chunk_pb2.py similarity index 100% rename from generated/commons/chunk_pb2.py rename to agrirouter/generated/commons/chunk_pb2.py diff --git a/generated/commons/message_pb2.py b/agrirouter/generated/commons/message_pb2.py similarity index 100% rename from generated/commons/message_pb2.py rename to agrirouter/generated/commons/message_pb2.py diff --git a/generated/messaging/request/payload/account/endpoints_pb2.py b/agrirouter/generated/messaging/request/payload/account/endpoints_pb2.py similarity index 100% rename from generated/messaging/request/payload/account/endpoints_pb2.py rename to agrirouter/generated/messaging/request/payload/account/endpoints_pb2.py diff --git a/generated/messaging/request/payload/endpoint/capabilities_pb2.py b/agrirouter/generated/messaging/request/payload/endpoint/capabilities_pb2.py similarity index 100% rename from generated/messaging/request/payload/endpoint/capabilities_pb2.py rename to agrirouter/generated/messaging/request/payload/endpoint/capabilities_pb2.py diff --git a/generated/messaging/request/payload/endpoint/subscription_pb2.py b/agrirouter/generated/messaging/request/payload/endpoint/subscription_pb2.py similarity index 100% rename from generated/messaging/request/payload/endpoint/subscription_pb2.py rename to agrirouter/generated/messaging/request/payload/endpoint/subscription_pb2.py diff --git a/generated/messaging/request/payload/feed/feed_requests_pb2.py b/agrirouter/generated/messaging/request/payload/feed/feed_requests_pb2.py similarity index 100% rename from generated/messaging/request/payload/feed/feed_requests_pb2.py rename to agrirouter/generated/messaging/request/payload/feed/feed_requests_pb2.py diff --git a/generated/messaging/request/request_pb2.py b/agrirouter/generated/messaging/request/request_pb2.py similarity index 98% rename from generated/messaging/request/request_pb2.py rename to agrirouter/generated/messaging/request/request_pb2.py index 51241337..b193bf57 100644 --- a/generated/messaging/request/request_pb2.py +++ b/agrirouter/generated/messaging/request/request_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 -from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 -from generated.commons import message_pb2 as commons_dot_message__pb2 +from agrirouter.generated.commons import chunk_pb2 as commons_dot_chunk__pb2 +from agrirouter.generated.commons import message_pb2 as commons_dot_message__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/messaging/response/payload/account/endpoints_pb2.py b/agrirouter/generated/messaging/response/payload/account/endpoints_pb2.py similarity index 100% rename from generated/messaging/response/payload/account/endpoints_pb2.py rename to agrirouter/generated/messaging/response/payload/account/endpoints_pb2.py diff --git a/generated/messaging/response/payload/endpoint/capability_pb2.py b/agrirouter/generated/messaging/response/payload/endpoint/capability_pb2.py similarity index 100% rename from generated/messaging/response/payload/endpoint/capability_pb2.py rename to agrirouter/generated/messaging/response/payload/endpoint/capability_pb2.py diff --git a/generated/messaging/response/payload/feed/feed_response_pb2.py b/agrirouter/generated/messaging/response/payload/feed/feed_response_pb2.py similarity index 99% rename from generated/messaging/response/payload/feed/feed_response_pb2.py rename to agrirouter/generated/messaging/response/payload/feed/feed_response_pb2.py index 82f87676..a193a2ee 100644 --- a/generated/messaging/response/payload/feed/feed_response_pb2.py +++ b/agrirouter/generated/messaging/response/payload/feed/feed_response_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 -from generated.commons import message_pb2 as commons_dot_message__pb2 -from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 +from agrirouter.generated.commons import message_pb2 as commons_dot_message__pb2 +from agrirouter.generated.commons import chunk_pb2 as commons_dot_chunk__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/messaging/response/payload/feed/push_notification_pb2.py b/agrirouter/generated/messaging/response/payload/feed/push_notification_pb2.py similarity index 98% rename from generated/messaging/response/payload/feed/push_notification_pb2.py rename to agrirouter/generated/messaging/response/payload/feed/push_notification_pb2.py index cad40928..2cc8a8f0 100644 --- a/generated/messaging/response/payload/feed/push_notification_pb2.py +++ b/agrirouter/generated/messaging/response/payload/feed/push_notification_pb2.py @@ -13,8 +13,8 @@ from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2 from google.protobuf import any_pb2 as google_dot_protobuf_dot_any__pb2 -from generated.commons import message_pb2 as commons_dot_message__pb2 -from generated.commons import chunk_pb2 as commons_dot_chunk__pb2 +from agrirouter.generated.commons import message_pb2 as commons_dot_message__pb2 +from agrirouter.generated.commons import chunk_pb2 as commons_dot_chunk__pb2 DESCRIPTOR = _descriptor.FileDescriptor( diff --git a/generated/messaging/response/response_pb2.py b/agrirouter/generated/messaging/response/response_pb2.py similarity index 100% rename from generated/messaging/response/response_pb2.py rename to agrirouter/generated/messaging/response/response_pb2.py diff --git a/generated/settings/dh_settings_pb2.py b/agrirouter/generated/settings/dh_settings_pb2.py similarity index 100% rename from generated/settings/dh_settings_pb2.py rename to agrirouter/generated/settings/dh_settings_pb2.py diff --git a/logging/__init__.py b/agrirouter/messaging/__init__.py similarity index 100% rename from logging/__init__.py rename to agrirouter/messaging/__init__.py diff --git a/messaging/certification.py b/agrirouter/messaging/certification.py similarity index 92% rename from messaging/certification.py rename to agrirouter/messaging/certification.py index 8d095202..40156abb 100644 --- a/messaging/certification.py +++ b/agrirouter/messaging/certification.py @@ -1,7 +1,7 @@ import json from pathlib import Path -from onboarding.response import BaseOnboardingResonse +from agrirouter.onboarding.response import BaseOnboardingResonse def create_certificate_file(onboard_response: BaseOnboardingResonse=None, dir: Path=None): diff --git a/messaging/__init__.py b/agrirouter/messaging/clients/__init__.py similarity index 100% rename from messaging/__init__.py rename to agrirouter/messaging/clients/__init__.py diff --git a/messaging/clients/http.py b/agrirouter/messaging/clients/http.py similarity index 100% rename from messaging/clients/http.py rename to agrirouter/messaging/clients/http.py diff --git a/messaging/clients/mqtt.py b/agrirouter/messaging/clients/mqtt.py similarity index 100% rename from messaging/clients/mqtt.py rename to agrirouter/messaging/clients/mqtt.py diff --git a/messaging/decode.py b/agrirouter/messaging/decode.py similarity index 74% rename from messaging/decode.py rename to agrirouter/messaging/decode.py index 7023e019..839a0e48 100644 --- a/messaging/decode.py +++ b/agrirouter/messaging/decode.py @@ -4,12 +4,13 @@ from google.protobuf.any_pb2 import Any from google.protobuf.internal.decoder import _DecodeVarint -from generated.commons.message_pb2 import Messages -from generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse -from generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, MessageQueryResponse -from generated.messaging.response.response_pb2 import ResponseEnvelope, ResponsePayloadWrapper -from messaging.messages import DecodedMessage -from utils.type_url import TypeUrl +from agrirouter.generated.commons.message_pb2 import Messages +from agrirouter.generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse +from agrirouter.generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, \ + MessageQueryResponse +from agrirouter.generated.messaging.response.response_pb2 import ResponseEnvelope, ResponsePayloadWrapper +from agrirouter.messaging.messages import DecodedMessage +from agrirouter.utils.type_url import TypeUrl def read_properties_buffers_from_input_stream(input_stream) -> tuple: diff --git a/messaging/encode.py b/agrirouter/messaging/encode.py similarity index 84% rename from messaging/encode.py rename to agrirouter/messaging/encode.py index 32ed357d..fe74c229 100644 --- a/messaging/encode.py +++ b/agrirouter/messaging/encode.py @@ -3,10 +3,10 @@ from google.protobuf.any_pb2 import Any from google.protobuf.internal.encoder import _VarintBytes -from generated.messaging.request.request_pb2 import RequestEnvelope, RequestPayloadWrapper -from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters -from utils.utc_time_util import now_as_utc_timestamp -from utils.uuid_util import new_uuid +from agrirouter.generated.messaging.request.request_pb2 import RequestEnvelope, RequestPayloadWrapper +from agrirouter.messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters +from agrirouter.utils.utc_time_util import now_as_utc_timestamp +from agrirouter.utils.uuid_util import new_uuid def write_proto_parts_to_buffer(parts: list, buffer: bytes = b""): diff --git a/messaging/enums.py b/agrirouter/messaging/enums.py similarity index 92% rename from messaging/enums.py rename to agrirouter/messaging/enums.py index ccaeb29a..1247118f 100644 --- a/messaging/enums.py +++ b/agrirouter/messaging/enums.py @@ -1,4 +1,4 @@ -from auth.enums import BaseEnum +from agrirouter.auth.enums import BaseEnum class TechnicalMessageType(BaseEnum): diff --git a/messaging/exceptions.py b/agrirouter/messaging/exceptions.py similarity index 72% rename from messaging/exceptions.py rename to agrirouter/messaging/exceptions.py index c02bff86..3df29d4c 100644 --- a/messaging/exceptions.py +++ b/agrirouter/messaging/exceptions.py @@ -1,4 +1,4 @@ -from onboarding.exceptions import AgriRouuterBaseException +from agrirouter.onboarding.exceptions import AgriRouuterBaseException class TypeUrlNotFoundError(AgriRouuterBaseException): diff --git a/messaging/messages.py b/agrirouter/messaging/messages.py similarity index 98% rename from messaging/messages.py rename to agrirouter/messaging/messages.py index f470fa0d..1e5228fd 100644 --- a/messaging/messages.py +++ b/agrirouter/messaging/messages.py @@ -2,7 +2,7 @@ from datetime import datetime, timezone from typing import Union, List, Dict -from messaging.exceptions import WrongFieldError +from agrirouter.messaging.exceptions import WrongFieldError class EncodedMessage: diff --git a/messaging/clients/__init__.py b/agrirouter/messaging/parameters/__init__.py similarity index 100% rename from messaging/clients/__init__.py rename to agrirouter/messaging/parameters/__init__.py diff --git a/messaging/parameters/dto.py b/agrirouter/messaging/parameters/dto.py similarity index 96% rename from messaging/parameters/dto.py rename to agrirouter/messaging/parameters/dto.py index 3b8f9845..3c1404de 100644 --- a/messaging/parameters/dto.py +++ b/agrirouter/messaging/parameters/dto.py @@ -1,8 +1,8 @@ from copy import deepcopy from typing import List -from messaging.messages import EncodedMessage -from onboarding.response import BaseOnboardingResonse +from agrirouter.messaging.messages import EncodedMessage +from agrirouter.onboarding.response import BaseOnboardingResonse class Parameters: diff --git a/messaging/parameters/service.py b/agrirouter/messaging/parameters/service.py similarity index 97% rename from messaging/parameters/service.py rename to agrirouter/messaging/parameters/service.py index 65148835..0769fa08 100644 --- a/messaging/parameters/service.py +++ b/agrirouter/messaging/parameters/service.py @@ -2,10 +2,10 @@ from copy import deepcopy from typing import List -from generated.commons.chunk_pb2 import ChunkComponent -from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription -from generated.messaging.request.payload.feed.feed_requests_pb2 import ValidityPeriod -from messaging.parameters.dto import MessageParameters, Parameters +from agrirouter.generated.commons.chunk_pb2 import ChunkComponent +from agrirouter.generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from agrirouter.generated.messaging.request.payload.feed.feed_requests_pb2 import ValidityPeriod +from agrirouter.messaging.parameters.dto import MessageParameters, Parameters class MessageHeaderParameters(Parameters): diff --git a/messaging/request.py b/agrirouter/messaging/request.py similarity index 93% rename from messaging/request.py rename to agrirouter/messaging/request.py index f361bfb2..4de0a69e 100644 --- a/messaging/request.py +++ b/agrirouter/messaging/request.py @@ -1,6 +1,6 @@ from typing import List -from messaging.messages import Message +from agrirouter.messaging.messages import Message class MessageRequest: diff --git a/messaging/result.py b/agrirouter/messaging/result.py similarity index 95% rename from messaging/result.py rename to agrirouter/messaging/result.py index 3c3c4292..ba2df495 100644 --- a/messaging/result.py +++ b/agrirouter/messaging/result.py @@ -1,7 +1,7 @@ import json from typing import List, Union -from messaging.messages import OutboxMessage +from agrirouter.messaging.messages import OutboxMessage class MessagingResult: diff --git a/messaging/parameters/__init__.py b/agrirouter/messaging/services/__init__.py similarity index 100% rename from messaging/parameters/__init__.py rename to agrirouter/messaging/services/__init__.py diff --git a/messaging/services/cloud.py b/agrirouter/messaging/services/cloud.py similarity index 77% rename from messaging/services/cloud.py rename to agrirouter/messaging/services/cloud.py index 7349f5e3..cd40a465 100644 --- a/messaging/services/cloud.py +++ b/agrirouter/messaging/services/cloud.py @@ -1,14 +1,14 @@ -from generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingRequest, \ +from agrirouter.generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingRequest, \ OffboardingRequest -from generated.messaging.request.request_pb2 import RequestEnvelope -from messaging.encode import encode_message -from messaging.enums import TechnicalMessageType -from messaging.messages import EncodedMessage -from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, CloudOnboardParameters, \ - CloudOffboardParameters -from messaging.services.messaging import AbstractService -from utils.type_url import TypeUrl -from utils.uuid_util import new_uuid +from agrirouter.generated.messaging.request.request_pb2 import RequestEnvelope +from agrirouter.messaging.encode import encode_message +from agrirouter.messaging.enums import TechnicalMessageType +from agrirouter.messaging.messages import EncodedMessage +from agrirouter.messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, \ + CloudOnboardParameters, CloudOffboardParameters +from agrirouter.messaging.services.messaging import AbstractService +from agrirouter.utils.type_url import TypeUrl +from agrirouter.utils.uuid_util import new_uuid class CloudOnboardService(AbstractService): diff --git a/messaging/services/commons.py b/agrirouter/messaging/services/commons.py similarity index 89% rename from messaging/services/commons.py rename to agrirouter/messaging/services/commons.py index d45764e2..ae5499f9 100644 --- a/messaging/services/commons.py +++ b/agrirouter/messaging/services/commons.py @@ -2,11 +2,11 @@ import requests -from messaging.certification import create_certificate_file -from messaging.clients.mqtt import MqttClient -from messaging.messages import Message -from messaging.request import MessageRequest -from messaging.result import MessagingResult +from agrirouter.messaging.certification import create_certificate_file +from agrirouter.messaging.clients.mqtt import MqttClient +from agrirouter.messaging.messages import Message +from agrirouter.messaging.request import MessageRequest +from agrirouter.messaging.result import MessagingResult class AbstractMessagingClient(ABC): diff --git a/messaging/services/__init__.py b/agrirouter/messaging/services/http/__init__.py similarity index 100% rename from messaging/services/__init__.py rename to agrirouter/messaging/services/http/__init__.py diff --git a/messaging/services/http/outbox.py b/agrirouter/messaging/services/http/outbox.py similarity index 100% rename from messaging/services/http/outbox.py rename to agrirouter/messaging/services/http/outbox.py diff --git a/messaging/services/messaging.py b/agrirouter/messaging/services/messaging.py similarity index 89% rename from messaging/services/messaging.py rename to agrirouter/messaging/services/messaging.py index 83190187..e071b028 100644 --- a/messaging/services/messaging.py +++ b/agrirouter/messaging/services/messaging.py @@ -1,17 +1,17 @@ -from generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery -from generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification -from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription -from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageConfirm, MessageQuery -from generated.messaging.request.request_pb2 import RequestEnvelope -from messaging.encode import encode_message -from messaging.enums import TechnicalMessageType -from messaging.messages import EncodedMessage -from messaging.parameters.dto import MessageParameters, MessagingParameters -from messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, CapabilityParameters, \ - FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, SubscriptionParameters, QueryHeaderParameters, \ - QueryMessageParameters -from utils.type_url import TypeUrl -from utils.uuid_util import new_uuid +from agrirouter.generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery +from agrirouter.generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification +from agrirouter.generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from agrirouter.generated.messaging.request.payload.feed.feed_requests_pb2 import MessageConfirm, MessageQuery +from agrirouter.generated.messaging.request.request_pb2 import RequestEnvelope +from agrirouter.messaging.encode import encode_message +from agrirouter.messaging.enums import TechnicalMessageType +from agrirouter.messaging.messages import EncodedMessage +from agrirouter.messaging.parameters.dto import MessageParameters, MessagingParameters +from agrirouter.messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, \ + CapabilityParameters, FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, \ + SubscriptionParameters, QueryHeaderParameters, QueryMessageParameters +from agrirouter.utils.type_url import TypeUrl +from agrirouter.utils.uuid_util import new_uuid class AbstractService: diff --git a/messaging/services/http/__init__.py b/agrirouter/utils/__init__.py similarity index 100% rename from messaging/services/http/__init__.py rename to agrirouter/utils/__init__.py diff --git a/utils/type_url.py b/agrirouter/utils/type_url.py similarity index 61% rename from utils/type_url.py rename to agrirouter/utils/type_url.py index 2628eee7..71f4c6df 100644 --- a/utils/type_url.py +++ b/agrirouter/utils/type_url.py @@ -1,13 +1,15 @@ -from generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingResponse, \ +from agrirouter.generated.cloud_provider_integration.cloud_virtualized_app_registration_pb2 import OnboardingResponse, \ OnboardingRequest -from generated.commons.message_pb2 import Messages -from generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery -from generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification -from generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription -from generated.messaging.request.payload.feed.feed_requests_pb2 import MessageDelete, MessageConfirm, MessageQuery -from generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse -from generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, MessageQueryResponse -from messaging.exceptions import TypeUrlNotFoundError +from agrirouter.generated.commons.message_pb2 import Messages +from agrirouter.generated.messaging.request.payload.account.endpoints_pb2 import ListEndpointsQuery +from agrirouter.generated.messaging.request.payload.endpoint.capabilities_pb2 import CapabilitySpecification +from agrirouter.generated.messaging.request.payload.endpoint.subscription_pb2 import Subscription +from agrirouter.generated.messaging.request.payload.feed.feed_requests_pb2 import MessageDelete, MessageConfirm, \ + MessageQuery +from agrirouter.generated.messaging.response.payload.account.endpoints_pb2 import ListEndpointsResponse +from agrirouter.generated.messaging.response.payload.feed.feed_response_pb2 import HeaderQueryResponse, \ + MessageQueryResponse +from agrirouter.messaging.exceptions import TypeUrlNotFoundError class TypeUrl: diff --git a/utils/utc_time_util.py b/agrirouter/utils/utc_time_util.py similarity index 100% rename from utils/utc_time_util.py rename to agrirouter/utils/utc_time_util.py diff --git a/utils/uuid_util.py b/agrirouter/utils/uuid_util.py similarity index 100% rename from utils/uuid_util.py rename to agrirouter/utils/uuid_util.py diff --git a/logging/logging.py b/logging/logging.py deleted file mode 100644 index 4684610d..00000000 --- a/logging/logging.py +++ /dev/null @@ -1,5 +0,0 @@ -import logging - - -class LoggingMixin: - pass diff --git a/utils/__init__.py b/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 From 6583369af1f600d20b737323e2e506c27fd44e34 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Thu, 7 Oct 2021 15:50:22 +0300 Subject: [PATCH 34/48] Create examples file --- examples.txt | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 examples.txt diff --git a/examples.txt b/examples.txt new file mode 100644 index 00000000..b14a75ba --- /dev/null +++ b/examples.txt @@ -0,0 +1,76 @@ +>>> private_key = ... # store here your private key you get in AR UI during application creation +>>> public_key = ... # store here your public key you get in AR UI during application creation +>>> application_id = "8c947a45-c57d-4fd2-affc-206e2sdg3a50" # # store here your application id. You can find it in AR UI + + +>>> ######################################################## +>>> # Authorization + +>>> from agrirouter.auth.auth import Authorization +>>> from agrirouter.auth.parameters import AuthUrlParameter +>>> from agrirouter.auth.enums import ResponseType + +>>> auth_params = AuthUrlParameter(application_id=application_id, response_type="onboard") +>>> auth_client = Authorization("QA", public_key=public_key, private_key=private_key) +>>> auth_url = auth_client.get_auth_request_url(auth_params) # use this url to authorize the user as described at https://docs.my-agrirouter.com/agrirouter-interface-documentation/latest/integration/authorization.html#perform-authorization + +>>> auth_result_url = ... # the url the user was redirected after his authorization. +>>> auth_response = auth_client.extract_auth_response(auth_result_url) # auth_response containing the results of the auth process +>>> auth_client.verify_auth_response(auth_response, public_key) # you may verify auth_response to ensure answer was from AR + +>>> auth_response.is_successfull # True if user accepted application, False if he rejected +True +>>> auth_response.is_valid # Result of verification, if False, response was not validated by public key. Doesn't indicate was the auth successfull. Accessible only after response verifying +True + +>>> # Get dict containing data from auth process you will use for futher communication. +>>> # If auth was rejected, contains {"error"} key. +>>> # If auth was accepted, contains {signature, state, token, credentials{account, expires, regcode}} keys +>>> # Even if response verifying was not processed or failed, the results will be returned. But in that case you act on your risk. +>>> auth_data = auth_response.get_auth_result() + +{'credentials': {'account': '0ba223gh-cg3b-4te5-boc9-77ghcfn136a0', + 'expires': '2021-09-23T16:08:43.888Z', + 'regcode': '8eloz190fd'}, + 'signature': 'SULf4QMWAfG4/EyT0rejkRfApnkJIOs4sxI5wxeB8TkIiv0MR6YFKw1tPIkM4lluZKHEIgr5WvM3b3op4I9TtEbzZf995R8GIlNP6yyP51TF/4vZMbka0q+2g1o0qw/yuDQcGz1RpOJWCuBOjMXu9quzGO8xvDW7LjrN+MA9rzJZYb1toNf51O0sdg21oLvrKrqvaErKcIoRJtTVJ51awOWMARDkGZahcRdWrZbdGUbQwIyKJQu4vH8+4ytlyXPSWEYwKE2VFoAjhzWsKODdRRxDbNNLWsW8sxKamdsPmOC8inHUFsFNoxLbwZEnKROm2s3OfKGYuibXOpXw==', + 'state': '46c81f94-d117-4658-9a38-a85692448219', + 'token': 'eyJhY2sdoT4IjoiMGJhMjRlZWUtYzMwYi00N2U1LWJkYzktNzcwM2NmYjEzNmEwIiwicmVnY29kZSI6IjhlYWNiMTk4ZmMiLCJleHBpcmVzIopGjjAyMS0wOS0y1O5xNjowODo0My44ODhaIn0='} + + + +>>> ######################################################## + +>>> # Onboarding + + +>>> from agrirouter.onboarding.onboarding import SoftwareOnboarding +>>> from agrirouter.onboarding.parameters import SoftwareOnboardingParameter +>>> from agrirouter.onboarding.enums import GateWays + +>>> id_ = "mydeviceid" +>>> certification_version_id = ... # get from AR UI +>>> utc_timestamp = "2018-06-20T07:29:23.457Z" +>>> time_zone = "+03:00" + +>>> onboarding_client = SoftwareOnboarding("QA", public_key=public_key, private_key=private_key) +>>> onboarding_parameters = SoftwareOnboardingParameter(id_=id_, application_id=application_id, certification_version_id=certification_version_id, gateway_id=GateWays.REST.value, utc_timestamp=utc_timestamp, time_zone=time_zone, reg_code=auth_data["credentials"]["regcode"]) +>>> onboarding_verifying_response = onboarding_client.verify(onboarding_parameters) +>>> onboarding_response = onboarding_client.onboard(onboarding_parameters) +>>> onboarding_response.status_code() +>>> onboarding_response.data() # or onboarding_response.text() + +{ + "authentication": { + "certificate": "-----BEGIN ENCRYPTED PRIVATE KEY-----\n...\n-----END ENCRYPTED PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n", + "secret": "77R8cjOGi9yTCBt2", + "type": "PEM" + }, + "capabilityAlternateId": "7bc8ab05-a0de-40db-a259-7deefb1265e9", + "connectionCriteria": { + "gatewayId": "3", + "measures": "https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/measures/c067272a-d3a7-4dcf-ab58-5c45ba66ad60", + "commands": "https://dke-qa.eu10.cp.iot.sap/iot/gateway/rest/commands/c067272a-d3a7-4dcf-ab58-5c45ba66ad60" + }, + "deviceAlternateId": "c067272a-d3a7-4dcf-ab58-5c45ba66ad60", + "sensorAlternateId": "5564ce96-385f-448a-9502-9ea3c940a259" +} \ No newline at end of file From 8a34738d68e03c0b7748421ccb06f9388c23df0e Mon Sep 17 00:00:00 2001 From: Alexey Date: Mon, 11 Oct 2021 14:41:03 +0300 Subject: [PATCH 35/48] Add unit tests (#6) --- .gitignore | 1 + README.adoc | 3 + agrirouter/clients/__init__.py | 0 agrirouter/clients/clients.py | 29 --- conftest.py | 13 ++ requirements.txt | 4 + tests/__init__.py | 0 tests/auth_test/test_response.py | 22 ++ tests/constants.py | 60 +++++ .../test_environmental_services.py | 11 + tests/enviroments_test/test_environments.py | 213 ++++++++++++++++++ tests/messaging_test/test_request.py | 15 ++ tests/onboarding_test/test_headers.py | 23 ++ tox.ini | 16 ++ 14 files changed, 381 insertions(+), 29 deletions(-) delete mode 100644 agrirouter/clients/__init__.py delete mode 100644 agrirouter/clients/clients.py create mode 100644 conftest.py delete mode 100644 tests/__init__.py create mode 100644 tests/auth_test/test_response.py create mode 100644 tests/constants.py create mode 100644 tests/enviroments_test/test_environmental_services.py create mode 100644 tests/enviroments_test/test_environments.py create mode 100644 tests/messaging_test/test_request.py create mode 100644 tests/onboarding_test/test_headers.py create mode 100644 tox.ini diff --git a/.gitignore b/.gitignore index b8c6d657..980ae2ce 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ venv *.log *.log.* .env +.pytest_cache \ No newline at end of file diff --git a/README.adoc b/README.adoc index 37137e1d..a8a74271 100644 --- a/README.adoc +++ b/README.adoc @@ -43,6 +43,9 @@ For more install options type: Python 3.6 or above is required. +== Running unit tests + +`$ pytest` == External resources diff --git a/agrirouter/clients/__init__.py b/agrirouter/clients/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/agrirouter/clients/clients.py b/agrirouter/clients/clients.py deleted file mode 100644 index f42483ae..00000000 --- a/agrirouter/clients/clients.py +++ /dev/null @@ -1,29 +0,0 @@ -from agrirouter.environments.environments import ProductionEnvironment, QAEnvironment - - -class InvalidEnvironmentSetup(Exception): - def __init__(self, message=None, env=None): - if not message: - message = "Invalid value of env parameter. [QA] or [Production] values are allowed" - self.message = message - self.env = env - - -class ARClient: - - def __init__(self, env): - self._set_env(env) - - def authenticate(self): - auth_link = self._create_auth_link() - - def _create_auth_link(self): - return "" - - def _set_env(self, env): - if env == "QA": - self._environment = QAEnvironment - if env == "Production": - return ProductionEnvironment - else: - raise InvalidEnvironmentSetup(env=env) diff --git a/conftest.py b/conftest.py new file mode 100644 index 00000000..c36194f0 --- /dev/null +++ b/conftest.py @@ -0,0 +1,13 @@ +import pytest +from tests.constants import public_key, private_key, auth_result_url + + +@pytest.fixture(scope="session") +def authorization(): + from agrirouter.auth.auth import Authorization + + auth_client = Authorization("QA", public_key=public_key, private_key=private_key) + auth_response = auth_client.extract_auth_response(auth_result_url) + auth_client.verify_auth_response(auth_response) + auth_data = auth_response.get_auth_result() + return auth_data diff --git a/requirements.txt b/requirements.txt index 458446b3..9cd51d4f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,3 +8,7 @@ protobuf==3.18.0 pycparser==2.20 requests==2.26.0 urllib3==1.26.7 +pytest==6.2.5 +black==21.9b0 +flake8==3.9.2 +pyflakes==2.3.1 diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/auth_test/test_response.py b/tests/auth_test/test_response.py new file mode 100644 index 00000000..75d0f679 --- /dev/null +++ b/tests/auth_test/test_response.py @@ -0,0 +1,22 @@ +"""Tests agrirouter/auth/response.py""" + +import re +from agrirouter.auth.response import AuthResponse + + +def test_decode_token(): + token = ( + "eyJhY2NvdW50IjoiMGJhMjRlZWUtYzMwYi00N2U1LWJkYzktNzcwM" + "2NmYjEzNmEwIiwicmVnY29kZSI6IjhlYWNiMTk4ZmMiLCJleHBpcm" + "VzIjoiMjAyMS0wOS0yM1QxNjowODo0My44ODhaIn0=" + ) + decoded_token = AuthResponse.decode_token(token) + assert isinstance(decoded_token["account"], str) + assert isinstance(decoded_token["expires"], str) + assert re.search(r"[\w]", decoded_token["regcode"]) + assert re.search(r"[\w]", decoded_token["account"]) + + +def test_get_auth_result(authorization): + assert isinstance(AuthResponse(authorization).get_auth_result(), dict) + assert AuthResponse(authorization).get_auth_result()["credentials"] diff --git a/tests/constants.py b/tests/constants.py new file mode 100644 index 00000000..c07044eb --- /dev/null +++ b/tests/constants.py @@ -0,0 +1,60 @@ +application_id = "8c947a45-c57d-42d2-affc-206e21d63a50" +ENV = "QA" +auth_result_url = ( + "http://fuf.me/?state=46c81f94-d117-4658-9a38-a85692448219&token=eyJhY2NvdW50IjoiMGJhMjRlZWUtYzMwY" + "i00N2U1LWJkYzktNzcwM2NmYjEzNmEwIiwicmVnY29kZSI6IjhlYWNiMTk4ZmMiLCJleHBpcmVzIjoiMjAyMS0wOS0yM1QxNj" + "owODo0My44ODhaIn0%3D&signature=SUL9SQMWAfG4%2FEyT0rejkRfAyioxJIOs4sxI5wxeB8TkIiv0MR6YFKw1tPIkM4ll" + "uZKHEIgr5WvM3b3SvII9TtEbzZf995R8GIlNP6yyP51TF%2F4vZMbkMjq%2B2g1o0qw%2FyuDQcGz1RpOJWCuBOjMXu9quzGO" + "8xvDW7LjrN%2BMA9rzJZYb1toNf51O0eO4BDWL5L1oLvrKrqvaErKcIoRJtTVJ51awOWMARDkGZahcRdWrZbdGUbQwIyKJQu4" + "vH8%2B4ytlyXPSWEYwKE2VFoAjhzWsKODdRRxDbNNLWsW8sxKamdXjSOC8inHUFsFNoxLbwZEnKROm2s3OfKGYuibXOpXw%3D%3D" +) +private_key = ( + "-----BEGIN PRIVATE KEY-----\n" + "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8WVUWBhEiQYvo\n" + "DL9q/Z5LbIhqDtcdFYWBUV7A96AXJaNRA9J7m3a6es05S7pRynv9yT8i+bhz/qDf\n" + "18MPOaqLglTw58ylVtTGmIlIZr85KJecO5aQnKN1pz8LyKnQSk4IWMBZ0T6mcaEO\n" + "fLVcDCmLi3T9a07xT4g5i2PGnLI6nd1pf3sLuKEzUjp455xU3oJrP0HfwSc+DXZQ\n" + "YDk2Rk6mfPgEczBhRmqDFp44+WHgyq4CcXl92M5XdOSYVaRs/W6fcEmRTqjBxp1u\n" + "M3kNAIaOC4XNfxVV8kSCfZW0gVtuGqxGK+80OZay3Vc1nQZGm+IUVBHKbPVauhXS\n" + "UH0/28qbAgMBAAECggEANVX8vMBaEL/L/RnDCOqp7UTeOl5adx91j2G5+d4FhRiA\n" + "73usGpmzHOqSe/OgXvH+e6cGDIL3w00rREgGsiSL0XbGU/PoJTf6CAUA9zI1W1vN\n" + "1w2evPPGbBZAybb4s4WfJEjxq12QJrUNvRr+hoLhLuV+axb8o2P4uQbqab9Mz0ER\n" + "lczCbHi4VDs1fwmNR3o47T1J4Qffzv1nMlor3pSrDzRDebic7/DC5JFkYZNGUtHk\n" + "jKDF5Uv7Vzxgb4Of+i3JA5mRMqvG33pdenvvetwl9X69WOiC29bVlymSHyybBE4A\n" + "ItfCAHIiY3nUL7UqzoIXpsyPs3ftkiy3Hn7isVSpLQKBgQDjadkGlqIgXCKZ8RS6\n" + "a4iLTTTlh8Ur+vMrejBLPul1oxz2dRWZy8zykfNN2MPz7q2xT8wXGuxgj+jei/fi\n" + "Gk08+UudMhV5Dtshb3fFq0NFCBe1ZUEX/wAcKC4Ed9xuuHpe7HOKAG0AsnzS8MPC\n" + "lcMiL1/vz0GuRbsiyMY6hXweZQKBgQDUBmQNqOBWDTQkO/8MFHopo6Ju9iNvZ4fC\n" + "u4SWqL+5BO3nnQHAQyslsj8FNilqhgMI+zaFFbZMZPv5opBSaAR0CQanKxMe3c9I\n" + "XYkAJH2+M0fpp80LtxwShD411UDhIypzumfKe8vUXRW/8TWfl6VidfEVjxw6Rc2D\n" + "g9btI4k0/wKBgQC42plnGZq/4yTdLXJD9pUPZrrQuQQ1M8/mT3RiNclfri8kxxe/\n" + "5EG8C5dSeBkQd7sInmyve1sZQuFvxSbBy89s+NfV95gsxz6odwtMymHsAyACe0Pm\n" + "VYmpWZ/OUgAEoEAYWOuyCZaRMoT0knEOAt6TMx8wt7AUEOqE497+QvMZYQKBgQC6\n" + "ARlJenvEQjUaDKBFYrmBShK4MasIktThG0zINyZrFE35wR3GI6b4nRT4Z3mSABst\n" + "h+Vef5u8DWOYrurZwHMXsMtrYDiX/ZNZMuV7gIfnkmlmLFWQD4XLIMTKyVjvqcAW\n" + "YtOnKU+58CeiieO3LHxkkn97oF7tKEuRMtock+5M1QKBgC2fquqxXMrBEIoMGCZs\n" + "ooU5V9gOjFVKC52VWnTNgmOWTqgZuqxPJtCTN5wPvhOSggQuHPwBHa9ioshJ0dGE\n" + "6jdxGaJjAc82q2KZu9VEqoH/Xa2aS8dPEHwfJtzUVTia6WkrFtMFNaDMFd6byWDQ\n" + "ai+T4i2J3/SDL0BfsFWdQuje\n" + "-----END PRIVATE KEY-----" +) + +public_key = ( + "-----BEGIN PUBLIC KEY-----\n" + "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvFlVFgYRIkGL6Ay/av2e\n" + "S2yIag7XHRWFgVFewPegFyWjUQPSe5t2unrNOUu6Ucp7/ck/Ivm4c/6g39fDDzmq\n" + "i4JU8OfMpVbUxpiJSGa/OSiXnDuWkJyjdac/C8ip0EpOCFjAWdE+pnGhDny1XAwp\n" + "i4t0/WtO8U+IOYtjxpyyOp3daX97C7ihM1I6eOecVN6Caz9B38EnPg12UGA5NkZO\n" + "pnz4BHMwYUZqgxaeOPlh4MquAnF5fdjOV3TkmFWkbP1un3BJkU6owcadbjN5DQCG\n" + "jguFzX8VVfJEgn2VtIFbbhqsRivvNDmWst1XNZ0GRpviFFQRymz1WroV0lB9P9vK\n" + "mwIDAQAB\n" + "-----END PUBLIC KEY-----" +) + +AR_PUBLIC_KEY = ( + "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8xF9661acn+iS+QS+9Y\n3HvTfUV" + "cismzbuvxHgHA7YeoOUFxyj3lkaTnXm7hzQe4wDEDgwpJSGAzxIIYSUXe\n8EsWLorg5O0tRexx5SP3+kj1i83DATBJCXP7k+bAF4" + "u2FVJphC1m2BfLxelGLjzx\nVAS/v6+EwvYaT1AI9FFqW/a2o92IsVPOh9oM9eds3lBOAbH/8XrmVIeHofw+XbTH\n1/7MLD6IE2+" + "HbEeY0F96nioXArdQWXcjUQsTch+p0p9eqh23Ak4ef5oGcZhNd4yp\nY8M6ppvIMiXkgWSPJevCJjhxRJRmndY+ajYGx7CLePx7wN" + "vxXWtkng3yh+7WiZ/Y\nqwIDAQAB\n-----END PUBLIC KEY-----" +) diff --git a/tests/enviroments_test/test_environmental_services.py b/tests/enviroments_test/test_environmental_services.py new file mode 100644 index 00000000..611e3172 --- /dev/null +++ b/tests/enviroments_test/test_environmental_services.py @@ -0,0 +1,11 @@ +"""Test agrirouter/environments/environmental_services.py""" + +import pytest +from agrirouter.environments.exceptions import InvalidEnvironmentSetup +from agrirouter.environments.environmental_services import EnvironmentalService +from tests.constants import ENV + + +def test_arclient_set_env(): + with pytest.raises(InvalidEnvironmentSetup): + assert EnvironmentalService("WRONG")._set_env("WRONG") diff --git a/tests/enviroments_test/test_environments.py b/tests/enviroments_test/test_environments.py new file mode 100644 index 00000000..8619bdc4 --- /dev/null +++ b/tests/enviroments_test/test_environments.py @@ -0,0 +1,213 @@ +"""Test agrirouter/environments/environments.py""" + +import pytest +from agrirouter.environments.environments import ProductionEnvironment, QAEnvironment +from tests.constants import application_id, auth_result_url + + +class TestProductionEnvironment: + def test_get_base_url(self): + assert ( + ProductionEnvironment().get_base_url() + == ProductionEnvironment._ENV_BASE_URL + ) + + def test_get_api_prefix(self): + assert ( + ProductionEnvironment().get_api_prefix() + == ProductionEnvironment._API_PREFIX + ) + + def test_get_registration_service_url(self): + assert ( + ProductionEnvironment().get_registration_service_url() + == ProductionEnvironment._REGISTRATION_SERVICE_URL + ) + + def test_get_onboard_url(self): + assert ( + ProductionEnvironment().get_onboard_url() + == ProductionEnvironment._REGISTRATION_SERVICE_URL + + ProductionEnvironment._API_PREFIX + + "/registration/onboard" + ) + + def test_get_secured_onboard_url(self): + assert ( + ProductionEnvironment().get_secured_onboard_url() + == ProductionEnvironment._REGISTRATION_SERVICE_URL + + ProductionEnvironment._API_PREFIX + + "/registration/onboard/request" + ) + + def test_get_verify_onboard_request_url(self): + assert ( + ProductionEnvironment().get_verify_onboard_request_url() + == ProductionEnvironment._REGISTRATION_SERVICE_URL + + ProductionEnvironment._API_PREFIX + + "/registration/onboard/verify" + ) + + def test_get_revoke_url(self): + assert ( + ProductionEnvironment().get_revoke_url() + == ProductionEnvironment._REGISTRATION_SERVICE_URL + + ProductionEnvironment._API_PREFIX + + "/registration/onboard/revoke" + ) + + def test_get_agrirouter_login_url(self): + assert ( + ProductionEnvironment().get_agrirouter_login_url() + == ProductionEnvironment._ENV_BASE_URL + + ProductionEnvironment._AGRIROUTER_LOGIN_URL + ) + + def test_get_secured_onboarding_authorization_url(self): + assert ProductionEnvironment().get_secured_onboarding_authorization_url( + application_id, str, "state", auth_result_url + ) == ProductionEnvironment._ENV_BASE_URL + ProductionEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="state", + redirect_uri=auth_result_url, + ) + with pytest.raises(AssertionError): + assert ProductionEnvironment().get_secured_onboarding_authorization_url( + application_id, str, "state", auth_result_url + ) == ProductionEnvironment._ENV_BASE_URL + ProductionEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="123", + redirect_uri=auth_result_url, + ) + with pytest.raises(AssertionError): + assert ProductionEnvironment().get_secured_onboarding_authorization_url( + application_id, dict, "state", auth_result_url + ) == ProductionEnvironment._ENV_BASE_URL + ProductionEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="state", + redirect_uri=auth_result_url, + ) + + def test_get_mqtt_server_url(self): + assert ProductionEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == ProductionEnvironment._MQTT_URL_TEMPLATE.format( + host="localhost", port="5000" + ) + with pytest.raises(AssertionError): + assert ProductionEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == ProductionEnvironment._MQTT_URL_TEMPLATE.format( + host="127.0.0.1", port="5000" + ) + with pytest.raises(AssertionError): + assert ProductionEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == ProductionEnvironment._MQTT_URL_TEMPLATE.format( + host="localhost", port="80" + ) + + def test_get_env_public_key(self): + assert ( + ProductionEnvironment().get_env_public_key() + == ProductionEnvironment.AR_PUBLIC_KEY + ) + + +class TestQAEnvironment: + def test_get_base_url(self): + assert QAEnvironment().get_base_url() == QAEnvironment._ENV_BASE_URL + + def test_get_api_prefix(self): + assert QAEnvironment().get_api_prefix() == QAEnvironment._API_PREFIX + + def test_get_registration_service_url(self): + assert ( + QAEnvironment().get_registration_service_url() + == QAEnvironment._REGISTRATION_SERVICE_URL + ) + + def test_get_onboard_url(self): + assert ( + QAEnvironment().get_onboard_url() + == QAEnvironment._REGISTRATION_SERVICE_URL + + QAEnvironment._API_PREFIX + + "/registration/onboard" + ) + + def test_get_secured_onboard_url(self): + assert ( + QAEnvironment().get_secured_onboard_url() + == QAEnvironment._REGISTRATION_SERVICE_URL + + QAEnvironment._API_PREFIX + + "/registration/onboard/request" + ) + + def test_get_verify_onboard_request_url(self): + assert ( + QAEnvironment().get_verify_onboard_request_url() + == QAEnvironment._REGISTRATION_SERVICE_URL + + QAEnvironment._API_PREFIX + + "/registration/onboard/verify" + ) + + def test_get_revoke_url(self): + assert ( + QAEnvironment().get_revoke_url() + == QAEnvironment._REGISTRATION_SERVICE_URL + + QAEnvironment._API_PREFIX + + "/registration/onboard/revoke" + ) + + def test_get_agrirouter_login_url(self): + assert ( + QAEnvironment().get_agrirouter_login_url() + == QAEnvironment._ENV_BASE_URL + QAEnvironment._AGRIROUTER_LOGIN_URL + ) + + def test_get_secured_onboarding_authorization_url(self): + assert QAEnvironment().get_secured_onboarding_authorization_url( + application_id, str, "state", auth_result_url + ) == QAEnvironment._ENV_BASE_URL + QAEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="state", + redirect_uri=auth_result_url, + ) + with pytest.raises(AssertionError): + assert QAEnvironment().get_secured_onboarding_authorization_url( + application_id, str, "state", auth_result_url + ) == QAEnvironment._ENV_BASE_URL + QAEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="123", + redirect_uri=auth_result_url, + ) + with pytest.raises(AssertionError): + assert QAEnvironment().get_secured_onboarding_authorization_url( + application_id, dict, "state", auth_result_url + ) == QAEnvironment._ENV_BASE_URL + QAEnvironment._SECURED_ONBOARDING_AUTHORIZATION_LINK_TEMPLATE.format( + application_id=application_id, + response_type=str, + state="state", + redirect_uri=auth_result_url, + ) + + def test_get_mqtt_server_url(self): + assert QAEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == QAEnvironment._MQTT_URL_TEMPLATE.format(host="localhost", port="5000") + with pytest.raises(AssertionError): + assert QAEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == QAEnvironment._MQTT_URL_TEMPLATE.format(host="127.0.0.1", port="5000") + with pytest.raises(AssertionError): + assert QAEnvironment().get_mqtt_server_url( + "localhost", "5000" + ) == QAEnvironment._MQTT_URL_TEMPLATE.format(host="localhost", port="80") + + def test_get_env_public_key(self): + assert QAEnvironment().get_env_public_key() == QAEnvironment.AR_PUBLIC_KEY diff --git a/tests/messaging_test/test_request.py b/tests/messaging_test/test_request.py new file mode 100644 index 00000000..5b978ec6 --- /dev/null +++ b/tests/messaging_test/test_request.py @@ -0,0 +1,15 @@ +"""Test agrirouter/messaging/request.py""" + +from agrirouter.messaging.messages import Message +from agrirouter.messaging.request import MessageRequest + + +def test_json_serialize(): + message_request = MessageRequest( + sensor_alternate_id="1", + capability_alternate_id="1", + messages=[Message(content="content")], + ).json_serialize() + assert isinstance(message_request, dict) + assert message_request["capabilityAlternateId"] == "1" + assert message_request["sensorAlternateId"] == "1" diff --git a/tests/onboarding_test/test_headers.py b/tests/onboarding_test/test_headers.py new file mode 100644 index 00000000..4a412082 --- /dev/null +++ b/tests/onboarding_test/test_headers.py @@ -0,0 +1,23 @@ +"""Test agrirouter/onboarding/headers.py""" +from agrirouter.constants.media_types import ContentTypes +from agrirouter.onboarding.headers import SoftwareOnboardingHeader + + +class TestSoftwareOnboardingHeader: + reg_code = "1AC2cs21W" + test_object = SoftwareOnboardingHeader(reg_code=reg_code, application_id=1) + test_object_1 = SoftwareOnboardingHeader( + reg_code=reg_code, application_id=1, content_type="json" + ) + + def test_get_header(self): + assert isinstance(self.test_object.get_header(), dict) + assert ( + self.test_object.get_header()["Authorization"] == "Bearer " + self.reg_code + ) + assert ( + self.test_object.get_header()["Content-Type"] + == ContentTypes.APPLICATION_JSON.value + ) + + assert self.test_object_1.get_header()["Content-Type"] == "json" diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..2aae4364 --- /dev/null +++ b/tox.ini @@ -0,0 +1,16 @@ +[flake8] +ignore = D203 +exclude = + .git, + __pycache__, + .pytest_cache + agrirouter_sdk_python.egg-info, + assets, + old, + build, + dist, + venv, + conftest.py, + *_pb2.py +max-line-length = 120 +max-complexity = 10 From de831dc615d7593f58da46445254bf68d8b46935 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 11 Oct 2021 18:47:03 +0300 Subject: [PATCH 36/48] Move main classes to agrirouter/__init__.py --- agrirouter/__init__.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/agrirouter/__init__.py b/agrirouter/__init__.py index e69de29b..ad6ecf05 100644 --- a/agrirouter/__init__.py +++ b/agrirouter/__init__.py @@ -0,0 +1,17 @@ +from agrirouter.auth.auth import Authorization +from agrirouter.auth.parameters import AuthUrlParameter + +from agrirouter.onboarding.onboarding import SoftwareOnboarding +from agrirouter.onboarding.parameters import SoftwareOnboardingParameter + +from agrirouter.revoking.revoking import Revoking +from agrirouter.revoking.parameters import RevokingParameter + +from agrirouter.messaging.parameters.service import MessageHeaderParameters, MessagePayloadParameters, \ + QueryMessageParameters, QueryHeaderParameters, CloudOffboardParameters, CloudOnboardParameters, \ + CapabilityParameters, FeedConfirmParameters, FeedDeleteParameters, ListEndpointsParameters, MessageParameters, \ + SubscriptionParameters +from agrirouter.messaging.services.cloud import CloudOnboardService, CloudOffboardService +from agrirouter.messaging.services.messaging import SubscriptionService, CapabilityService, FeedConfirmService,\ + FeedDeleteService, QueryHeaderService, QueryMessagesService, ListEndpointsService + From 8b5ee58605b7f6405a3ca54098de696647d761b0 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 11 Oct 2021 18:53:28 +0300 Subject: [PATCH 37/48] Update examples.txt --- examples.txt | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/examples.txt b/examples.txt index b14a75ba..4d3c5b4f 100644 --- a/examples.txt +++ b/examples.txt @@ -6,12 +6,11 @@ >>> ######################################################## >>> # Authorization ->>> from agrirouter.auth.auth import Authorization ->>> from agrirouter.auth.parameters import AuthUrlParameter ->>> from agrirouter.auth.enums import ResponseType +>>> import agrirouter as ar +>>> from agrirouter.auth.enums import GateWays ->>> auth_params = AuthUrlParameter(application_id=application_id, response_type="onboard") ->>> auth_client = Authorization("QA", public_key=public_key, private_key=private_key) +>>> auth_params = ar.AuthUrlParameter(application_id=application_id, response_type="onboard") +>>> auth_client = ar.Authorization("QA", public_key=public_key, private_key=private_key) >>> auth_url = auth_client.get_auth_request_url(auth_params) # use this url to authorize the user as described at https://docs.my-agrirouter.com/agrirouter-interface-documentation/latest/integration/authorization.html#perform-authorization >>> auth_result_url = ... # the url the user was redirected after his authorization. @@ -43,17 +42,13 @@ True >>> # Onboarding ->>> from agrirouter.onboarding.onboarding import SoftwareOnboarding ->>> from agrirouter.onboarding.parameters import SoftwareOnboardingParameter ->>> from agrirouter.onboarding.enums import GateWays - >>> id_ = "mydeviceid" >>> certification_version_id = ... # get from AR UI >>> utc_timestamp = "2018-06-20T07:29:23.457Z" >>> time_zone = "+03:00" ->>> onboarding_client = SoftwareOnboarding("QA", public_key=public_key, private_key=private_key) ->>> onboarding_parameters = SoftwareOnboardingParameter(id_=id_, application_id=application_id, certification_version_id=certification_version_id, gateway_id=GateWays.REST.value, utc_timestamp=utc_timestamp, time_zone=time_zone, reg_code=auth_data["credentials"]["regcode"]) +>>> onboarding_client = ar.SoftwareOnboarding("QA", public_key=public_key, private_key=private_key) +>>> onboarding_parameters = ar.SoftwareOnboardingParameter(id_=id_, application_id=application_id, certification_version_id=certification_version_id, gateway_id=GateWays.REST.value, utc_timestamp=utc_timestamp, time_zone=time_zone, reg_code=auth_data["credentials"]["regcode"]) >>> onboarding_verifying_response = onboarding_client.verify(onboarding_parameters) >>> onboarding_response = onboarding_client.onboard(onboarding_parameters) >>> onboarding_response.status_code() From add71b48dd9941db0b06be9ec2342c1977f1d553 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 11 Oct 2021 18:58:23 +0300 Subject: [PATCH 38/48] Fix examples.txt --- examples.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/examples.txt b/examples.txt index 4d3c5b4f..fce90ce4 100644 --- a/examples.txt +++ b/examples.txt @@ -7,7 +7,6 @@ >>> # Authorization >>> import agrirouter as ar ->>> from agrirouter.auth.enums import GateWays >>> auth_params = ar.AuthUrlParameter(application_id=application_id, response_type="onboard") >>> auth_client = ar.Authorization("QA", public_key=public_key, private_key=private_key) @@ -42,6 +41,8 @@ True >>> # Onboarding +>>> from agrirouter.onboarding.enums import GateWays + >>> id_ = "mydeviceid" >>> certification_version_id = ... # get from AR UI >>> utc_timestamp = "2018-06-20T07:29:23.457Z" From 7a2de87464192c7997628c2e37355c52acfeb454 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 11 Oct 2021 19:00:48 +0300 Subject: [PATCH 39/48] Fix examples.txt --- examples.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples.txt b/examples.txt index fce90ce4..f0fa895a 100644 --- a/examples.txt +++ b/examples.txt @@ -14,7 +14,7 @@ >>> auth_result_url = ... # the url the user was redirected after his authorization. >>> auth_response = auth_client.extract_auth_response(auth_result_url) # auth_response containing the results of the auth process ->>> auth_client.verify_auth_response(auth_response, public_key) # you may verify auth_response to ensure answer was from AR +>>> auth_client.verify_auth_response(auth_response) # you may verify auth_response to ensure answer was from AR >>> auth_response.is_successfull # True if user accepted application, False if he rejected True From 61c63761057938f5c2649c44d87030d893d3968e Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Mon, 11 Oct 2021 20:28:55 +0300 Subject: [PATCH 40/48] Fix SoftwareOnboardingHeader --- agrirouter/onboarding/headers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agrirouter/onboarding/headers.py b/agrirouter/onboarding/headers.py index 3f9f769e..cb5b2a22 100644 --- a/agrirouter/onboarding/headers.py +++ b/agrirouter/onboarding/headers.py @@ -35,7 +35,7 @@ def get_header(self) -> dict: return self.params def sign(self, signature): - self.params["X-Agrirouter-Signature"] = signature.decode() + self.params["X-Agrirouter-Signature"] = str(signature) def _set_params(self, reg_code: str, application_id: str, signature: str, content_type: str): header = dict() From 2e3e801ae923ba6651543a30dcff604e1473c433 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Tue, 12 Oct 2021 12:23:23 +0300 Subject: [PATCH 41/48] Fix onboarding --- agrirouter/onboarding/onboarding.py | 4 +++- agrirouter/onboarding/request.py | 2 +- agrirouter/onboarding/request_body.py | 7 ++----- agrirouter/onboarding/response.py | 13 ++++++++++++- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/agrirouter/onboarding/onboarding.py b/agrirouter/onboarding/onboarding.py index 0d0094e6..130605d4 100644 --- a/agrirouter/onboarding/onboarding.py +++ b/agrirouter/onboarding/onboarding.py @@ -1,3 +1,5 @@ +import json + import requests from agrirouter.environments.environmental_services import EnvironmentalService @@ -31,7 +33,7 @@ def _perform_request(self, params: BaseOnboardingParameter, url: str) -> request if request.is_signed: return requests.post( url=request.get_url(), - data=request.get_data(), + data=json.dumps(request.get_data()), headers=request.get_header() ) raise RequestNotSigned diff --git a/agrirouter/onboarding/request.py b/agrirouter/onboarding/request.py index aae1e653..1e7113b0 100644 --- a/agrirouter/onboarding/request.py +++ b/agrirouter/onboarding/request.py @@ -19,7 +19,7 @@ def get_header(self): return self.header.get_header() def sign(self, private_key): - signature = create_signature(self.body.json(new_lines=False), private_key) + signature = create_signature(self.body.json(), private_key) self.header.sign(signature) @property diff --git a/agrirouter/onboarding/request_body.py b/agrirouter/onboarding/request_body.py index d1c108eb..818a58d2 100644 --- a/agrirouter/onboarding/request_body.py +++ b/agrirouter/onboarding/request_body.py @@ -70,11 +70,8 @@ def _set_params(self, "timeZone": time_zone, } - def json(self, new_lines: bool = True) -> str: - result = json.dumps(self.get_parameters(), indent="") - if not new_lines: - return result.replace("\n", "") - return result + def json(self) -> str: + return str(self.get_parameters()) @staticmethod def _validate_certificate_type(certificate_type: str) -> None: diff --git a/agrirouter/onboarding/response.py b/agrirouter/onboarding/response.py index 9eb82a5e..cab6bca0 100644 --- a/agrirouter/onboarding/response.py +++ b/agrirouter/onboarding/response.py @@ -42,7 +42,18 @@ class SoftwareOnboardingResponse(BaseOnboardingResonse): """ Response from onboarding request used for Farming Software or Telemetry Platform """ - pass + + def get_connection_criteria(self) -> dict: + response_data = self.data() + return response_data.get("connectionCriteria") + + def get_sensor_alternate_id(self): + response_data = self.data() + return response_data.get("sensorAlternateId") + + def get_authentication(self): + response_data = self.data() + return response_data.get("authentication") class CUOnboardingResponse(BaseOnboardingResonse): From 49827d2f3cb9b3bdb4aa4efd74ed80f0d85ec4dc Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 13:59:46 +0300 Subject: [PATCH 42/48] Implement messaging certification --- agrirouter/messaging/certification.py | 28 +++++++++++--------- agrirouter/messaging/services/commons.py | 18 +++++++------ agrirouter/messaging/services/http/outbox.py | 13 +++++---- 3 files changed, 33 insertions(+), 26 deletions(-) diff --git a/agrirouter/messaging/certification.py b/agrirouter/messaging/certification.py index 40156abb..34466420 100644 --- a/agrirouter/messaging/certification.py +++ b/agrirouter/messaging/certification.py @@ -1,20 +1,22 @@ import json +import os +import pathlib from pathlib import Path +import tempfile + from agrirouter.onboarding.response import BaseOnboardingResonse -def create_certificate_file(onboard_response: BaseOnboardingResonse=None, dir: Path=None): - dir = dir if dir else Path().cwd().absolute() - if isinstance(dir, Path): - if dir.is_absolute(): - filename = onboard_response.get_sensor_alternate_id() - filepath = dir.with_name(filename) - if not filepath.exists(): - filepath.touch() - data = onboard_response.get_authentication()["certificate"] - filepath.write_text(json.dumps(data)) +def create_certificate_file(onboard_response: BaseOnboardingResonse): + dir_ = tempfile.mkdtemp() + prefix = onboard_response.get_sensor_alternate_id() + data = onboard_response.get_authentication().get_certificate() + fd, path = tempfile.mkstemp(dir=dir_, prefix=prefix, text=True) + try: + with os.fdopen(fd, 'w') as tmp: + tmp.write(data) + except Exception: + os.remove(path) - return filepath - raise ValueError("Invalid dir parameter. Dir must be an absolute path") - raise ValueError("Invalid dir parameter. Must be an instance of pathlib.Path() class") + return path diff --git a/agrirouter/messaging/services/commons.py b/agrirouter/messaging/services/commons.py index ae5499f9..d5c0b35c 100644 --- a/agrirouter/messaging/services/commons.py +++ b/agrirouter/messaging/services/commons.py @@ -11,7 +11,8 @@ class AbstractMessagingClient(ABC): - def create_message_request(self, parameters) -> MessageRequest: + @staticmethod + def create_message_request(parameters) -> MessageRequest: messages = [] for encoded_message in parameters.get_encoded_messages(): message = Message(encoded_message) @@ -33,12 +34,13 @@ class HttpMessagingService(AbstractMessagingClient): def send(self, parameters) -> MessagingResult: request = self.create_message_request(parameters) response = requests.post( - url=parameters.get_onboarding_response().get_connection_criteria()["measures"], + url=parameters.get_onboarding_response().get_connection_criteria().get_measures(), headers={"Content-type": "application/json"}, data=request.json_serialize(), - # TODO: improve create_certificate_file() - # verify=create_certificate_file(parameters.get_onboarding_response()), - # cert=create_certificate_file(parameters.get_onboarding_response()), + cert=( + create_certificate_file(parameters.get_onboarding_response()), + parameters.get_onboarding_response().get_authentication().get_secret() + ), ) result = MessagingResult([parameters.get_message_id()]) return result @@ -63,14 +65,14 @@ def __init__(self, on_message_callback=on_message_callback, ) self.client.connect( - self.onboarding_response.get_connection_criteria()["host"], - self.onboarding_response.get_connection_criteria()["port"] + self.onboarding_response.get_connection_criteria().get_host(), + self.onboarding_response.get_connection_criteria().get_port() ) def send(self, parameters, qos: int = 0) -> MessagingResult: mqtt_payload = self.create_message_request(parameters) self.client.publish( - self.onboarding_response.get_connection_criteria()["measures"], mqtt_payload, + self.onboarding_response.get_connection_criteria().get_measures(), mqtt_payload, qos=qos ) result = MessagingResult([parameters.get_message_id()]) diff --git a/agrirouter/messaging/services/http/outbox.py b/agrirouter/messaging/services/http/outbox.py index 1172bc8b..dafda4b1 100644 --- a/agrirouter/messaging/services/http/outbox.py +++ b/agrirouter/messaging/services/http/outbox.py @@ -1,17 +1,20 @@ import requests -from messaging.result import OutboxResponse +from agrirouter.messaging.result import OutboxResponse + +from agrirouter.messaging.certification import create_certificate_file class OutboxService: def fetch(self, onboarding_response) -> OutboxResponse: response = requests.get( - url=onboarding_response.get_connection_criteria()["commands"], + url=onboarding_response.get_connection_criteria().get_commands(), headers={"Content-type": "application/json"}, - # TODO: improve create_certificate_file() - # verify=create_certificate_file(parameters.get_onboarding_response()), - # cert=create_certificate_file(parameters.get_onboarding_response()), + cert=( + create_certificate_file(onboarding_response), + onboarding_response.get_authentication().get_secret() + ), ) outbox_response = OutboxResponse(status_code=response.status_code) From fdf133a759b532af1945fd4a80d79f4cb636a584 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:01:15 +0300 Subject: [PATCH 43/48] Fix onboarding headers signing --- agrirouter/onboarding/headers.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/agrirouter/onboarding/headers.py b/agrirouter/onboarding/headers.py index cb5b2a22..a1e0d61c 100644 --- a/agrirouter/onboarding/headers.py +++ b/agrirouter/onboarding/headers.py @@ -1,3 +1,4 @@ +import base64 from abc import ABC, abstractmethod from agrirouter.constants.media_types import ContentTypes @@ -34,16 +35,17 @@ def __init__(self, def get_header(self) -> dict: return self.params - def sign(self, signature): - self.params["X-Agrirouter-Signature"] = str(signature) + def sign(self, signature: bytes): + print(signature) + self.params["X-Agrirouter-Signature"] = base64.b64encode(signature).decode() + print(self.params["X-Agrirouter-Signature"]) def _set_params(self, reg_code: str, application_id: str, signature: str, content_type: str): header = dict() header["Authorization"] = f"Bearer {reg_code}" header["Content-Type"] = content_type header["X-Agrirouter-ApplicationId"] = application_id - if signature: - header["X-Agrirouter-Signature"] = signature + header["X-Agrirouter-Signature"] = signature if signature else "" self.params = header From 8bd9dab92df9057e780f27162a0e2e3fde6adef5 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:02:18 +0300 Subject: [PATCH 44/48] Refactor onboarding request body --- agrirouter/onboarding/request_body.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/agrirouter/onboarding/request_body.py b/agrirouter/onboarding/request_body.py index 818a58d2..951ab01d 100644 --- a/agrirouter/onboarding/request_body.py +++ b/agrirouter/onboarding/request_body.py @@ -1,5 +1,6 @@ import json from abc import ABC, abstractmethod +from datetime import datetime from agrirouter.onboarding.enums import CertificateTypes, GateWays from agrirouter.onboarding.exceptions import WrongCertificationType, WrongGateWay @@ -25,18 +26,21 @@ def json(self, *args, **kwargs): class SoftwareOnboardingBody(BaseOnboardingBody): def __init__(self, + *, id_, application_id, certification_version_id, gateway_id, certificate_type, - utc_timestamp, - time_zone + time_zone, + utc_timestamp=None ): self._validate_certificate_type(certificate_type) self._validate_gateway_id(gateway_id) + utc_timestamp = utc_timestamp if utc_timestamp else datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ") + self._set_params( id_, application_id, @@ -71,7 +75,7 @@ def _set_params(self, } def json(self) -> str: - return str(self.get_parameters()) + return json.dumps(self.get_parameters()) @staticmethod def _validate_certificate_type(certificate_type: str) -> None: From cd8a2559b3c81c7e46217dd57137fa50d52785c6 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:02:58 +0300 Subject: [PATCH 45/48] Refactor onboarding parameters --- agrirouter/onboarding/parameters.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/agrirouter/onboarding/parameters.py b/agrirouter/onboarding/parameters.py index f88be38c..1ca75312 100644 --- a/agrirouter/onboarding/parameters.py +++ b/agrirouter/onboarding/parameters.py @@ -1,4 +1,5 @@ from abc import ABC, abstractmethod +from datetime import datetime from agrirouter.constants.media_types import ContentTypes from agrirouter.onboarding.enums import CertificateTypes @@ -20,15 +21,16 @@ def get_body_params(self, *args, **kwargs): class SoftwareOnboardingParameter(BaseOnboardingParameter): def __init__(self, + *, id_, application_id, certification_version_id, gateway_id, - utc_timestamp, time_zone, reg_code, + utc_timestamp=None, content_type=ContentTypes.APPLICATION_JSON.value, - certificate_type=CertificateTypes.P12.value, + certificate_type=CertificateTypes.PEM.value, ): self.id_ = id_ @@ -37,7 +39,8 @@ def __init__(self, self.certification_version_id = certification_version_id self.gateway_id = str(gateway_id) self.certificate_type = certificate_type - self.utc_timestamp = str(utc_timestamp) + self.utc_timestamp = str(utc_timestamp) if utc_timestamp \ + else datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ") self.time_zone = str(time_zone) self.reg_code = reg_code From 7b06470300c20fa6aaa6376f8734637b4ba7c087 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:04:44 +0300 Subject: [PATCH 46/48] Refactor onboarding client --- agrirouter/onboarding/onboarding.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/agrirouter/onboarding/onboarding.py b/agrirouter/onboarding/onboarding.py index 130605d4..155d08dc 100644 --- a/agrirouter/onboarding/onboarding.py +++ b/agrirouter/onboarding/onboarding.py @@ -8,7 +8,8 @@ from agrirouter.onboarding.parameters import SoftwareOnboardingParameter, BaseOnboardingParameter, CUOnboardingParameter from agrirouter.onboarding.request import SoftwareOnboardingRequest, BaseOnboardingRequest, CUOnboardingRequest from agrirouter.onboarding.request_body import SoftwareOnboardingBody, CUOnboardingBody -from agrirouter.onboarding.response import SoftwareVerifyOnboardingResponse, SoftwareOnboardingResponse, CUOnboardingResponse +from agrirouter.onboarding.response import SoftwareVerifyOnboardingResponse, SoftwareOnboardingResponse, \ + CUOnboardingResponse class SoftwareOnboarding(EnvironmentalService): From 19af659df3f16559324ca844ca6694e6ce46ea59 Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:09:07 +0300 Subject: [PATCH 47/48] Fix requests certification in messaging --- agrirouter/messaging/services/commons.py | 23 ++++++++++++-------- agrirouter/messaging/services/http/outbox.py | 22 ++++++++++++------- 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/agrirouter/messaging/services/commons.py b/agrirouter/messaging/services/commons.py index d5c0b35c..3e368632 100644 --- a/agrirouter/messaging/services/commons.py +++ b/agrirouter/messaging/services/commons.py @@ -1,3 +1,4 @@ +import os from abc import ABC, abstractmethod import requests @@ -33,15 +34,19 @@ class HttpMessagingService(AbstractMessagingClient): def send(self, parameters) -> MessagingResult: request = self.create_message_request(parameters) - response = requests.post( - url=parameters.get_onboarding_response().get_connection_criteria().get_measures(), - headers={"Content-type": "application/json"}, - data=request.json_serialize(), - cert=( - create_certificate_file(parameters.get_onboarding_response()), - parameters.get_onboarding_response().get_authentication().get_secret() - ), - ) + cert_file_path = create_certificate_file(parameters.get_onboarding_response()) + try: + response = requests.post( + url=parameters.get_onboarding_response().get_connection_criteria().get_measures(), + headers={"Content-type": "application/json"}, + data=request.json_serialize(), + cert=( + cert_file_path, + parameters.get_onboarding_response().get_authentication().get_secret() + ), + ) + finally: + os.remove(cert_file_path) result = MessagingResult([parameters.get_message_id()]) return result diff --git a/agrirouter/messaging/services/http/outbox.py b/agrirouter/messaging/services/http/outbox.py index dafda4b1..b81bfcbf 100644 --- a/agrirouter/messaging/services/http/outbox.py +++ b/agrirouter/messaging/services/http/outbox.py @@ -1,3 +1,5 @@ +import os + import requests from agrirouter.messaging.result import OutboxResponse @@ -8,14 +10,18 @@ class OutboxService: def fetch(self, onboarding_response) -> OutboxResponse: - response = requests.get( - url=onboarding_response.get_connection_criteria().get_commands(), - headers={"Content-type": "application/json"}, - cert=( - create_certificate_file(onboarding_response), - onboarding_response.get_authentication().get_secret() - ), - ) + cert_file_path = create_certificate_file(onboarding_response) + try: + response = requests.get( + url=onboarding_response.get_connection_criteria().get_commands(), + headers={"Content-type": "application/json"}, + cert=( + cert_file_path, + onboarding_response.get_authentication().get_secret() + ), + ) + finally: + os.remove(cert_file_path) outbox_response = OutboxResponse(status_code=response.status_code) outbox_response.json_deserialize(response.json()["contents"]) From 1ed15e206850aa19b112b7d7309460b7a66f16bc Mon Sep 17 00:00:00 2001 From: Alexey Petrovsky Date: Wed, 13 Oct 2021 14:34:58 +0300 Subject: [PATCH 48/48] Refactor messaging certification --- agrirouter/messaging/certification.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/agrirouter/messaging/certification.py b/agrirouter/messaging/certification.py index 34466420..5579b870 100644 --- a/agrirouter/messaging/certification.py +++ b/agrirouter/messaging/certification.py @@ -16,7 +16,8 @@ def create_certificate_file(onboard_response: BaseOnboardingResonse): try: with os.fdopen(fd, 'w') as tmp: tmp.write(data) - except Exception: + except Exception as exc: os.remove(path) + raise exc return path