MambuPy 2.0.0b30__tar.gz → 2.0.0b32__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 (116) hide show
  1. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/__init__.py +1 -1
  2. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/connector/mambuconnector.py +11 -7
  3. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/connector/rest.py +118 -94
  4. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/entities.py +104 -106
  5. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/interfaces.py +3 -1
  6. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambubranch.py +1 -2
  7. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuclient.py +16 -14
  8. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambucustomfield.py +20 -17
  9. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambugroup.py +16 -14
  10. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuloan.py +48 -28
  11. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambuproduct.py +13 -20
  12. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambustruct.py +102 -104
  13. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambutask.py +19 -17
  14. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambutransaction.py +11 -13
  15. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/api/mambuuser.py +24 -26
  16. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/vos.py +4 -0
  17. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/mambuconfig.py +1 -0
  18. {MambuPy-2.0.0b30/mambupy → MambuPy-2.0.0b32/MambuPy}/mambuutil.py +1 -0
  19. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/PKG-INFO +1 -1
  20. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/PKG-INFO +1 -1
  21. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/__init__.py +1 -1
  22. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/connector/mambuconnector.py +11 -7
  23. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/connector/rest.py +118 -94
  24. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/entities.py +104 -106
  25. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/interfaces.py +3 -1
  26. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambubranch.py +1 -2
  27. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuclient.py +16 -14
  28. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambucustomfield.py +20 -17
  29. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambugroup.py +16 -14
  30. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuloan.py +48 -28
  31. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambuproduct.py +13 -20
  32. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambustruct.py +102 -104
  33. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambutask.py +19 -17
  34. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambutransaction.py +11 -13
  35. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/api/mambuuser.py +24 -26
  36. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/vos.py +4 -0
  37. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/mambuconfig.py +1 -0
  38. {MambuPy-2.0.0b30/MambuPy → MambuPy-2.0.0b32/mambupy}/mambuutil.py +1 -0
  39. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/LICENSE +0 -0
  40. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/__init__.py +0 -0
  41. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/classes.py +0 -0
  42. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/connector/__init__.py +0 -0
  43. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mambucentre.py +0 -0
  44. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/api/mamburole.py +0 -0
  45. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/mambugeturl.py +0 -0
  46. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/__init__.py +0 -0
  47. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_activities.py +0 -0
  48. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_addresses.py +0 -0
  49. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_branches.py +0 -0
  50. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_centres.py +0 -0
  51. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_clients.py +0 -0
  52. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_customfields.py +0 -0
  53. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_dummies.py +0 -0
  54. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_groups.py +0 -0
  55. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_loans.py +0 -0
  56. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_mambu.py +0 -0
  57. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_orm.py +0 -0
  58. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_tasks.py +0 -0
  59. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/orm/schema_users.py +0 -0
  60. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/__init__.py +0 -0
  61. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambubranch.py +0 -0
  62. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambucentre.py +0 -0
  63. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuclient.py +0 -0
  64. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambugroup.py +0 -0
  65. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuloan.py +0 -0
  66. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuproduct.py +0 -0
  67. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mamburepayment.py +0 -0
  68. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambustruct.py +0 -0
  69. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambutask.py +0 -0
  70. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambutransaction.py +0 -0
  71. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/rest1to2/mambuuser.py +0 -0
  72. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/__init__.py +0 -0
  73. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/logging_config.py +0 -0
  74. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy/utils/userdeactivate.py +0 -0
  75. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/SOURCES.txt +0 -0
  76. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/dependency_links.txt +0 -0
  77. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/requires.txt +0 -0
  78. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/MambuPy.egg-info/top_level.txt +0 -0
  79. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/README.md +0 -0
  80. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/__init__.py +0 -0
  81. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/classes.py +0 -0
  82. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/connector/__init__.py +0 -0
  83. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mambucentre.py +0 -0
  84. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/api/mamburole.py +0 -0
  85. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/mambugeturl.py +0 -0
  86. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/__init__.py +0 -0
  87. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_activities.py +0 -0
  88. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_addresses.py +0 -0
  89. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_branches.py +0 -0
  90. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_centres.py +0 -0
  91. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_clients.py +0 -0
  92. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_customfields.py +0 -0
  93. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_dummies.py +0 -0
  94. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_groups.py +0 -0
  95. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_loans.py +0 -0
  96. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_mambu.py +0 -0
  97. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_orm.py +0 -0
  98. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_tasks.py +0 -0
  99. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/orm/schema_users.py +0 -0
  100. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/__init__.py +0 -0
  101. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambubranch.py +0 -0
  102. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambucentre.py +0 -0
  103. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuclient.py +0 -0
  104. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambugroup.py +0 -0
  105. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuloan.py +0 -0
  106. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuproduct.py +0 -0
  107. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mamburepayment.py +0 -0
  108. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambustruct.py +0 -0
  109. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambutask.py +0 -0
  110. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambutransaction.py +0 -0
  111. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/rest1to2/mambuuser.py +0 -0
  112. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/__init__.py +0 -0
  113. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/logging_config.py +0 -0
  114. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/mambupy/utils/userdeactivate.py +0 -0
  115. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/setup.cfg +0 -0
  116. {MambuPy-2.0.0b30 → MambuPy-2.0.0b32}/setup.py +0 -0
