clappia-api-tools 2.0.4__tar.gz → 2.0.5__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 (67) hide show
  1. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/PKG-INFO +1 -1
  2. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/base_client.py +3 -1
  3. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/submission_client.py +49 -0
  4. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/submission_requests.py +5 -0
  5. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/utils/api_utils.py +5 -2
  6. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools.egg-info/PKG-INFO +1 -1
  7. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/pyproject.toml +1 -1
  8. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/LICENSE +0 -0
  9. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/README.md +0 -0
  10. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/__init__.py +0 -0
  11. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/__init__.py +0 -0
  12. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/analytics_client.py +0 -0
  13. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/app_definition_client.py +0 -0
  14. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/workflow_definition_client.py +0 -0
  15. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/client/workplace_client.py +0 -0
  16. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/enums/__init__.py +0 -0
  17. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/enums/enums.py +0 -0
  18. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/__init__.py +0 -0
  19. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/json_serialized.py +0 -0
  20. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/permissions.py +0 -0
  21. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/__init__.py +0 -0
  22. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/analytics/__init__.py +0 -0
  23. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/analytics/base.py +0 -0
  24. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/analytics/chart/__init__.py +0 -0
  25. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/analytics/chart/request.py +0 -0
  26. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/analytics/model.py +0 -0
  27. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/__init__.py +0 -0
  28. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/app_metadata/__init__.py +0 -0
  29. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/app_metadata/request.py +0 -0
  30. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/base.py +0 -0
  31. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/definition/__init__.py +0 -0
  32. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/definition/request.py +0 -0
  33. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/field/__init__.py +0 -0
  34. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/field/request.py +0 -0
  35. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/model.py +0 -0
  36. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/page/__init__.py +0 -0
  37. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/page/request.py +0 -0
  38. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/section/__init__.py +0 -0
  39. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/app_definition/section/request.py +0 -0
  40. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/workflow_definition/__init__.py +0 -0
  41. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/workflow_definition/base.py +0 -0
  42. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/workflow_definition/step/__init__.py +0 -0
  43. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/workflow_definition/step/request.py +0 -0
  44. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/request/workplace_requests.py +0 -0
  45. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/__init__.py +0 -0
  46. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/analytics_responses.py +0 -0
  47. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/app_definition_responses.py +0 -0
  48. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/base_response.py +0 -0
  49. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/submission_responses.py +0 -0
  50. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/workflow_responses.py +0 -0
  51. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/response/workplace_responses.py +0 -0
  52. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/submission.py +0 -0
  53. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/models/workplace_user.py +0 -0
  54. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/integration/__init__.py +0 -0
  55. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/integration/definition/test_tools_definition.py +0 -0
  56. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/integration/submission/test_tools_submission.py +0 -0
  57. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/integration/workplace/test_tools_workplace.py +0 -0
  58. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/unit/client/test_analytics_client.py +0 -0
  59. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/tests/unit/client/test_client.py +0 -0
  60. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/utils/__init__.py +0 -0
  61. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/utils/logging_utils.py +0 -0
  62. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools/utils/utils.py +0 -0
  63. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools.egg-info/SOURCES.txt +0 -0
  64. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools.egg-info/dependency_links.txt +0 -0
  65. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools.egg-info/requires.txt +0 -0
  66. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/clappia_api_tools.egg-info/top_level.txt +0 -0
  67. {clappia_api_tools-2.0.4 → clappia_api_tools-2.0.5}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clappia-api-tools
3
- Version: 2.0.4
3
+ Version: 2.0.5
4
4
  Summary: Python client for Clappia API integration
5
5
  Author-email: Rishabh Verma <rishabh.v@clappia.com>
6
6
  License: MIT
@@ -12,6 +12,7 @@ class BaseClappiaClient:
12
12
  def __init__(
13
13
  self,
14
14
  api_key: Optional[str] = None,
15
+ auth_token: Optional[str] = None,
15
16
  base_url: Optional[str] = None,
16
17
  timeout: int = 30,
17
18
  ):
@@ -19,7 +20,8 @@ class BaseClappiaClient:
19
20
 
20
21
  Args:
21
22
  api_key: Clappia API key.
23
+ auth_token: Clappia Auth token.
22
24
  base_url: API base URL.
