brynq-sdk-bob 2.7.0__tar.gz → 2.8.1__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-2.7.0 → brynq_sdk_bob-2.8.1}/PKG-INFO +1 -1
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/people.py +14 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/reports.py +8 -8
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/PKG-INFO +1 -1
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/setup.py +1 -1
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/__init__.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/bank.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/company.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/custom_tables.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/documents.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/employment.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/named_lists.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/payments.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/payroll_history.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/salaries.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/__init__.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/bank.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/custom_tables.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/employment.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/named_lists.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/payments.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/payroll_history.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/people.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/salary.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/timeoff.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/schemas/work.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/timeoff.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob/work.py +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/SOURCES.txt +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/dependency_links.txt +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/not-zip-safe +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/requires.txt +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/brynq_sdk_bob.egg-info/top_level.txt +0 -0
- {brynq_sdk_bob-2.7.0 → brynq_sdk_bob-2.8.1}/setup.cfg +0 -0
|
@@ -51,6 +51,17 @@ class People:
|
|
|
51
51
|
# Normalize separators in incoming data: convert '/' to '.' to match schema aliases
|
|
52
52
|
df.columns = df.columns.str.replace('/', '.', regex=False)
|
|
53
53
|
|
|
54
|
+
# format custom columns in the same way as they were in the schema/request body. (e.g. '.table.custom.123123123.value' -> 'table.custom.123123123')
|
|
55
|
+
custom_cols = [col for col in df.columns if "custom" in str(col)]
|
|
56
|
+
prefix = r'\.'
|
|
57
|
+
suffix = r'\.value'
|
|
58
|
+
df = df.rename(
|
|
59
|
+
columns={
|
|
60
|
+
col: col.removeprefix(prefix).removesuffix(suffix)
|
|
61
|
+
for col in custom_cols
|
|
62
|
+
} )
|
|
63
|
+
|
|
64
|
+
|
|
54
65
|
# A lot of fields from Bob are returned with only ID's. Those fields should be mapped to names. Therefore, we need to get the mapping from the named-lists endpoint.
|
|
55
66
|
resp_named_lists = self.bob.session.get(url=f"{self.bob.base_url}company/named-lists", timeout=self.bob.timeout, headers=self.bob.headers)
|
|
56
67
|
named_lists = resp_named_lists.json()
|
|
@@ -69,7 +80,10 @@ class People:
|
|
|
69
80
|
|
|
70
81
|
|
|
71
82
|
if schema_custom_fields is not None:
|
|
83
|
+
|
|
72
84
|
valid_people, invalid_people_custom = Functions.validate_data(df=df, schema=schema_custom_fields, debug=True)
|
|
85
|
+
|
|
86
|
+
|
|
73
87
|
else:
|
|
74
88
|
valid_people = df
|
|
75
89
|
invalid_people_custom = pd.DataFrame()
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
from datetime import datetime
|
|
2
2
|
from io import BytesIO
|
|
3
|
-
from typing import Optional
|
|
3
|
+
from typing import Optional, TYPE_CHECKING
|
|
4
4
|
|
|
5
5
|
import pandas as pd
|
|
6
6
|
from brynq_sdk_functions import Functions
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from brynq_sdk_bob import Bob
|
|
7
9
|
|
|
8
10
|
|
|
9
11
|
class Reports:
|
|
10
12
|
def __init__(self, bob):
|
|
11
|
-
self.bob = bob
|
|
13
|
+
self.bob: Bob = bob
|
|
12
14
|
|
|
13
15
|
def get(self) -> pd.DataFrame:
|
|
14
16
|
resp = self.bob.session.get(url=f"{self.bob.base_url}company/reports", timeout=self.bob.timeout)
|
|
@@ -23,16 +25,14 @@ class Reports:
|
|
|
23
25
|
|
|
24
26
|
return df
|
|
25
27
|
|
|
26
|
-
def download(self, report_id:
|
|
28
|
+
def download(self, report_id: int | str = None) -> bytes:
|
|
27
29
|
if report_id:
|
|
28
|
-
url = f"{self.bob.base_url}company/reports/{report_id}"
|
|
29
|
-
elif report_name:
|
|
30
|
-
url = f"{self.bob.base_url}company/reports/download/{report_name}"
|
|
30
|
+
url = f"{self.bob.base_url}company/reports/{report_id}/download"
|
|
31
31
|
else:
|
|
32
32
|
raise ValueError("Either report_id or report_name must be provided")
|
|
33
33
|
|
|
34
|
-
resp = self.bob.session.get(url=url, timeout=self.bob.timeout)
|
|
34
|
+
resp = self.bob.session.get(url=url, timeout=self.bob.timeout, params={"format": "csv"})
|
|
35
35
|
resp.raise_for_status()
|
|
36
|
-
data = resp.
|
|
36
|
+
data = resp.content
|
|
37
37
|
|
|
38
38
|
return data
|
|
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
|
|
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
|