brynq-sdk-nmbrs 2.2.0__tar.gz → 2.2.2__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 (55) hide show
  1. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/PKG-INFO +1 -1
  2. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/__init__.py +26 -20
  3. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/absence.py +4 -11
  4. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/companies.py +1 -4
  5. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/costcenter.py +4 -2
  6. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/salary_tables.py +3 -12
  7. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/__init__.py +1 -1
  8. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/costcenter.py +2 -2
  9. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/social_insurance.py +1 -4
  10. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/wage_tax.py +2 -8
  11. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/PKG-INFO +1 -1
  12. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/setup.py +1 -1
  13. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/address.py +0 -0
  14. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/bank.py +0 -0
  15. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/children.py +0 -0
  16. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/contract.py +0 -0
  17. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/costunit.py +0 -0
  18. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/days.py +0 -0
  19. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/debtors.py +0 -0
  20. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/department.py +0 -0
  21. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/document.py +0 -0
  22. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/employees.py +0 -0
  23. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/employment.py +0 -0
  24. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/function.py +0 -0
  25. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/hours.py +0 -0
  26. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/leave.py +0 -0
  27. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/manager.py +0 -0
  28. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/salaries.py +0 -0
  29. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schedules.py +0 -0
  30. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/absence.py +0 -0
  31. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/address.py +0 -0
  32. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/bank.py +0 -0
  33. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/contracts.py +0 -0
  34. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/costunit.py +0 -0
  35. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/days.py +0 -0
  36. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/debtor.py +0 -0
  37. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/department.py +0 -0
  38. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/employees.py +0 -0
  39. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/employment.py +0 -0
  40. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/function.py +0 -0
  41. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/hours.py +0 -0
  42. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/leave.py +0 -0
  43. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/manager.py +0 -0
  44. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/salary.py +0 -0
  45. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/schedules.py +0 -0
  46. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/social_insurance.py +0 -0
  47. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/wage_tax.py +0 -0
  48. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/schemas/wagecomponents.py +0 -0
  49. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs/wagecomponents.py +0 -0
  50. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/SOURCES.txt +0 -0
  51. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/dependency_links.txt +0 -0
  52. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/not-zip-safe +0 -0
  53. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/requires.txt +0 -0
  54. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/brynq_sdk_nmbrs.egg-info/top_level.txt +0 -0
  55. {brynq_sdk_nmbrs-2.2.0 → brynq_sdk_nmbrs-2.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: brynq_sdk_nmbrs
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: Nmbrs wrapper from BrynQ
5
5
  Home-page: UNKNOWN
6
6
  Author: BrynQ
@@ -67,6 +67,16 @@ class Nmbrs(BrynQ):
67
67
  'https://api.nmbrs.nl/soap/v3/EmployeeService.asmx?wsdl',
68
68
  settings=self.soap_settings
69
69
  )
70
+ self.soap_auth_header = self._get_soap_auth_header()
71
+ # Following methods can only be used if the SOAP authentication header is set (optional, this is not always in scope for all integrations)
72
+ if self.soap_auth_header is not None:
73
+ self.soap_company_ids = self.companies.get_soap_ids()
74
+ self.salary_tables = SalaryTables(self)
75
+ self.salary_scales = SalaryScales(self)
76
+ self.salary_steps = SalarySteps(self)
77
+ self.wage_tax = WageTax(self)
78
+ self.absence = Absence(self)
79
+ self.children = Children(self)
70
80
 
71
81
  self.address = Address(self)
72
82
  self.bank = Bank(self)
@@ -78,7 +88,6 @@ class Nmbrs(BrynQ):
78
88
  debtors, _ = self.debtor.get()
79
89
  self.debtor_ids = debtors['debtor_id'].to_list()
80
90
  self.company_ids = self.companies.get()['companyId'].to_list()
81
- self.soap_company_ids = self.companies.get_soap_ids()
82
91
  self.employees = Employees(self)
83
92
  self.employment = Employment(self)
84
93
  self.function = EmployeeFunction(self)
@@ -92,12 +101,6 @@ class Nmbrs(BrynQ):
92
101
  self.schedule = Schedule(self)
93
102
  self.fixed_wagecomponents = EmployeeFixedWageComponents(self)
94
103
  self.variable_wagecomponents = EmployeeVariableWageComponents(self)