23
25
  timeout: Request timeout in seconds.
24
26
  """
25
- self.api_utils = ClappiaAPIUtils(api_key, base_url, timeout)
27
+ self.api_utils = ClappiaAPIUtils(api_key, auth_token, base_url, timeout)
@@ -34,6 +34,26 @@ class SubmissionClient(BaseClappiaClient):
34
34
  getting submissions, getting submissions aggregation, creating submissions,
35
35
  editing submissions, updating submission status, updating submission owners.
36
36
  """
37
+ def __init__(
38
+ self,
39
+ api_key: Optional[str] = None,
40
+ auth_token: Optional[str] = None,
41
+ # TODO: Remove workplace_id once ClappiaExternalService/v4 is live in all stages
42
+ workplace_id: Optional[str] = None,
43
+ base_url: Optional[str] = None,
44
+ timeout: int = 30,
45
+ ):
46
+ """Initialize Clappia Submission client.
47
+
48
+ Args:
49
+ api_key: Clappia API key.
50
+ workplace_id: Clappia Workplace ID.
51
+ base_url: API base URL.
52
+ timeout: Request timeout in seconds.
53
+ """
54
+ super().__init__(api_key, auth_token, base_url, timeout)
55
+ self.workplace_id = workplace_id
56
+ print(f"SubmissionClient initialized with workplace_id: {workplace_id}, auth_token: {auth_token}, base_url: {base_url}, timeout: {timeout}")
37
57
 
38
58
  def get_submissions(
39
59
  self,
@@ -43,6 +63,7 @@ class SubmissionClient(BaseClappiaClient):
43
63
  forward: bool = True,
44
64
  filters: Optional[SubmissionFilters] = None,
45
65
  last_submission_id: Optional[str] = None,
66
+ requesting_user_email_address: Optional[str] = None,
46
67
  ) -> SubmissionsResponse:
47
68
  try:
48
69
  request = GetSubmissionsRequest(
@@ -52,6 +73,7 @@ class SubmissionClient(BaseClappiaClient):
52
73
  filters=filters,
53
74
  last_submission_id=last_submission_id,
54
75
  fields=fields,
76
+ requesting_user_email_address=requesting_user_email_address,
55
77
  )
56
78
  except Exception as e:
57
79
  return SubmissionsResponse(success=False, message=str(e), app_id=app_id)
@@ -61,9 +83,11 @@ class SubmissionClient(BaseClappiaClient):
61
83
  return SubmissionsResponse(success=False, message=env_error, app_id=app_id)
62
84
 
63
85
  payload = {
86
+ "workplaceId": self.workplace_id,
64
87
  "appId": request.app_id,
65
88
  "pageSize": request.page_size,
66
89
  "forward": request.forward,
90
+ "requestingUserEmailAddress": request.requesting_user_email_address,
67
91
  }
68
92
 
69
93
  if request.filters:
@@ -104,6 +128,7 @@ class SubmissionClient(BaseClappiaClient):
104
128
  forward: bool = True,
105
129
  page_size: int = 1000,
106
130
  filters: Optional[SubmissionFilters] = None,
131
+ requesting_user_email_address: Optional[str] = None,
107
132
  ) -> SubmissionsAggregationResponse:
108
133
  try:
109
134
  request = GetSubmissionsAggregationRequest(
@@ -114,6 +139,7 @@ class SubmissionClient(BaseClappiaClient):
114
139
  forward=forward,
115
140
  page_size=page_size,
116
141
  filters=filters,
142
+ requesting_user_email_address=requesting_user_email_address,
117
143
  )
118
144
  except Exception as e:
119
145
  return SubmissionsAggregationResponse(
@@ -134,10 +160,12 @@ class SubmissionClient(BaseClappiaClient):
134
160
  )
135
161
 
136
162
  payload = {
163
+ "workplaceId": self.workplace_id,
137
164
  "appId": request.app_id,
138
165
  "forward": request.forward,
139
166
  "pageSize": request.page_size,
140
167
  "xAxisLabels": request.x_axis_labels or [],
168
+ "requestingUserEmailAddress": request.requesting_user_email_address,
141
169
  }
142
170
 
143
171
  if request.dimensions:
