diff --git a/Api/__init__.py b/Api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/Api/api.py b/Api/api.py new file mode 100644 index 0000000..0bb8e2f --- /dev/null +++ b/Api/api.py @@ -0,0 +1,40 @@ +import json +import requests + +from login import LoginApi + + +class Api: + def __init__(self, collection_name: str, ): + self.access_token: str + self.collection_name = collection_name + self.api_basepath = "http://127.0.0.1:8090/api" + self.email = "juliancuni@gmail.com" + self.password = "MatraPaPuPa..11" + + login = LoginApi(email=self.email, password=self.password).login() + self.access_token = login["token"] + + def list_collection(self, filter=""): + url = f"{self.api_basepath}/collections/{self.collection_name}/records?{filter}" + res = requests.get(url=url, headers={ + 'Authorization': f'Admin {self.access_token}'}) + return res.json() + + def create_collection(self, obj, filter=""): + url = f"{self.api_basepath}/collections/{self.collection_name}/records" + exists = self.list_collection(filter=filter) + if len(exists["items"]) > 0: + return exists + else: + try: + # obj = json.dumps(obj, allow_nan=False) + print('saving') + res = requests.post(url=url, json=obj, headers={ + 'Authorization': f'Admin {self.access_token}'}) + return res.json() + except ValueError as e: + print(e) + print(obj) + return None + return None diff --git a/Api/login.py b/Api/login.py new file mode 100644 index 0000000..81976a7 --- /dev/null +++ b/Api/login.py @@ -0,0 +1,16 @@ +import requests + + +class LoginApi: + def __init__(self, email: str, password: str): + self.email = email + self.password = password + self.api_basepath = "http://127.0.0.1:8090/api" + self.login_endpoing = "/admins/auth-via-email" + + def login(self): + credentials = {"email": self.email, "password": self.password} + print(self.api_basepath + self.login_endpoing) + res = requests.post(self.api_basepath + + self.login_endpoing, credentials) + return res.json() diff --git a/Api/main.py b/Api/main.py new file mode 100644 index 0000000..a955452 --- /dev/null +++ b/Api/main.py @@ -0,0 +1,81 @@ +import os +from posixpath import join +from re import M +import pandas as pd +from api import Api + + +class Main: + def __init__(self): + self.pacientet_api = Api("pacientet") + self.klinikat_api = Api("klinikat") + self.pacientet_klinikat_api = Api("pacientet_klinikat") + + pass + + def read_excel(self): + xlsx_path = os.path.join(os.path.dirname(__file__), '../Excel/') + for dirpath, dirname, filename in os.walk(xlsx_path): + for name in filename: + if name.startswith('kirurgji_') or name.startswith('OBS-GYN_') or name.startswith('urgjenca_'): + klinika_emer = name.replace('.xlsx', '').split('_')[0] + pacientet_klinikat_filter = f"filter=(emer='{klinika_emer}')" + klinika_res = self.klinikat_api.create_collection( + {"emer": klinika_emer}, filter=pacientet_klinikat_filter) + klinika_id = klinika_res['items'][0]['id'] + df = pd.read_excel(os.path.join(dirpath, name), parse_dates=[ + 'DATELINDJA_KORIGJ'], sheet_name='Sheet1') + df.dropna(subset=['EMER'], inplace=True) + for index, row in df.iterrows(): + emer = row['EMER'].strip() + mbiemer = row['MBIEMER'].strip() + if pd.isnull(df.loc[index, 'DATELINDJA_KORIGJ']): + datelindja = '' + else: + datelindja = row['DATELINDJA_KORIGJ'] + mosha = row['MOSHA'] + if pd.isnull(df.loc[index, 'ERROR']): + error = '' + else: + error = row['ERROR'] + + new_pacient = {"emer": emer, "mbiemer": mbiemer, + "datelindja": str(datelindja), "mosha": str(mosha), "error": str(error)} + pacient_filter = f"filter=(emer='{emer}' %26%26 mbiemer='{mbiemer}' %26%26 datelindja='{datelindja}')" + + pacienti_res = self.pacientet_api.create_collection( + new_pacient, filter=pacient_filter) + pacienti_id = pacienti_res['items'][0]['id'] + + new_pacientet_klinikat = { + "pacienti_id": pacienti_id, "klinika_id": klinika_id} + pacientet_klinikat_filter = f"filter=(pacienti_id='{pacienti_id}' %26%26 klinika_id='{klinika_id}')" + + pacient_klinika_res = self.pacientet_klinikat_api.create_collection( + new_pacientet_klinikat, pacientet_klinikat_filter) + print(pacient_klinika_res) + + def test_backend(self) : + # pacientet_klinikat_res = self.pacientet_klinikat_api.list_collection() + # print(pacientet_klinikat_res["totalItems"]) + pacient_filter = f"expand=klinika_id" + pacientet_res = self.pacientet_api.list_collection(filter=pacient_filter) + print(pacientet_res) + # print(pacientet_res["totalItems"]) + +main = Main() +main.test_backend() +# main.read_excel() +# api = Api("pacientet") +# new_pacient = {"emer": "Test", "mbiemer": "test", +# "mosha": 100, "datelindja": datetime.now().isoformat()} +# filter = f"(emer='{new_pacient['emer']}'&&mbiemer='{new_pacient['mbiemer']}'&&datelindja={new_pacient['datelindja']})" +# pacientet = api.list_collection(filter=filter) +# if len(pacientet["items"]) > 0: +# print('egziston') +# else: +# print('saving') +# res = api.create_collection(new_pacient) + + +# # r = requests.post('http://127.0.0.1:8090/api/collections/pacientet/records', json=json=json.dumps(new_pacient), headers=headers) diff --git a/Api/pacienti.py b/Api/pacienti.py new file mode 100644 index 0000000..8876ae0 --- /dev/null +++ b/Api/pacienti.py @@ -0,0 +1,11 @@ +class Pacienti: + def __init__(self, emer: str, mbiemer: str, mosha: int, datelindja: str, error: str, access_token: str): + self.emer = emer + self.mbiemer = mbiemer + self.mosha = mosha + self.datelindja = datelindja + self.error = error + + def krijo_pactient(self): + pactienti = {"emer": self.emer, + "mbiemer": self.mbiemer, "mosha": self.mosha, "datelindja": self.datelindja, "error": self.error} diff --git a/Api/singleton.py b/Api/singleton.py new file mode 100644 index 0000000..ee5e117 --- /dev/null +++ b/Api/singleton.py @@ -0,0 +1,16 @@ +class Singleton: + def __init__(self, decorated): + self._decorated = decorated + + def instance(self): + try: + return self._instance + except AttributeError: + self._instance = self._decorated() + return self._instance + + def __call__(self): + raise TypeError('Singletons must be accessed through `instance()`.') + + def __instancecheck__(self, inst): + return isinstance(inst, self._decorated) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 9f3994e..50750f8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,11 @@ autopep8==1.7.0 certifi==2022.6.15.2 charset-normalizer==2.1.1 +et-xmlfile==1.1.0 idna==3.4 lxml==4.9.1 numpy==1.23.3 +openpyxl==3.0.10 pandas==1.4.4 pycodestyle==2.9.1 python-dateutil==2.8.2 diff --git a/save_to_api.py b/save_to_api.py deleted file mode 100644 index 4f19aee..0000000 --- a/save_to_api.py +++ /dev/null @@ -1,20 +0,0 @@ - -import requests - - -class SaveToApi: - pass - - -class Pacienti: - def __init__(self, emer: str, mbiemer: str, mosha: int): - self.emer = emer - self.mbiemer = mbiemer - self.mosha = mosha - self.api_basepath = "http://127.0.0.1:8090/api/" - self.krijo_endpoint = "/api/collections/pacientet/records" - - def krijo_pactient(self): - pactienti = {"emer": self.emer, - "mbiemer": self.mbiemer, "mosha": self.mosha} - \ No newline at end of file