@@ -35,5 +35,5 @@ TODOS
35
35
  to achive TDD when implementing features or correcting bugs.
36
36
  """
37
37
 
38
- __version__ = "2.0.0b30"
38
+ __version__ = "2.0.0b32"
39
39
  """The version of this module."""
@@ -6,6 +6,7 @@ Currently supports REST.
6
6
  :nosignatures:
7
7
  :toctree: _autosummary
8
8
  """
9
+
9
10
  from abc import ABC, abstractmethod
10
11
 
11
12
 
@@ -91,8 +92,12 @@ class MambuConnectorReader(ABC):
91
92
 
92
93
  @abstractmethod
93
94
  def mambu_get_documents_metadata(
94
- self, entid, owner_type,
95
- offset=None, limit=None, paginationDetails="OFF",
95
+ self,
96
+ entid,
97
+ owner_type,
98
+ offset=None,
99
+ limit=None,
100
+ paginationDetails="OFF",
96
101
  ):
97
102
  """Gets metadata for all the documents attached to an entity
98
103
 
@@ -219,9 +224,8 @@ class MambuConnectorWriter(ABC):
219
224
 
220
225
  @abstractmethod
221
226
  def mambu_make_disbursement(
222
- self,
223
- loan_id, firstRepaymentDate, notes, valueDate,
224
- allowed_fields, **kwargs):
227
+ self, loan_id, firstRepaymentDate, notes, valueDate, allowed_fields, **kwargs
228
+ ):
225
229
  """Make a disbursement transacton on a loan account.
226
230
 
227
231
  Args:
@@ -236,8 +240,8 @@ class MambuConnectorWriter(ABC):
236
240
 
237
241
  @abstractmethod
238
242
  def mambu_make_repayment(
239
- self, loan_id, amount, notes, valueDate,
240
- allowed_fields, **kwargs):
243
+ self, loan_id, amount, notes, valueDate, allowed_fields, **kwargs
244
+ ):
241
245
  """Make a repayment transaction on a loan account.
242
246
 
243
247
  Args:
@@ -6,6 +6,7 @@ Currently supports REST.
6
6
  :nosignatures:
7
7
  :toctree: _autosummary
8
8
  """
9
+
9
10
  import base64
10
11
  import copy
11
12
  import json
@@ -21,11 +22,21 @@ from requests.adapters import HTTPAdapter
21
22
  from requests.packages.urllib3.util.retry import Retry
22
23
 
23
24
  from .mambuconnector import MambuConnector, MambuConnectorReader, MambuConnectorWriter