@@ -176,11 +204,13 @@ class SubmissionClient(BaseClappiaClient):
176
204
  self,
177
205
  app_id: str,
178
206
  data: Dict[str, Any],
207
+ requesting_user_email_address: Optional[str] = None,
179
208
  ) -> SubmissionResponse:
180
209
  try:
181
210
  request = CreateSubmissionRequest(
182
211
  app_id=app_id,
183
212
  data=data,
213
+ requesting_user_email_address=requesting_user_email_address,
184
214
  )
185
215
  except Exception as e:
186
216
  return SubmissionResponse(
@@ -208,8 +238,10 @@ class SubmissionClient(BaseClappiaClient):
208
238
  )
209
239
 
210
240
  payload = {
241
+ "workplaceId": self.workplace_id,
211
242
  "appId": request.app_id,
212
243
  "data": request.data,
244
+ "requestingUserEmailAddress": request.requesting_user_email_address,
213
245
  }
214
246
 
215
247
  logger.info(f"Creating submission for app_id: {app_id} with data: {data}")
@@ -243,12 +275,14 @@ class SubmissionClient(BaseClappiaClient):
243
275
  app_id: str,
244
276
  submission_id: str,
245
277
  data: Dict[str, Any],
278
+ requesting_user_email_address: Optional[str] = None,
246
279
  ) -> SubmissionResponse:
247
280
  try:
248
281
  request = EditSubmissionRequest(
249
282
  app_id=app_id,
250
283
  submission_id=submission_id,
251
284
  data=data,
285
+ requesting_user_email_address=requesting_user_email_address,
252
286
  )
253
287
  except Exception as e:
254
288
  return SubmissionResponse(
@@ -279,9 +313,11 @@ class SubmissionClient(BaseClappiaClient):
279
313
  )
280
314
 
281
315
  payload = {
316
+ "workplaceId": self.workplace_id,
282
317
  "appId": request.app_id,
283
318
  "submissionId": request.submission_id,
284
319
  "data": request.data,
320
+ "requestingUserEmailAddress": request.requesting_user_email_address,
285
321
  }
286
322
 
287
323
  logger.info(
@@ -317,6 +353,7 @@ class SubmissionClient(BaseClappiaClient):
317
353
  submission_id: str,
318
354
  status_name: str,
319
355
  comments: Optional[str] = None,
356
+ requesting_user_email_address: Optional[str] = None,
320
357
  ) -> SubmissionResponse:
321
358
  try:
322
359
  request = UpdateSubmissionStatusRequest(
@@ -324,6 +361,7 @@ class SubmissionClient(BaseClappiaClient):
324
361
  submission_id=submission_id,
325
362
  status_name=status_name,
326
363
  comments=comments,
364
+ requesting_user_email_address=requesting_user_email_address,
327
365
  )
328
366
  except Exception as e:
329
367
  return SubmissionResponse(
@@ -350,9 +388,11 @@ class SubmissionClient(BaseClappiaClient):
350
388
  }
351
389
 
352
390
  payload = {
391
+ "workplaceId": self.workplace_id,
353
392
  "appId": request.app_id,
354
393
  "submissionId": request.submission_id,
355
394
  "status": status,
395
+ "requestingUserEmailAddress": request.requesting_user_email_address,
356
396
  }
357
397
 
358
398
  logger.info(f"Updating status for submission {submission_id} to {status_name}")
@@ -386,6 +426,7 @@ class SubmissionClient(BaseClappiaClient):
386
426
  submission_id: str,
387
427
  email_ids: List[str],
388
428
  phone_numbers: Optional[List[str]] = None,
429
+ requesting_user_email_address: Optional[str] = None,
389
430
  ) -> SubmissionResponse:
390
431
  try:
391
432
  request = UpdateSubmissionOwnersRequest(
@@ -393,6 +434,7 @@ class SubmissionClient(BaseClappiaClient):
393
434
  submission_id=submission_id,
394
435
  email_ids=email_ids,
395
436
  phone_numbers=phone_numbers,
437
+ requesting_user_email_address=requesting_user_email_address,
396
438
  )
397
439
  except Exception as e:
398
440
  return SubmissionResponse(
@@ -414,9 +456,11 @@ class SubmissionClient(BaseClappiaClient):
414
456
  )
