brynq-sdk-bob 2.6.5__tar.gz → 2.6.7__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.
Files changed (33) hide show
  1. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/PKG-INFO +1 -1
  2. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/people.py +29 -1
  3. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/people.py +2 -1
  4. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/PKG-INFO +1 -1
  5. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/setup.py +1 -1
  6. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/__init__.py +0 -0
  7. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/bank.py +0 -0
  8. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/company.py +0 -0
  9. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/custom_tables.py +0 -0
  10. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/documents.py +0 -0
  11. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/employment.py +0 -0
  12. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/named_lists.py +0 -0
  13. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/payments.py +0 -0
  14. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/payroll_history.py +0 -0
  15. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/salaries.py +0 -0
  16. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/__init__.py +0 -0
  17. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/bank.py +0 -0
  18. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/custom_tables.py +0 -0
  19. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/employment.py +0 -0
  20. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/named_lists.py +0 -0
  21. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/payments.py +0 -0
  22. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/payroll_history.py +0 -0
  23. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/salary.py +0 -0
  24. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/timeoff.py +0 -0
  25. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/schemas/work.py +0 -0
  26. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/timeoff.py +0 -0
  27. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob/work.py +0 -0
  28. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/SOURCES.txt +0 -0
  29. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/dependency_links.txt +0 -0
  30. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/not-zip-safe +0 -0
  31. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/requires.txt +0 -0
  32. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/brynq_sdk_bob.egg-info/top_level.txt +0 -0
  33. {brynq_sdk_bob-2.6.5 → brynq_sdk_bob-2.6.7}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: brynq_sdk_bob
3
- Version: 2.6.5
3
+ Version: 2.6.7
4
4
  Summary: Bob wrapper from BrynQ
5
5
  Home-page: UNKNOWN
6
6
  Author: BrynQ
@@ -1,4 +1,5 @@
1
1
  import pandas as pd
2
+ import re
2
3
  from typing import Optional
3
4
  from brynq_sdk_functions import Functions
4
5
  from brynq_sdk_functions import BrynQPanderaDataFrameModel
@@ -21,6 +22,7 @@ class People:
21
22
  self.schema = PeopleSchema
22
23
 
23
24
 
25
+
24
26
  # Build API fields using column metadata if present (api_field), otherwise use the column (alias) name
25
27
  def __build_api_fields(self, schema_model: BrynQPanderaDataFrameModel) -> list[str]:
26
28
  schema = schema_model.to_schema()
@@ -44,7 +46,7 @@ class People:
44
46
  timeout=self.bob.timeout)
45
47
  resp.raise_for_status()
46
48
  df = pd.json_normalize(resp.json()['employees'])
47
- df = df.loc[:, ~df.columns.str.contains('value')]
49
+
48
50
 
49
51
  # Normalize separators in incoming data: convert '/' to '.' to match schema aliases
50
52
  df.columns = df.columns.str.replace('/', '.', regex=False)
@@ -72,6 +74,32 @@ class People:
72
74
  valid_people = df
73
75
  invalid_people_custom = pd.DataFrame()
74
76
 
77
+
75
78
  valid_people, invalid_people = Functions.validate_data(df=valid_people, schema=PeopleSchema, debug=True)
76
79
 
80
+ # For columns ending with .value.value, use fillna to fill the corresponding base column since that's not done automatically
81
+ def _normalize_key(key: str) -> str:
82
+ # Build mapping from custom schema alias (API path) to the real column name used after validation
83
+ key = key.lstrip('.')
84
+ key = key.replace('/', '.')
85
+ key = key.replace('.', '_')
86
+ key = re.sub(r'(?<!^)([A-Z])', r'_\1', key).lower()
87
+ return key
88
+
89
+ alias_to_real: dict = {}
90
+ if schema_custom_fields is not None:
91
+ alias_map = getattr(schema_custom_fields, "_alias_map", {}) # real_name -> alias
92
+ alias_to_real = {_normalize_key(alias): real for real, alias in alias_map.items()}
93
+
94
+ for col in valid_people.columns:
95
+ if col.endswith('value.value'):
96
+ # Compute the base alias (remove suffix), normalise, and resolve to real column name via custom schema
97
+ base_alias = col[:-12]
98
+ target_key = _normalize_key(base_alias)
99
+ target_col = alias_to_real.get(target_key, target_key)
100
+ if target_col in valid_people.columns:
101
+ valid_people[target_col] = valid_people[target_col].fillna(valid_people[col])
102
+
103
+ # Remove columns that contain '.value' or '_get'
104
+ valid_people = valid_people.loc[:, ~valid_people.columns.str.contains(r'\.value|_get')]
77
105
  return valid_people, pd.concat([invalid_people, invalid_people_custom])
@@ -221,8 +221,9 @@ class PeopleSchema(BrynQPanderaDataFrameModel):
221
221
 
222
222
  # Salary information
223
223
  payroll_salary_monthly_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base salary (monthly_", alias="payroll.salary.monthlyPayment")
224
+ payroll_salary_yearly_get: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly), used for getting nested json", alias="payroll.salary.yearlyPayment")
224
225
  payroll_salary_yearly_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly)", alias="payroll.salary.yearlyPayment.value")
225
- payroll_salary_yearly_payment_currency: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly)", alias="payroll.salary.yearlyPayment.currency")
226
+ payroll_salary_yearly_payment_currency: Optional[Series[str]] = pa.Field(coerce=True, nullable=True, description="Base salary (yearly)", alias="payroll.salary.yearlyPayment.currency")
226
227
  payroll_salary_payment: Optional[Series[Float]] = pa.Field(coerce=True, nullable=True, description="Base Salary", alias="payroll.salary.payment")
227
228
 
228
229
  # Emergency contact
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: brynq-sdk-bob
3
- Version: 2.6.5
3
+ Version: 2.6.7
4
4
  Summary: Bob wrapper from BrynQ
5
5
  Home-page: UNKNOWN
6
6
  Author: BrynQ
@@ -2,7 +2,7 @@ from setuptools import setup, find_namespace_packages
2
2
 
3
3
  setup(
4
4
  name='brynq_sdk_bob',
5
- version='2.6.5',
5
+ version='2.6.7',
6
6
  description='Bob wrapper from BrynQ',
7
7
  long_description='Bob wrapper from BrynQ',
8
8
  author='BrynQ',
File without changes