95
- self.children = Children(self)
96
- self.salary_tables = SalaryTables(self)
97
- self.salary_scales = SalaryScales(self)
98
- self.salary_steps = SalarySteps(self)
99
- self.wage_tax = WageTax(self)
100
- self.absence = Absence(self)
101
104
  self.current_period = self.companies.get_current_period()
102
105
 
103
106
  def _get_request_headers(self):
@@ -118,20 +121,23 @@ class Nmbrs(BrynQ):
118
121
  Returns:
119
122
  AuthHeaderWithDomainType: The authentication header for SOAP requests
120
123
  """
121
- initial_credentials = self.get_system_credential(system='nmbrs', label='bob')
122
- config = initial_credentials.get("config", {})
123
-
124
- # Get the AuthHeaderWithDomain type from the WSDL
125
- AuthHeaderWithDomainType = self.soap_client_companies.get_element('ns0:AuthHeaderWithDomain')
126
-
127
- # Create the auth header using credentials from config
128
- auth_header = AuthHeaderWithDomainType(
129
- Username=config.get("soap_api_username"),
130
- Token=config.get("soap_api_token"),
131
- Domain=config.get("soap_api_domain")
132
- )
124
+ initial_credentials = self.interfaces.credentials.get(system='nmbrs', system_type=self.system_type)
125
+ config = initial_credentials.get("custom_data", {})
126
+
127
+ if 'soap_api_token' not in config.keys():
128
+ return None
129
+ else:
130
+ # Get the AuthHeaderWithDomain type from the WSDL
131
+ AuthHeaderWithDomainType = self.soap_client_companies.get_element('ns0:AuthHeaderWithDomain')
132
+
133
+ # Create the auth header using credentials from config
134
+ auth_header = AuthHeaderWithDomainType(
135
+ Username=config.get("soap_api_username"),
136
+ Token=config.get("soap_api_token"),
137
+ Domain=config.get("soap_api_domain")
138
+ )
133
139
 
134
- return auth_header
140
+ return auth_header
135
141
 
136
142
  def get_paginated_result(self, request: requests.Request) -> List:
137
143
  has_next_page = True
@@ -40,7 +40,7 @@ class Absence:
40
40
 
41
41
  def _get(self, company_id: int, employee_id: int = None) -> pd.DataFrame:
42
42
  """
43
- Get salary tables for a specific company, period and year.
43
+ Get all absences for a specific company, period and year.
44
44
 
45
45
  Args:
46
46
  company_id (int): The ID of the company
@@ -51,20 +51,16 @@ class Absence:
51
51
  pd.DataFrame: DataFrame containing the salary tables
52
52
  """
53
53
  try:
54
-
55
- # Get the auth header using the centralized method
56
- auth_header = self.nmbrs._get_soap_auth_header()
57
-
58
54
  if employee_id is None:
59
55
  response = self.soap_client_employees.service.Absence_GetAll_AllEmployeesByCompany(
60
56
  CompanyId=company_id,
61
- _soapheaders=[auth_header]
57
+ _soapheaders=[self.nmbrs.soap_auth_header]
62
58
  )
63
59
  else:
64
60
  # Make SOAP request with the proper header structure
65
61
  response = self.soap_client_employees.service.Absence_GetList(
66
62
  EmployeeId=employee_id,
67
- _soapheaders=[auth_header]
63
+ _soapheaders=[self.nmbrs.soap_auth_header]
68
64
  )
69
65
 
70
66
  # Convert response to DataFrame
@@ -95,9 +91,6 @@ class Absence:
95
91
  if self.nmbrs.mock_mode:
96
92
  return absence_model
97
93
 
98
- # Get the auth header using the centralized method
99
- auth_header = self.nmbrs._get_soap_auth_header()
100
-
101
94
  # Use the model's built-in SOAP conversion method
102
95
  absence_settings = absence_model.to_soap_settings(self.nmbrs.soap_client_employees)
103
96
 
@@ -106,7 +99,7 @@ class Absence:
106
99
  EmployeeId=absence_model.employee_id,
107
100
  Dossier=absence_model.new_dossier,
108
101
  Absence=absence_settings,
109
- _soapheaders=[auth_header]
102
+ _soapheaders=[self.nmbrs.soap_auth_header]
110
103
  )
111
104
 
112
105
  # Convert response to DataFrame
@@ -51,12 +51,9 @@ class Companies:
51
51
  pd.DataFrame: DataFrame containing all companies
52
52
  """