415
457
 
416
458
  payload = {
459
+ "workplaceId": self.workplace_id,
417
460
  "appId": request.app_id,
418
461
  "submissionId": request.submission_id,
419
462
  "emailIds": [str(email) for email in request.email_ids],
463
+ "requestingUserEmailAddress": request.requesting_user_email_address,
420
464
  }
421
465
 
422
466
  logger.info(f"Updating owners for submission {submission_id}")
@@ -472,6 +516,7 @@ class SubmissionClient(BaseClappiaClient):
472
516
  )
473
517
 
474
518
  payload = {
519
+ "workplaceId": self.workplace_id,
475
520
  "appId": request.app_id,
476
521
  "requestingUserEmailAddress": str(request.requesting_user_email_address),
477
522
  "format": request.format,
@@ -518,11 +563,13 @@ class SubmissionClient(BaseClappiaClient):
518
563
  self,
519
564
  app_id: str,
520
565
  filters: Optional[SubmissionFilters] = None,
566
+ requesting_user_email_address: Optional[str] = None,
521
567
  ) -> SubmissionsCountResponse:
522
568
  try:
523
569
  request = GetSubmissionsCountRequest(
524
570
  app_id=app_id,
525
571
  filters=filters,
572
+ requesting_user_email_address=requesting_user_email_address,
526
573
  )
527
574
  except Exception as e:
528
575
  return SubmissionsCountResponse(
@@ -536,7 +583,9 @@ class SubmissionClient(BaseClappiaClient):
536
583
  )
537
584
 
538
585
  payload = {
586
+ "workplaceId": self.workplace_id,
539
587
  "appId": request.app_id,
588
+ "requestingUserEmailAddress": request.requesting_user_email_address,
540
589
  }
541
590
 
542
591
  if request.filters:
@@ -11,6 +11,11 @@ from ..submission import (
11
11
 
12
12
  class BaseSubmissionRequest(BaseModel):
13
13
  app_id: str = Field(description="App Id")
14
+ # TODO: Remove this field once ClappiaExternalService/v4 is live in all stages
15
+ requesting_user_email_address: Optional[EmailStr] = Field(
16
+ None, description="Email of requesting user"
17
+ )
18
+
14
19
 
15
20
  @field_validator("app_id")
16
21
  def validate_app_id(cls, v: str) -> str:
@@ -13,6 +13,7 @@ class ClappiaAPIUtils:
13
13
  def __init__(
14
14
  self,
15
15
  api_key: str,
16
+ auth_token: str,
16
17
  base_url: str,
17
18
  timeout: int = 30,
18
19
  ):
@@ -21,10 +22,12 @@ class ClappiaAPIUtils:
21
22
 
22
23
  Args:
23
24
  api_key: Clappia API key
25
+ auth_token: Clappia Auth token
24
26
  base_url: API base URL
25
27
  timeout: Request timeout in seconds
26
28
  """
27
29
  self.api_key = api_key
30
+ self.auth_token = auth_token
28
31
  self.base_url = base_url
29
32
  self.timeout = timeout
30
33
 
@@ -46,7 +49,7 @@ class ClappiaAPIUtils:
46
49
  """Get standard headers for API requests"""
47
50
  return {
48
51
  "x-api-key": self.api_key,
49
- "Authorization": self.api_key,
52
+ "Authorization": self.auth_token,
50
53
  "Content-Type": "application/json"
51
54
  }
52
55
 
@@ -110,7 +113,7 @@ class ClappiaAPIUtils:
110
113
  headers.update(extra_headers)
111
114
 
112
115
  try:
113
- logger.info(f"Making {method} request to {url}")
116
+ logger.info(f"Making {method} request to {url}, headers: {headers}, data: {data}, params: {params}")
114
117
  if data:
115
118
  logger.debug(f"Request data: {json.dumps(data, indent=2)}")
116
119
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clappia-api-tools
3
- Version: 2.0.4
3
+ Version: 2.0.5
4
4
  Summary: Python client for Clappia API integration
5
5
  Author-email: Rishabh Verma <rishabh.v@clappia.com>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "clappia-api-tools"
7
- version = "2.0.4"
7
+ version = "2.0.5"
8
8
  description = "Python client for Clappia API integration"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"