brynq-sdk-bob 1.0.0__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/PKG-INFO +1 -1
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/__init__.py +3 -2
- brynq_sdk_bob-1.1.0/brynq_sdk_bob/custom_tables.py +36 -0
- brynq_sdk_bob-1.1.0/brynq_sdk_bob/named_lists.py +37 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/people.py +12 -4
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/bank.py +1 -0
- brynq_sdk_bob-1.1.0/brynq_sdk_bob/schemas/custom_tables.py +10 -0
- brynq_sdk_bob-1.1.0/brynq_sdk_bob/schemas/named_lists.py +13 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/people.py +9 -9
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/PKG-INFO +1 -1
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/SOURCES.txt +4 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/setup.py +1 -1
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/bank.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/company.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/documents.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/employment.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/payments.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/salaries.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/__init__.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/employment.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/payments.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/salary.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/timeoff.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/schemas/work.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/timeoff.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob/work.py +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/dependency_links.txt +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/not-zip-safe +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/requires.txt +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/brynq_sdk_bob.egg-info/top_level.txt +0 -0
- {brynq_sdk_bob-1.0.0 → brynq_sdk_bob-1.1.0}/setup.cfg +0 -0
|
@@ -8,15 +8,15 @@ from .bank import Bank
|
|
|
8
8
|
from .company import Company
|
|
9
9
|
from .documents import CustomDocuments
|
|
10
10
|
from .employment import Employment
|
|
11
|
+
from .named_lists import NamedLists
|
|
11
12
|
from .payments import Payments
|
|
12
13
|
from .people import People
|
|
13
14
|
from .salaries import Salaries
|
|
14
15
|
from .timeoff import TimeOff
|
|
15
16
|
from .work import Work
|
|
16
17
|
|
|
17
|
-
|
|
18
18
|
class Bob(BrynQ):
|
|
19
|
-
def __init__(self, label: Union[str, List], test_environment: bool = True, debug: bool = False):
|
|
19
|
+
def __init__(self, label: Union[str, List], test_environment: bool = True, debug: bool = False, target_system: str = None):
|
|
20
20
|
super().__init__()
|
|
21
21
|
self.headers = self._get_request_headers(label=label)
|
|
22
22
|
if test_environment:
|
|
@@ -34,6 +34,7 @@ class Bob(BrynQ):
|
|
|
34
34
|
self.time_off = TimeOff(self)
|
|
35
35
|
self.documents = CustomDocuments(self)
|
|
36
36
|
self.companies = Company(self)
|
|
37
|
+
self.named_lists = NamedLists(self)
|
|
37
38
|
|
|
38
39
|
def _get_request_headers(self, label):
|
|
39
40
|
credentials = self.get_system_credential(system='bob', label=label)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
import pandas as pd
|
|
3
|
+
from brynq_sdk_functions import Functions
|
|
4
|
+
from .schemas.custom_tables import CustomTableSchema
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class CustomTables:
|
|
8
|
+
def __init__(self, bob):
|
|
9
|
+
self.bob = bob
|
|
10
|
+
|
|
11
|
+
def get(self, employee_id: str, custom_table_id: str) -> (pd.DataFrame, pd.DataFrame):
|
|
12
|
+
"""
|
|
13
|
+
Get custom table data for an employee
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
employee_id: The employee ID
|
|
17
|
+
custom_table_id: The custom table ID
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
A tuple of (valid_data, invalid_data) as pandas DataFrames
|
|
21
|
+
"""
|
|
22
|
+
resp = self.bob.session.get(url=f"{self.bob.base_url}people/custom-tables/{employee_id}/{custom_table_id}")
|
|
23
|
+
resp.raise_for_status()
|
|
24
|
+
data = resp.json()
|
|
25
|
+
|
|
26
|
+
# Normalize the nested JSON response
|
|
27
|
+
df = pd.json_normalize(
|
|
28
|
+
data,
|
|
29
|
+
record_path=['values']
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
df['employee_id'] = employee_id
|
|
33
|
+
df = self.bob.rename_camel_columns_to_snake_case(df)
|
|
34
|
+
valid_data, invalid_data = Functions.validate_data(df=df, schema=CustomTableSchema, debug=True)
|
|
35
|
+
|
|
36
|
+
return valid_data, invalid_data
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from datetime import datetime
|
|
2
|
+
import pandas as pd
|
|
3
|
+
from brynq_sdk_functions import Functions
|
|
4
|
+
from .schemas.named_lists import NamedListSchema
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class NamedLists:
|
|
8
|
+
def __init__(self, bob):
|
|
9
|
+
self.bob = bob
|
|
10
|
+
|
|
11
|
+
def get(self) -> (pd.DataFrame, pd.DataFrame):
|
|
12
|
+
"""
|
|
13
|
+
Get custom table data for an employee
|
|
14
|
+
|
|
15
|
+
Args:
|
|
16
|
+
list_name: The list name
|
|
17
|
+
|
|
18
|
+
Returns:
|
|
19
|
+
A tuple of (valid_data, invalid_data) as pandas DataFrames
|
|
20
|
+
"""
|
|
21
|
+
url = f"{self.bob.base_url}company/named-lists/"
|
|
22
|
+
resp = self.bob.session.get(url=url)
|
|
23
|
+
resp.raise_for_status()
|
|
24
|
+
data = resp.json()
|
|
25
|
+
|
|
26
|
+
df = pd.DataFrame([
|
|
27
|
+
{**item, "type": key}
|
|
28
|
+
for key, group in data.items()
|
|
29
|
+
for item in group["values"]
|
|
30
|
+
])
|
|
31
|
+
|
|
32
|
+
# Normalize the nested JSON response
|
|
33
|
+
# df = pd.DataFrame(data.get('values'))
|
|
34
|
+
df = self.bob.rename_camel_columns_to_snake_case(df)
|
|
35
|
+
valid_data, invalid_data = Functions.validate_data(df=df, schema=NamedListSchema, debug=True)
|
|
36
|
+
|
|
37
|
+
return valid_data, invalid_data
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import pandas as pd
|
|
2
2
|
from brynq_sdk_functions import Functions
|
|
3
|
-
|
|
4
3
|
from .bank import Bank
|
|
5
4
|
from .employment import Employment
|
|
6
5
|
from .salaries import Salaries
|
|
7
6
|
from .schemas.people import PeopleSchema
|
|
8
7
|
from .work import Work
|
|
8
|
+
from .custom_tables import CustomTables
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class People:
|
|
@@ -15,6 +15,7 @@ class People:
|
|
|
15
15
|
self.employment = Employment(bob)
|
|
16
16
|
self.bank = Bank(bob)
|
|
17
17
|
self.work = Work(bob)
|
|
18
|
+
self.custom_tables = CustomTables(bob)
|
|
18
19
|
|
|
19
20
|
def get(self) -> pd.DataFrame:
|
|
20
21
|
resp = self.bob.session.get(url=f"{self.bob.base_url}profiles")
|
|
@@ -27,15 +28,22 @@ class People:
|
|
|
27
28
|
"address.line2",
|
|
28
29
|
"address.activeEffectiveDate",
|
|
29
30
|
"address.country",
|
|
30
|
-
"home.legalGender",
|
|
31
|
+
# "home.legalGender",
|
|
31
32
|
"home.spouse.firstName",
|
|
32
33
|
"home.spouse.surname",
|
|
33
|
-
"home.spouse.birthDate",
|
|
34
|
+
# "home.spouse.birthDate",
|
|
34
35
|
"home.spouse.gender",
|
|
35
36
|
"internal.terminationReason",
|
|
36
37
|
"internal.terminationDate",
|
|
37
38
|
"internal.terminationType",
|
|
38
|
-
"employee.lastDayOfWork"
|
|
39
|
+
"employee.lastDayOfWork",
|
|
40
|
+
# housenumber addition
|
|
41
|
+
"address.customColumns.column_1740046184782",
|
|
42
|
+
# contract end date (bob only fills this when you get a new contract normally)
|
|
43
|
+
"payroll.employment.customColumns.column_1680013460318",
|
|
44
|
+
# iban
|
|
45
|
+
"financial.iban"
|
|
46
|
+
# ploegentoeslag
|
|
39
47
|
]
|
|
40
48
|
resp_additional_fields = self.bob.session.post(url=f"{self.bob.base_url}people/search",
|
|
41
49
|
json={
|
|
@@ -5,6 +5,7 @@ import pandas as pd
|
|
|
5
5
|
|
|
6
6
|
class BankSchema(pa.DataFrameModel):
|
|
7
7
|
id: Series[pd.Int64Dtype] = pa.Field(coerce=True)
|
|
8
|
+
employee_id: Series[pd.Int64Dtype] = pa.Field(coerce=True)
|
|
8
9
|
amount: Series[pd.Int64Dtype] = pa.Field(coerce=True)
|
|
9
10
|
allocation: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
10
11
|
branch_address: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import pandera as pa
|
|
2
|
+
from pandera.typing import Series
|
|
3
|
+
import pandas as pd
|
|
4
|
+
|
|
5
|
+
class CustomTableSchema(pa.DataFrameModel):
|
|
6
|
+
id: Series[pd.Int64Dtype] = pa.Field(coerce=True)
|
|
7
|
+
employee_id: Series[pd.Int64Dtype] = pa.Field(coerce=True)
|
|
8
|
+
|
|
9
|
+
class Config:
|
|
10
|
+
coerce = True
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import pandera as pa
|
|
2
|
+
from pandera.typing import Series
|
|
3
|
+
|
|
4
|
+
class NamedListSchema(pa.DataFrameModel):
|
|
5
|
+
id: Series[str] = pa.Field(coerce=True)
|
|
6
|
+
value: Series[str] = pa.Field(coerce=True)
|
|
7
|
+
name: Series[str] = pa.Field(coerce=True)
|
|
8
|
+
archived: Series[bool] = pa.Field(coerce=True)
|
|
9
|
+
# children: Series[list] = pa.Field(coerce=True)
|
|
10
|
+
type: Series[str] = pa.Field(coerce=True)
|
|
11
|
+
|
|
12
|
+
class Config:
|
|
13
|
+
coerce = True
|
|
@@ -24,10 +24,10 @@ class PeopleSchema(pa.DataFrameModel):
|
|
|
24
24
|
personal_pronouns: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
25
25
|
personal_honorific: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
26
26
|
personal_nationality: Series[object] = pa.Field(coerce=True, check_name=check_list)
|
|
27
|
-
employee_payroll_manager: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
28
|
-
employee_hrbp: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
29
|
-
employee_it_admin: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
30
|
-
employee_buddy: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
27
|
+
# employee_payroll_manager: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
28
|
+
# employee_hrbp: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
29
|
+
# employee_it_admin: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
30
|
+
# employee_buddy: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
31
31
|
employee_veteran_status: Series[object] = pa.Field(coerce=True, check_name=check_list)
|
|
32
32
|
employee_disability_status: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
33
33
|
work_start_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
@@ -58,12 +58,12 @@ class PeopleSchema(pa.DataFrameModel):
|
|
|
58
58
|
work_original_start_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
59
59
|
work_active_effective_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
60
60
|
work_direct_reports: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True)
|
|
61
|
-
work_work_change_type: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
61
|
+
# work_work_change_type: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
62
62
|
work_second_level_manager: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True)
|
|
63
63
|
work_days_of_previous_service: Series[pd.Int64Dtype] = pa.Field(coerce=True, nullable=True)
|
|
64
64
|
work_years_of_service: Series[Float] = pa.Field(coerce=True, nullable=True)
|
|
65
65
|
about_food_preferences: Series[object] = pa.Field(coerce=True, check_name=check_list)
|
|
66
|
-
about_social_data_linkedin: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
66
|
+
# about_social_data_linkedin: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
67
67
|
about_social_data_twitter: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
68
68
|
about_social_data_facebook: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
69
69
|
about_superpowers: Series[object] = pa.Field(coerce=True, check_name=check_list)
|
|
@@ -74,12 +74,12 @@ class PeopleSchema(pa.DataFrameModel):
|
|
|
74
74
|
address_post_code: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
75
75
|
address_line1: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
76
76
|
address_line2: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
77
|
-
address_country: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
77
|
+
# address_country: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
78
78
|
address_active_effective_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
79
|
-
home_legal_gender: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
79
|
+
# home_legal_gender: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
80
80
|
home_spouse_first_name: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
81
81
|
home_spouse_surname: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
82
|
-
home_spouse_birth_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
82
|
+
# home_spouse_birth_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
83
83
|
home_spouse_gender: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
84
84
|
internal_termination_reason: Series[String] = pa.Field(coerce=True, nullable=True)
|
|
85
85
|
internal_termination_date: Series[DateTime] = pa.Field(coerce=True, nullable=True)
|
|
@@ -2,8 +2,10 @@ setup.py
|
|
|
2
2
|
brynq_sdk_bob/__init__.py
|
|
3
3
|
brynq_sdk_bob/bank.py
|
|
4
4
|
brynq_sdk_bob/company.py
|
|
5
|
+
brynq_sdk_bob/custom_tables.py
|
|
5
6
|
brynq_sdk_bob/documents.py
|
|
6
7
|
brynq_sdk_bob/employment.py
|
|
8
|
+
brynq_sdk_bob/named_lists.py
|
|
7
9
|
brynq_sdk_bob/payments.py
|
|
8
10
|
brynq_sdk_bob/people.py
|
|
9
11
|
brynq_sdk_bob/salaries.py
|
|
@@ -17,7 +19,9 @@ brynq_sdk_bob.egg-info/requires.txt
|
|
|
17
19
|
brynq_sdk_bob.egg-info/top_level.txt
|
|
18
20
|
brynq_sdk_bob/schemas/__init__.py
|
|
19
21
|
brynq_sdk_bob/schemas/bank.py
|
|
22
|
+
brynq_sdk_bob/schemas/custom_tables.py
|
|
20
23
|
brynq_sdk_bob/schemas/employment.py
|
|
24
|
+
brynq_sdk_bob/schemas/named_lists.py
|
|
21
25
|
brynq_sdk_bob/schemas/payments.py
|
|
22
26
|
brynq_sdk_bob/schemas/people.py
|
|
23
27
|
brynq_sdk_bob/schemas/salary.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|