Initial commit - Crew Portal API
This commit is contained in:
commit
fd73fce375
9 changed files with 158 additions and 0 deletions
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
venv/
|
||||
*.pyc
|
||||
__pycache__/
|
||||
settings.ini
|
76
classes/adonis.py
Normal file
76
classes/adonis.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
from urllib.request import urlopen, Request, urljoin
|
||||
|
||||
import json
|
||||
|
||||
from classes.exceptions import AdonisAuthenticationDeniedError, AdonisError
|
||||
from classes.crew import Crew
|
||||
|
||||
from const import USER_AGENT
|
||||
|
||||
|
||||
class Adonis:
|
||||
def __init__(self, crew_portal_base_url: str, login: str, password: str):
|
||||
self.crew_portal_base_url = crew_portal_base_url
|
||||
self.login = login
|
||||
self.password = password
|
||||
|
||||
@classmethod
|
||||
def fromConfig(cls, config):
|
||||
return cls(config.crew_portal_base_url, config.login, config.password)
|
||||
|
||||
def requestCrewPortal(self, endpoint: str, payload: dict, add_token: bool = True, wrap_request: bool = True, extract_response: bool = True):
|
||||
url = urljoin(self.crew_portal_base_url, endpoint)
|
||||
|
||||
req = Request(url)
|
||||
req.add_header("User-Agent", USER_AGENT)
|
||||
req.add_header("Content-Type", "application/json")
|
||||
req.add_header("Accept", "application/json")
|
||||
|
||||
if add_token:
|
||||
payload["Authentication_Token"] = self.getToken()
|
||||
|
||||
if wrap_request:
|
||||
payload = {"request": payload}
|
||||
|
||||
req.data = json.dumps(payload).encode()
|
||||
|
||||
res = json.loads(urlopen(req).read())
|
||||
|
||||
if extract_response:
|
||||
res = res[endpoint + "Result"]
|
||||
|
||||
if not res["Authentication_Approved"]:
|
||||
raise AdonisAuthenticationDeniedError(
|
||||
res["Authentication_ReasonDenied"])
|
||||
|
||||
if res["ErrorText"]:
|
||||
raise AdonisError(res["ErrorText"])
|
||||
|
||||
return res
|
||||
|
||||
def getTokenCrewPortal(self, lifetime: int = 60):
|
||||
data = {
|
||||
"credentials": {
|
||||
"Login": self.login,
|
||||
"Password": self.password,
|
||||
"LifeTime": lifetime
|
||||
}
|
||||
}
|
||||
|
||||
result = self.requestCrewPortal("GNL_API_AUTHENTICATION", data, False, False)
|
||||
|
||||
return result["Authentication_Token"]
|
||||
|
||||
def getCrewPersonalData(self, pin):
|
||||
data = {
|
||||
"Pin": pin
|
||||
}
|
||||
|
||||
result = self.requestCrewPortal("DG_PersonalInformationRead", data)
|
||||
|
||||
return result
|
||||
|
||||
def getCrew(self, pin):
|
||||
crew = Crew(pin)
|
||||
crew._personal_data = self.getCrewPersonalData(pin)
|
||||
return crew
|
18
classes/config.py
Normal file
18
classes/config.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
from configparser import ConfigParser
|
||||
|
||||
class Config:
|
||||
def __init__(self, path):
|
||||
self.config = ConfigParser()
|
||||
self.config.read(path)
|
||||
|
||||
@property
|
||||
def crew_portal_base_url(self):
|
||||
return self.config["ADONIS"]["CrewPortalBaseURL"]
|
||||
|
||||
@property
|
||||
def login(self):
|
||||
return self.config["ADONIS"]["Login"]
|
||||
|
||||
@property
|
||||
def password(self):
|
||||
return self.config["ADONIS"]["Password"]
|
20
classes/crew.py
Normal file
20
classes/crew.py
Normal file
|
@ -0,0 +1,20 @@
|
|||
class Crew:
|
||||
def __init__(self, pin):
|
||||
self.pin = pin
|
||||
self._personal_data = None
|
||||
|
||||
@property
|
||||
def firstName(self):
|
||||
return self._personal_data["DetailsAll"]["Details"]["FirstName"]
|
||||
|
||||
@property
|
||||
def middleName(self):
|
||||
return self._personal_data["DetailsAll"]["Details"]["MiddleName"]
|
||||
|
||||
@property
|
||||
def lastName(self):
|
||||
return self._personal_data["DetailsAll"]["Details"]["LastName"]
|
||||
|
||||
@property
|
||||
def birthDate(self):
|
||||
return self._personal_data["DetailsAll"]["Details"]["BirthDate"]
|
5
classes/exceptions.py
Normal file
5
classes/exceptions.py
Normal file
|
@ -0,0 +1,5 @@
|
|||
class AdonisError(Exception):
|
||||
pass
|
||||
|
||||
class AdonisAuthenticationDeniedError(AdonisError):
|
||||
pass
|
1
const.py
Normal file
1
const.py
Normal file
|
@ -0,0 +1 @@
|
|||
USER_AGENT = "PyAdonis / dev (https://kumi.systems)"
|
0
requirements.txt
Normal file
0
requirements.txt
Normal file
4
settings.dist.ini
Normal file
4
settings.dist.ini
Normal file
|
@ -0,0 +1,4 @@
|
|||
[ADONIS]
|
||||
CrewPortalBaseURL=http://adonis/AdonisWebServices/CrewPortalWebService.svc/
|
||||
Login=Adonis_API
|
||||
Password=
|
30
worker.py
Normal file
30
worker.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
from argparse import ArgumentParser
|
||||
|
||||
from classes.config import Config
|
||||
from classes.adonis import Adonis
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument("pin", nargs="+")
|
||||
args = parser.parse_args()
|
||||
|
||||
config = Config("settings.ini")
|
||||
api = Adonis.fromConfig(config)
|
||||
|
||||
data = dict()
|
||||
|
||||
for pin in args.pin:
|
||||
crewdata = dict()
|
||||
|
||||
crew = api.getCrew(pin)
|
||||
|
||||
crewdata["firstName"] = crew.firstName
|
||||
crewdata["middleName"] = crew.middleName
|
||||
crewdata["lastName"] = crew.lastName
|
||||
crewdata["dob"] = crew.birthDate
|
||||
crewdata["password"] = crew.birthDate.replace("-","")
|
||||
|
||||
data[pin] = crewdata
|
||||
|
||||
print(data)
|
Loading…
Reference in a new issue