53
53
  try:
54
- # Get the auth header using the centralized method
55
- auth_header = self.nmbrs._get_soap_auth_header()
56
-
57
54
  # Make SOAP request with the proper header structure
58
55
  response = self.soap_client_companies.service.List_GetAll(
59
- _soapheaders=[auth_header]
56
+ _soapheaders=[self.nmbrs.soap_auth_header]
60
57
  )
61
58
 
62
59
  # Convert response to DataFrame
@@ -2,17 +2,19 @@ import pandas as pd
2
2
  import requests
3
3
  from dateutil.utils import today
4
4
  from requests import HTTPError
5
- from typing import Dict, Any
5
+ from typing import Dict, Any, TYPE_CHECKING
6
6
 
7
7
  from brynq_sdk_functions import Functions
8
8
  from .schemas.costcenter import CostcenterGet, EmployeeCostcenterGet
9
9
  from .schemas.costcenter import EmployeeCostcenterUpdate, EmployeeCostcenterDelete
10
10
  from .schemas.costcenter import CostcenterCreate, CostcenterUpdate, CostcenterDelete
11
+ if TYPE_CHECKING:
12
+ from brynq_sdk_nmbrs import Nmbrs
11
13
 
12
14
 
13
15
  class EmployeeCostcenter:
14
16
  def __init__(self, nmbrs):
15
- self.nmbrs = nmbrs
17
+ self.nmbrs: Nmbrs = nmbrs
16
18
 
