"""
Wrap all calls to the divera api as defined by https://api.divera247.com/?urls.primaryName=api%2Fv2%2Falarm
"""
import random
import string
from divera.api import endpointwrappers as _epw
from divera.api.v2 import models as _models
[docs]class GetAll(_models.GetAll):
path = '/api/v2/messages'
[docs]class Get(GetAll, _models.Get):
@property
def path(self):
return f'/api/v2/messages/{self.obj.__getattribute__(self.obj.sorting_key)}'
[docs]class Create(_epw.FunctionalEndPoint, _epw.ObjectRelated):
method = 'POST'
path = '/api/v2/messages'
def __call__(
self,
base_url: str,
access_token: str,
*args, **kwargs
) -> [list, dict]:
while True:
boundary = '-' * 27 + ''.join([random.choice(string.digits) for _ in range(30)])
if boundary not in self.obj.text:
break
kwargs = {
'headers': {
'Content-Type': f'multipart/form-data; boundary={boundary}',
},
'data': '\n'.join([
f'--{boundary}',
f'Content-Disposition: form-data; name="Message[message_channel_id]"',
f'',
f'{self.obj.message_channel_id}',
f'--{boundary}',
f'Content-Disposition: form-data; name="Message[parent_id]"',
f'',
f'{self.obj.parent_id or 0}',
f'--{boundary}',
f'Content-Disposition: form-data; name="Message[text]"',
f'',
f'{self.obj.text}' or '\u200b',
f'--{boundary}',
])
}
return (
base_url.rstrip('/') + self.path + f'?accesskey={access_token}',
), kwargs
[docs]class Delete(_models.Delete):
@property
def path(self) -> str:
return f'/api/v2/messages/{self.obj.id}'