24
- from MambuPy.mambuutil import (ALLOWED_UPLOAD_MIMETYPES, DETAILSLEVEL,
25
- MAX_UPLOAD_SIZE, PAGINATIONDETAILS, SEARCH_OPERATORS,
26
- OUT_OF_BOUNDS_PAGINATION_LIMIT_VALUE,
27
- UPLOAD_FILENAME_INVALID_CHARS, MambuCommError,
28
- MambuError, MambuPyError, apipwd, apiurl, apiuser)
25
+ from MambuPy.mambuutil import (
26
+ ALLOWED_UPLOAD_MIMETYPES,
27
+ DETAILSLEVEL,
28
+ MAX_UPLOAD_SIZE,
29
+ PAGINATIONDETAILS,
30
+ SEARCH_OPERATORS,
31
+ OUT_OF_BOUNDS_PAGINATION_LIMIT_VALUE,
32
+ UPLOAD_FILENAME_INVALID_CHARS,
33
+ MambuCommError,
34
+ MambuError,
35
+ MambuPyError,
36
+ apipwd,
37
+ apiurl,
38
+ apiuser,
39
+ )
29
40
 
30
41
 
31
42
  logger = logging.getLogger(__name__)
@@ -104,7 +115,8 @@ class MambuConnectorREST(MambuConnector, MambuConnectorReader, MambuConnectorWri
104
115
  "PUT",
105
116
  "DELETE",
106
117
  "TRACE",
107
- "PATCH"]
118
+ "PATCH",
119
+ ],
108
120
  )
109
121
  adapter = HTTPAdapter(max_retries=retry_strategy)
110
122
  http = requests.Session()
@@ -116,17 +128,23 @@ class MambuConnectorREST(MambuConnector, MambuConnectorReader, MambuConnectorWri
116
128
  logger.debug(
117
129
  "about to make %s request: \
118
130
  url %s, params %s, data %s, headers %s",
119
- method, url, params, data,
120
- [(k, v) for k, v in headers.items() if k != 'Authorization'])
121
- resp = http.request(
122
- method, url, params=params, data=data, headers=headers
131
+ method,
132
+ url,
133
+ params,
134
+ data,
135
+ [(k, v) for k, v in headers.items() if k != "Authorization"],
123
136
  )
137
+ resp = http.request(method, url, params=params, data=data, headers=headers)
124
138
  resp.raise_for_status()
125
139
  except requests.exceptions.HTTPError as httperr:
126
140
  logger.error(
127
141
  "%s on %s request: params %s, data %s, headers %s",
128
- str(httperr), method, params, data,
129
- [(k, v) for k, v in headers.items()])
142
+ str(httperr),
143
+ method,
144
+ params,
145
+ data,
146
+ [(k, v) for k, v in headers.items()],
147
+ )
130
148
  if hasattr(resp, "content"): # pragma: no cover
131
149
  logger.error("HTTPError, resp content: %s", resp.content)
132
150
  try:
@@ -141,32 +159,49 @@ url %s, params %s, data %s, headers %s",
141
159
  },
142
160
  ]
143
161
  }
162
+ try:
163
+ error = content["errors"][0]
164
+ except KeyError:
165
+ error = content
144
166
  raise MambuError(
145
167
  "{} ({}) - {}{}".format(
146
- content["errors"][0]["errorCode"],
168
+ error["errorCode"] if "errorCode" in error else error["returnCode"],
147
169
  resp.status_code,
148
- content["errors"][0]["errorReason"],
149
- " (" + content["errors"][0]["errorSource"] + ")"
150
- if "errorSource" in content["errors"][0]
151
- else "",
170
+ (
171
+ error["errorReason"]
172
+ if "errorReason" in error
173
+ else error["returnStatus"]
174
+ ),
175
+ " (" + error["errorSource"] + ")" if "errorSource" in error else "",
152
176
  )
153
177
  )
154
178
  except requests.exceptions.RetryError as rerr: # pragma: no cover