17
19
  def get(self,
18
20
  created_from: str = None,
@@ -50,15 +50,12 @@ class SalaryTables:
50
50
  pd.DataFrame: DataFrame containing the salary tables
51
51
  """
52
52
  try:
53
- # Get the auth header using the centralized method
54
- auth_header = self.nmbrs._get_soap_auth_header()
55
-
56
53
  # Make SOAP request with the proper header structure
57
54
  response = self.soap_client_companies.service.SalaryTable2_Get(
58
55
  CompanyId=company_id,
59
56
  Period=period,
60
57
  Year=year,
61
- _soapheaders=[auth_header]
58
+ _soapheaders=[self.nmbrs.soap_auth_header]
62
59
  )
63
60
 
64
61
  # Convert response to DataFrame
@@ -123,15 +120,12 @@ class SalaryScales:
123
120
  pd.DataFrame: DataFrame containing the salary scales
124
121
  """
125
122
  try:
126
- # Get the auth header using the centralized method
127
- auth_header = self.nmbrs._get_soap_auth_header()
128
-
129
123
  # Make SOAP request with the proper header structure
130
124
  response = self.soap_client_companies.service.SalaryTable2_GetScales(
131
125
  CompanyId=company_id,
132
126
  Period=period,
133
127
  Year=year,
134
- _soapheaders=[auth_header]
128
+ _soapheaders=[self.nmbrs.soap_auth_header]
135
129
  )
136
130
 
137
131
  # Convert response to DataFrame
@@ -208,9 +202,6 @@ class SalarySteps:
208
202
  pd.DataFrame: DataFrame containing the salary steps
209
203
  """
210
204
  try:
211
- # Get the auth header using the centralized method
212
- auth_header = self.nmbrs._get_soap_auth_header()
213
-
214
205
  # Make SOAP request with the proper header structure
215
206
  response = self.soap_client_companies.service.SalaryTable2_GetSteps(
216
207
  CompanyId=company_id,
@@ -223,7 +214,7 @@ class SalarySteps:
223
214
  'ScalePercentageMax': scale.get('scale_percentage_max', 0),
224
215
  'ScalePercentageMin': scale.get('scale_percentage_min', 0)
225
216
  },
226
- _soapheaders=[auth_header]
217
+ _soapheaders=[self.nmbrs.soap_auth_header]
227
218
  )
228
219
 
229
220
  # Convert response to DataFrame
@@ -12,7 +12,7 @@ from .function import FunctionGet, FunctionUpdate
12
12
  from .hours import FixedHoursGet, FixedHoursCreate, FixedHoursUpdate, HoursDelete, VariableHoursGet, VariableHoursCreate, VariableHoursUpdate
13
13
  from .salary import SalaryGet, SalaryCreate
14
14
  from .manager import ManagerGet, ManagerBasicGet, EmployeeManagerGet, ManagerHistoricBasicGet, ManagerCreate, ManagerUpdate, ManagerDelete, UpdateEmployeeManager
15
- from .salary import SalaryGet, SalaryCreate, SalaryUpdate, SalaryDelete
15
+ from .salary import SalaryGet, SalaryCreate
16
16
  from .wagecomponents import FixedWageComponentGet, FixedWageComponentCreate, FixedWageComponentUpdate, WageComponentDelete, VariableWageComponentGet, VariableWageComponentCreate, VariableWageComponentUpdate
17
17
  from .wage_tax import WageTaxGet, WageTaxUpdate
18
18
 
@@ -22,8 +22,8 @@ class EmployeeCostcenterGet(BrynQPanderaDataFrameModel):
22
22
  cost_units_description: Series[String] = pa.Field(coerce=True, description="Cost Unit Description", alias="costUnits.description")
23
23
  percentage: Series[Float] = pa.Field(coerce=True, description="Percentage", alias="percentage")
24
24
  default: Series[Bool] = pa.Field(coerce=True, description="Default", alias="default")
25
- period_year: Series[int] = pa.Field(coerce=True, description="Year", alias="period.year")
26
- period_period: Series[int] = pa.Field(coerce=True, description="Period", alias="period.period")
25
+ period_year: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Year", alias="period.year")
26
+ period_period: Series[pd.Int64Dtype] = pa.Field(coerce=True, description="Period", alias="period.period")
27
27
  created_at: Series[DateTime] = pa.Field(coerce=True, description="Created At", alias="createdAt")
28
28
 
29
29
  class _Annotation:
@@ -20,9 +20,6 @@ class SocialInsurance:
20
20
  if self.nmbrs.mock_mode:
21
21
  return social_insurance_model
22
22
 
23
- # Get the auth header using the centralized method
24
- auth_header = self.nmbrs._get_soap_auth_header()
25
-
26
23
  # Use the model's built-in SOAP conversion method
27
24
  social_insurance_settings = social_insurance_model.to_soap_settings(self.nmbrs.soap_client_employees)
28
25
 
@@ -30,7 +27,7 @@ class SocialInsurance:
30
27
  response = self.nmbrs.soap_client_employees.service.SVW_UpdateCurrent(
31
28
  EmployeeId=social_insurance_model.employee_id,
32
29
  SVWSettings=social_insurance_settings,
33
- _soapheaders=[auth_header]
30
+ _soapheaders=[self.nmbrs.soap_auth_header]
34
31
  )
35
32
 
36
33
  # Convert response to DataFrame
@@ -51,14 +51,11 @@ class WageTax:
51
51
  pd.DataFrame: DataFrame containing the salary tables
52
52
  """
53
53
  try:
54
- # Get the auth header using the centralized method
55
- auth_header = self.nmbrs._get_soap_auth_header()
56
-
57
54
  # Make SOAP request with the proper header structure
58
55
  response = self.soap_client_companies.service.WageTax_GetList(
59
56
  CompanyId=company_id,
60
57
  intYear=year,
61
- _soapheaders=[auth_header]
58
+ _soapheaders=[self.nmbrs.soap_auth_header]
62
59
  )
63
60
 
64
61
  # Convert response to DataFrame
@@ -89,9 +86,6 @@ class WageTax:
89
86
  if self.nmbrs.mock_mode:
90
87
  return wage_tax_model
91
88
 
92
- # Get the auth header using the centralized method
93
- auth_header = self.nmbrs._get_soap_auth_header()
94
-
95
89
  # Use the model's built-in SOAP conversion method
96
90
  wage_tax_settings = wage_tax_model.to_soap_settings(self.nmbrs.soap_client_employees)
97
91
 
@@ -99,7 +93,7 @@ class WageTax:
99
93
  response = self.nmbrs.soap_client_employees.service.WageTax_UpdateCurrent(
100
94
  EmployeeId=wage_tax_model.employee_id,
101
95
  LoonheffingSettings=wage_tax_settings,
102
- _soapheaders=[auth_header]
96
+ _soapheaders=[self.nmbrs.soap_auth_header]
103
97
  )
104
98
 
105
99
  # Convert response to DataFrame
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: brynq-sdk-nmbrs
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: Nmbrs 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_nmbrs',
5
- version='2.2.0',
5
+ version='2.2.2',
6
6
  description='Nmbrs wrapper from BrynQ',
7
7
  long_description='Nmbrs wrapper from BrynQ',
8
8
  author='BrynQ',