Skip to content

Commit

Permalink
Merge pull request #12 from logo-group/v_0.2.x
Browse files Browse the repository at this point in the history
V 0.2.x
  • Loading branch information
arifbozdag authored Mar 15, 2023
2 parents 6c3f1d4 + 98aa3b1 commit f507dea
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 27 deletions.
77 changes: 51 additions & 26 deletions dys_connector/dys_api_manager.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import json
import logging

import requests
import json
import dys_connector.exceptions as dys_exc

from enum import Enum
from dys_connector.exceptions import *
from dys_connector.dto import VerificationType

DEFAULT_HEADER = "application/json"

# Used endpoints of DYS
ENDPOINTS = {
"COPY": "/api/v2.0/document/copy/{cid}",
Expand Down Expand Up @@ -52,7 +54,7 @@ class DYSManager:
Logo IDM token for Authentication & Authorization
"""

def __init__(self, dys_base_url, idm_token):
def __init__(self, dys_base_url, idm_token, corid=None):
if None in (dys_base_url, idm_token):
raise ValueError("DYS Base Url or IDM Token cannot be None!")
if dys_base_url[-1] == '/':
Expand All @@ -62,6 +64,7 @@ def __init__(self, dys_base_url, idm_token):
self.HEADERS = {
"Authorization": "Bearer " + self.TOKEN,
}
self.corid = corid

def get_url(self, task: str):
"""
Expand All @@ -75,18 +78,22 @@ def get_url(self, task: str):
@staticmethod
def check_dys_exception(response: requests.Response):
code = response.status_code
logging.debug(code)
logging.debug(response.text)

if int(code / 100) == 2:
logging.debug({'status_code': code, 'dys_response': response.text})
else:
logging.error({'status_code': code, 'dys_response': response.text})

if code == 400:
raise DysBadRequestError()
raise dys_exc.DysBadRequestError()
elif code == 401:
raise DysUnauthorizedError()
raise dys_exc.DysUnauthorizedError()
elif code == 500:
raise DysInternalServerError()
raise dys_exc.DysInternalServerError()
elif code == 502:
raise DysBadGatewayError()
raise dys_exc.DysBadGatewayError()
elif int(code / 100) != 2:
raise DysHttpException(status_code=code)
raise dys_exc.DysHttpException(status_code=code)

def make_dys_request(self, method: str, url: str, headers=None, **kwargs):
"""
Expand All @@ -97,8 +104,15 @@ def make_dys_request(self, method: str, url: str, headers=None, **kwargs):
:param kwargs: (optional) Optional parameters of request method. Ex: data, files etc.
:return: :class:`Response <Response>` object
"""
log = {**{'method': method, 'url': url}, **kwargs}
if not headers:
headers = self.HEADERS.copy()
if self.corid:
headers.update({'corid': self.corid})
log.update({'corid': self.corid})

logging.info(log)

response = requests.request(method, url, headers=headers, **kwargs)
self.check_dys_exception(response)
return response
Expand Down Expand Up @@ -131,7 +145,7 @@ def post_folder(self, parent_folder_cid: str, folder_name: str):
"""
url = self.get_url("UPLOAD_FOLDER") + "?parentFolderCid=" + parent_folder_cid + "&folderName=" + folder_name
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json;charset=UTF-8"
headers["Content-Type"] = f"{DEFAULT_HEADER};charset=UTF-8"
response = self.make_dys_request("POST", url, headers=headers)
value_parent = json.loads(response.text)
return value_parent["cid"]
Expand Down Expand Up @@ -163,7 +177,7 @@ def get_dir_structure(self, folder_cid: str, _from: int = 0, _to: int = 10000,
url = self.get_url(
"DIR_STRUCTURE") + f'?folderCid={folder_cid}&from={_from}&size={_to}&containerType={cont_type.name} '
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json"
headers["Content-Type"] = DEFAULT_HEADER
res = self.make_dys_request("GET", url, headers=headers)
dir_list = json.loads(res.text)
return dir_list
Expand All @@ -176,7 +190,7 @@ def get_doc_metadata(self, doc_cid: str):
"""
url = self.get_url("GET_DOC_META").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json"
headers["Content-Type"] = DEFAULT_HEADER
res = json.loads(self.make_dys_request("GET", url, headers=headers).text)
metadata = res["varValues"]
return metadata
Expand All @@ -193,7 +207,7 @@ def update_metadata(self, doc_cid: str, metadata: dict, doc_type_id: str):
pay_dict = {"documentTypeIds": [], "tagIds": [doc_type_id], "varValues": metadata}
payload = json.dumps(pay_dict).encode("utf-8")
headers = {
"Content-Type": "application/json;charset=UTF-8",
"Content-Type": f"{DEFAULT_HEADER};charset=UTF-8",
"Authorization": "Bearer " + self.TOKEN,
}
res = self.make_dys_request("PUT", url, headers=headers, data=payload)
Expand All @@ -207,18 +221,32 @@ def get_document_without_content(self, doc_cid: str):
"""
url = self.get_url("GET_DOC_INFO").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json"
headers["Content-Type"] = DEFAULT_HEADER
res = self.make_dys_request("GET", url, headers=headers)
document = json.loads(res.text)
return document

def get_external_share(self, doc_cid: str, hide_name: bool = True) -> list:
"""
Get existing external share url for a document.
:param doc_cid: Document Cid
:param hide_name: bool: Hide document name on external share.
:return: External share url string
"""
url = self.get_url("EXTERNAL_SHARE").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = f"{DEFAULT_HEADER};charset=UTF-8"
response = self.make_dys_request("GET", url, headers=headers)
value = json.loads(response.text)
return list(map(lambda link: link + "&hideName={}".format(hide_name), (item['shareLink'] for item in value)))

def generate_external_share(self, doc_cid: str, hide_name: bool = True,
role_id_list: list = [],
disposable: bool = False,
download_disabled: bool = False,
duration_day: int = 0,
idm_external_share: bool = True,
verification_type: int = VerificationType.NONE
verification_type = VerificationType.NONE
):
"""
Generate external share url for a document.
Expand All @@ -231,13 +259,10 @@ def generate_external_share(self, doc_cid: str, hide_name: bool = True,
:param idm_external_share: IDM External Share defaults to True
:param verification_type:
:return: External share url string
Args:
role_id_list:
"""
url = self.get_url("EXTERNAL_SHARE").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json;charset=UTF-8"
headers["Content-Type"] = f"{DEFAULT_HEADER};charset=UTF-8"
payload = {
"authorizationRoleList": role_id_list,
"cancelled": "false",
Expand Down Expand Up @@ -268,7 +293,7 @@ def get_document_content(self, doc_cid: str) -> str:
"""
url = self.get_url("DOC_CONTENT").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json"
headers["Content-Type"] = DEFAULT_HEADER
response = self.make_dys_request("GET", url, headers=headers)
value = response.text
return value
Expand All @@ -284,9 +309,9 @@ def copy_document(self, doc_cid: str, parent_folder_cid: str = None, x_lang: str
comes with Copy of or - Kopya
:return: Cid of the new document.
"""
url = end_point = self.get_url("COPY").format(cid=doc_cid)
url = self.get_url("COPY").format(cid=doc_cid)
headers = self.HEADERS.copy()
headers["Content-Type"] = "application/json"
headers["Content-Type"] = DEFAULT_HEADER
if x_lang:
headers["X-Lang"] = x_lang
params = {"addCopyOfPrefix": add_copy_of_prefix}
Expand Down Expand Up @@ -337,6 +362,6 @@ def clear_directory(self, cid: str) -> str:
for item in dir_list:
try:
self.delete(item["cid"])
except Exception as e:
raise DysClearDirectoryItemDeleteException()
except Exception:
raise dys_exc.DysClearDirectoryItemDeleteException()
return cid
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
import pathlib

VERSION = '0.2.13'
VERSION = '0.2.17'
DESCRIPTION = 'Logo DYS Connector API Python Implementation'

# The directory containing this file
Expand Down

0 comments on commit f507dea

Please sign in to comment.