155
179
  logger.error(
156
180
  "%s MambuCommError on %s request: url %s, params %s, data %s, headers %s",
157
- str(rerr), method, url, params, data,
158
- [(k, v) for k, v in headers.items()])
181
+ str(rerr),
182
+ method,
183
+ url,
184
+ params,
185
+ data,
186
+ [(k, v) for k, v in headers.items()],
187
+ )
159
188
  raise MambuCommError(
160
- "COMM Error: I cannot communicate with Mambu: {}".format(rerr))
189
+ "COMM Error: I cannot communicate with Mambu: {}".format(rerr)
190
+ )
161
191
  except Exception as ex:
162
192
  logger.exception(
163
193
  "%s Exception (%s) on %s request: url %s, params %s, data %s, headers %s",
164
- str(ex), resp, method, url, params, data,
165
- [(k, v) for k, v in headers.items()])
194
+ str(ex),
195
+ resp,
196
+ method,
197
+ url,
198
+ params,
199
+ data,
200
+ [(k, v) for k, v in headers.items()],
201
+ )
166
202
  if hasattr(resp, "content"): # pragma: no cover
167
203
  logger.error("Exception, resp content: %s", resp.content)
168
- raise MambuCommError(
169
- "Unknown comm error with Mambu: {}".format(ex))
204
+ raise MambuCommError("Unknown comm error with Mambu: {}".format(ex))
170
205
 
171
206
  logger.debug("response %s to %s:\n%s", resp, method, resp.content)
172
207
 
@@ -226,7 +261,8 @@ url %s, params %s, data %s, headers %s",
226
261
  params["limit"] = limit if limit != 0 else None
227
262
 
228
263
  resp = self.__request(
229
- method, url, params=copy.copy(params), data=copy.copy(data))
264
+ method, url, params=copy.copy(params), data=copy.copy(data)
265
+ )
230
266
 
231
267
  jsonresp = list(json.loads(resp.decode()))
232
268
  if len(jsonresp) < limit:
@@ -291,17 +327,15 @@ url %s, params %s, data %s, headers %s",
291
327
  MambuPyError (obj): when invalid filterCriteria
292
328
  """
293
329
  validated_filterCriteria = []
294
- if (
295
- not isinstance(filterCriteria, list) or
296
- any([criteria for criteria in filterCriteria
297
- if not isinstance(criteria, dict)])
330
+ if not isinstance(filterCriteria, list) or any(
331
+ [criteria for criteria in filterCriteria if not isinstance(criteria, dict)]
298
332
  ):
299
333
  raise MambuPyError("filterCriteria must be a list of dictionaries")
300
334
  for criteria in filterCriteria:
301
335
  if (
302
- "field" not in criteria or
303
- "operator" not in criteria or
304
- criteria["operator"] not in SEARCH_OPERATORS
336
+ "field" not in criteria
337
+ or "operator" not in criteria
338
+ or criteria["operator"] not in SEARCH_OPERATORS
305
339
  ):
306
340
  raise MambuPyError(
307
341
  "a filterCriteria must have a field and an operator, member of {}".format(
@@ -447,12 +481,10 @@ url %s, params %s, data %s, headers %s",
447
481
  data = {}
448
482
 
449
483
  if filterCriteria is not None:
450
- data["filterCriteria"] = self.__validate_filter_criteria(
451
- filterCriteria)
484
+ data["filterCriteria"] = self.__validate_filter_criteria(filterCriteria)
452
485
 
453
486
  if sortingCriteria is not None:
454
- data["sortingCriteria"] = self.__validate_sorting_criteria(
455
- sortingCriteria)
487
+ data["sortingCriteria"] = self.__validate_sorting_criteria(sortingCriteria)
456
488
 
457
489
  url = "https://{}/api/{}:search".format(self._tenant, prefix)
458
490
 
@@ -565,8 +597,12 @@ url %s, params %s, data %s, headers %s",
565
597
  )
566
598
 
567
599
  def mambu_get_documents_metadata(
568
- self, entid, owner_type,
569
- offset=None, limit=None, paginationDetails="OFF",
600
+ self,
601
+ entid,
602
+ owner_type,
603
+ offset=None,
604
+ limit=None,
605
+ paginationDetails="OFF",
570
606
  ):
571
607
  """Gets metadata for all the documents attached to an entity
572
608
 
@@ -606,8 +642,7 @@ url %s, params %s, data %s, headers %s",
606
642
  Args:
607
643
  loanid (str): the id or encoded key of the loan account
608
644
  """
609
- url = "https://{}/api/{}/{}/schedule".format(
610
- self._tenant, "loans", loanid)
645
+ url = "https://{}/api/{}/{}/schedule".format(self._tenant, "loans", loanid)
611
646
 
612
647
  return self.__request("GET", url)
613
648
 
@@ -618,11 +653,8 @@ url %s, params %s, data %s, headers %s",
618
653
  loanid (str): the id or encoded key of the loan account
619
654
  notes (str): notes to associate to the writeoff operation in Mambu
620
655
  """
621
- url = "https://{}/api/{}/{}:writeOff".format(
622
- self._tenant, "loans", loanid)
623
- data = {
624
- "notes": notes
625
- }
656
+ url = "https://{}/api/{}/{}:writeOff".format(self._tenant, "loans", loanid)
657
+ data = {"notes": notes}
626
658
  return self.__request("POST", url, data=data)
627
659
 
628
660
  def mambu_change_state(self, entid, prefix, action, notes):
@@ -635,10 +667,7 @@ url %s, params %s, data %s, headers %s",
635
667
  notes (str): notes to associate to the change of status
636
668
  """
637
669
  url = "https://{}/api/{}/{}:changeState".format(self._tenant, prefix, entid)
638
- data = {
639
- "action": action,
640
- "notes": notes
641
- }
670
+ data = {"action": action, "notes": notes}
642
671
  return self.__request("POST", url, data=data)
643
672
 
644
673
  def mambu_get_customfield(self, customfieldid):
@@ -647,14 +676,12 @@ url %s, params %s, data %s, headers %s",
647
676
  Args:
648
677
  customfieldid (str): the id or encoded key of the custom field
649
678
  """
650
- url = "https://{}/api/customfields/{}".format(
651
- self._tenant, customfieldid)
679
+ url = "https://{}/api/customfields/{}".format(self._tenant, customfieldid)
652
680
  return self.__request("GET", url)
653
681
 
654
682
  def mambu_get_comments(
655
- self,
656
- owner_id, owner_type,
657
- offset=None, limit=None, paginationDetails="OFF"):
683
+ self, owner_id, owner_type, offset=None, limit=None, paginationDetails="OFF"
684
+ ):
658
685
  """Retrieves the comments of entity with owner_id.
659
686
 
660
687
  Args:
@@ -667,18 +694,18 @@ url %s, params %s, data %s, headers %s",
667
694
  paginationDetails=paginationDetails,
668
695
  )
669
696
  if owner_type not in [
670
- "CLIENT",
671
- "GROUP",
672
- "LOAN_PRODUCT",
673
- "SAVINGS_PRODUCT",
674
- "CENTRE",
675
- "BRANCH",
676
- "USER",
677
- "LOAN_ACCOUNT",
678
- "DEPOSIT_ACCOUNT",
679
- "ID_DOCUMENT",
680
- "LINE_OF_CREDIT",
681
- "GL_JOURNAL_ENTRY"
697
+ "CLIENT",
698
+ "GROUP",
699
+ "LOAN_PRODUCT",
700
+ "SAVINGS_PRODUCT",
701
+ "CENTRE",
702
+ "BRANCH",
703
+ "USER",
704
+ "LOAN_ACCOUNT",
705
+ "DEPOSIT_ACCOUNT",
706
+ "ID_DOCUMENT",
707
+ "LINE_OF_CREDIT",
708
+ "GL_JOURNAL_ENTRY",
682
709
  ]:
683
710
  raise MambuError("Owner {} not allowed".format(owner_type))
684
711
 
@@ -698,32 +725,29 @@ url %s, params %s, data %s, headers %s",
698
725
  text (str): the text of the comment
699
726
  """
700
727
  if owner_type not in [
701
- "CLIENT",
702
- "GROUP",
703
- "LOAN_PRODUCT",
704
- "SAVINGS_PRODUCT",
705
- "CENTRE",
706
- "BRANCH",
707
- "USER",
708
- "LOAN_ACCOUNT",
709
- "DEPOSIT_ACCOUNT",
710
- "ID_DOCUMENT",
711
- "LINE_OF_CREDIT",
712
- "GL_JOURNAL_ENTRY"
728
+ "CLIENT",
729
+ "GROUP",
730
+ "LOAN_PRODUCT",
731
+ "SAVINGS_PRODUCT",
732
+ "CENTRE",
733
+ "BRANCH",
734
+ "USER",
735
+ "LOAN_ACCOUNT",
736
+ "DEPOSIT_ACCOUNT",
737
+ "ID_DOCUMENT",
738
+ "LINE_OF_CREDIT",
739
+ "GL_JOURNAL_ENTRY",
713
740
  ]:
714
741
  raise MambuError("Owner {} not allowed".format(owner_type))
715
- data = {"ownerKey": owner_id,
716
- "ownerType": owner_type,
717
- "text": text}
742
+ data = {"ownerKey": owner_id, "ownerType": owner_type, "text": text}
718
743
 
719
744
  url = "https://{}/api/comments".format(self._tenant)
720
745
 
721
746
  return self.__request("POST", url, data=data)
722
747
 
723
748
  def mambu_make_disbursement(
724
- self,
725
- loan_id, notes, firstRepaymentDate, valueDate,
726
- allowed_fields, **kwargs):
749
+ self, loan_id, notes, firstRepaymentDate, valueDate, allowed_fields, **kwargs
750
+ ):
727
751
  """Make a disbursement transacton on a loan account.
728
752
 
729
753
  Args:
@@ -734,22 +758,24 @@ url %s, params %s, data %s, headers %s",
734
758
  allowed_fields (list): extra fields allowed for the transaction
735
759
  kwargs (dict): key-values of extra fields for the transaction
736
760
  """
737
- data = {"firstRepaymentDate": firstRepaymentDate,
738
- "notes": notes,
739
- "valueDate": valueDate}
761
+ data = {
762
+ "firstRepaymentDate": firstRepaymentDate,
763
+ "notes": notes,
764
+ "valueDate": valueDate,
765
+ }
740
766
  for k, v in kwargs.items():
741
767
  if k in allowed_fields:
742
768
  data[k] = v
743
769
 
744
770
  url = "https://{}/api/loans/{}/disbursement-transactions".format(
745
- self._tenant, loan_id)
771
+ self._tenant, loan_id
772
+ )
746
773
 
747
774
  return self.__request("POST", url, data=data)
748
775
 
749
776
  def mambu_make_repayment(
750
- self,
751
- loan_id, amount, notes, valueDate,
752
- allowed_fields, **kwargs):
777
+ self, loan_id, amount, notes, valueDate, allowed_fields, **kwargs
778
+ ):
753
779
  """Make a repayment transaction on a loan account.
754
780
 
755
781
  Args:
@@ -760,9 +786,7 @@ url %s, params %s, data %s, headers %s",
760
786
  allowed_fields (list): extra fields allowed for the transaction
761
787
  kwargs (dict): key-values of extra fields for the transaction
762
788
  """
763
- data = {"amount": amount,
764
- "notes": notes,
765
- "valueDate": valueDate}
789
+ data = {"amount": amount, "notes": notes, "valueDate": valueDate}
766
790
  for k, v in kwargs.items():
767
791
  if k in allowed_fields:
768
792
  data[k] = v