qena-shared-lib 0.1.2__tar.gz → 0.1.4__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 (43) hide show
  1. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/PKG-INFO +41 -1
  2. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/README.md +40 -0
  3. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/pyproject.toml +1 -1
  4. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_exception_handlers.py +1 -0
  5. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/scheduler.py +3 -5
  6. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/security.py +9 -3
  7. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_security.py +45 -45
  8. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/uv.lock +1 -1
  9. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/.gitignore +0 -0
  10. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/.pre-commit-config.yaml +0 -0
  11. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/requirements.txt +0 -0
  12. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/__init__.py +0 -0
  13. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/application.py +0 -0
  14. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/background.py +0 -0
  15. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/dependencies/__init__.py +0 -0
  16. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/dependencies/http.py +0 -0
  17. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/dependencies/miscellaneous.py +0 -0
  18. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/exception_handlers.py +0 -0
  19. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/exceptions.py +0 -0
  20. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/http.py +0 -0
  21. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/logging.py +0 -0
  22. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/logstash/__init__.py +0 -0
  23. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/logstash/_base.py +0 -0
  24. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/logstash/_http_sender.py +0 -0
  25. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/logstash/_tcp_sender.py +0 -0
  26. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/py.typed +0 -0
  27. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/__init__.py +0 -0
  28. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_base.py +0 -0
  29. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_channel.py +0 -0
  30. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_exceptions.py +0 -0
  31. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_listener.py +0 -0
  32. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_pool.py +0 -0
  33. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_publisher.py +0 -0
  34. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_rpc_client.py +0 -0
  35. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/rabbitmq/_utils.py +0 -0
  36. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/src/qena_shared_lib/utils.py +0 -0
  37. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/conftest.py +0 -0
  38. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_application.py +0 -0
  39. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_background.py +0 -0
  40. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_dependencies.py +0 -0
  41. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_logstash.py +0 -0
  42. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_rabbitmq.py +0 -0
  43. {qena_shared_lib-0.1.2 → qena_shared_lib-0.1.4}/tests/test_scheduler.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qena-shared-lib
3
- Version: 0.1.2
3
+ Version: 0.1.4
4
4
  Summary: A shared tools for other services
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: cronsim~=2.0
@@ -30,6 +30,12 @@ A shared tools for other services. It includes.
30
30
 
31
31
  # Usage
32
32
 
33
+ ## Environment variables
34
+
35
+ - `LOGGER_NAME` root logger name.
36
+ - `UNAUTHORIZED_RESPONSE_CODE` an integer response on an authorized access of resource.
37
+ - `TOKEN_HEADER` to header key for jwt token.
38
+
33
39
  ## Http
34
40
 
35
41
  To create fastapi app.
@@ -273,6 +279,40 @@ async def get_user(
273
279
  return user
274
280
  ```
275
281
 
282
+ ### Flow control
283
+
284
+ ``` py
285
+ @Consumer("UserQueue")
286
+ class UserConsumer(ListenerBase):
287
+
288
+ @consume()
289
+ async def store_user(self, ctx: ListenerContext, user: User):
290
+ ...
291
+
292
+ await ctx.flow_control.request(10)
293
+
294
+ ...
295
+
296
+ ```
297
+
298
+ ### Rpc reply
299
+
300
+ Optionally it is possible to reply to rpc calls, through.
301
+
302
+ ``` py
303
+ @RpcWorker("UserQueue")
304
+ class UserWorker(ListenerBase):
305
+
306
+ @execute()
307
+ async def store_user(self, ctx: ListenerContext, user: User):
308
+ ...
309
+
310
+ await ctx.rpc_reply.reply("Done")
311
+
312
+ ...
313
+ ```
314
+
315
+
276
316
  ## Scheduler
277
317
 
278
318
  ``` py
@@ -13,6 +13,12 @@ A shared tools for other services. It includes.
13
13
 
14
14
  # Usage
15
15
 
16
+ ## Environment variables
17
+
18
+ - `LOGGER_NAME` root logger name.
19
+ - `UNAUTHORIZED_RESPONSE_CODE` an integer response on an authorized access of resource.
20
+ - `TOKEN_HEADER` to header key for jwt token.
21
+
16
22
  ## Http
17
23
 
18
24
  To create fastapi app.
@@ -256,6 +262,40 @@ async def get_user(
256
262
  return user
257
263
  ```
258
264
 
265
+ ### Flow control
266
+
267
+ ``` py
268
+ @Consumer("UserQueue")
269
+ class UserConsumer(ListenerBase):
270
+
271
+ @consume()
272
+ async def store_user(self, ctx: ListenerContext, user: User):
273
+ ...
274
+
275
+ await ctx.flow_control.request(10)
276
+
277
+ ...
278
+
279
+ ```
280
+
281
+ ### Rpc reply
282
+
283
+ Optionally it is possible to reply to rpc calls, through.
284
+
285
+ ``` py
286
+ @RpcWorker("UserQueue")
287
+ class UserWorker(ListenerBase):
288
+
289
+ @execute()
290
+ async def store_user(self, ctx: ListenerContext, user: User):
291
+ ...
292
+
293
+ await ctx.rpc_reply.reply("Done")
294
+
295
+ ...
296
+ ```
297
+
298
+
259
299
  ## Scheduler
260
300
 
261
301
  ``` py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "qena-shared-lib"
3
- version = "0.1.2"
3
+ version = "0.1.4"
4
4
  description = "A shared tools for other services"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -49,6 +49,7 @@ def handle_rabbitmq_exception(
49
49
  "listenerName": context.listener_name,
50
50
  "exception": "RabbitMQException",
51
51
  },
52
+ exception=exception,
52
53
  )
53
54
 
54
55
 
@@ -188,6 +188,7 @@ class ScheduleManager(AsyncEventLoopMixin):
188
188
  self._logstash = logstash
189
189
  self._scheduled_tasks: list[ScheduledTask] = []
190
190
  self._next_run_in = None
191
+ self._scheduler_task = None
191
192
  self._logger = LoggerProvider.default().get_logger("schedule_manager")
192
193
 
193
194
  def include_scheduler(self, scheduler: Scheduler | type[SchedulerBase]):
@@ -227,10 +228,7 @@ class ScheduleManager(AsyncEventLoopMixin):
227
228
  if not self._aquired_lock():
228
229
  return
229
230
 
230
- if (
231
- getattr(self, "_scheduler_task", None) is not None
232
- and not self._scheduler_task.done()
233
- ):
231
+ if self._scheduler_task is not None and not self._scheduler_task.done():
234
232
  raise RuntimeError("scheduler already running")
235
233
 
236
234
  self.use_schedulers()
@@ -256,7 +254,7 @@ class ScheduleManager(AsyncEventLoopMixin):
256
254
  self._scheduled_tasks.extend(scheduler.scheduled_tasks)
257
255
 
258
256
  def stop(self):
259
- if not self._scheduler_task.done():
257
+ if self._scheduler_task is not None and not self._scheduler_task.done():
260
258
  self._scheduler_task.cancel()
261
259
 
262
260
  self.SCHEDULE_MANAGER_STATE.state("stopped")
@@ -26,7 +26,7 @@ __all__ = [
26
26
  ]
27
27
 
28
28
 
29
- MESSAGE = "you are not authorized to access requested resouce"
29
+ MESSAGE = "you are not authorized to access requested resource"
30
30
  RESPONSE_CODE = int(environ.get("UNAUTHORIZED_RESPONSE_CODE") or 0)
31
31
 
32
32
 
@@ -92,9 +92,15 @@ class UserInfo(BaseModel):
92
92
  async def extract_user_info(
93
93
  jwt_adapter: Annotated[JwtAdapter, DependsOn(JwtAdapter)],
94
94
  token: Annotated[
95
- str | None, Header(alias=environ.get("TOKEN_HEADER") or "authorization")
95
+ str | None,
96
+ Header(
97
+ alias=environ.get("TOKEN_HEADER") or "authorization",
98
+ include_in_schema=False,
99
+ ),
100
+ ] = None,
101
+ user_agent: Annotated[
102
+ str | None, Header(alias="user-agent", include_in_schema=False)
96
103
  ] = None,
97
- user_agent: Annotated[str | None, Header(alias="user-agent")] = None,
98
104
  ) -> UserInfo:
99
105
  extra = {"userAgent": user_agent} if user_agent is not None else None
100
106
 
@@ -62,7 +62,7 @@ async def test_endpoint_acl_expired_token():
62
62
  assert res.is_client_error
63
63
  assert res.json() == {
64
64
  "severity": "MEDIUM",
65
- "message": "you are not authorized to access request resouce",
65
+ "message": "you are not authorized to access requested resource",
66
66
  "code": 0,
67
67
  }
68
68
 
@@ -102,7 +102,7 @@ async def test_endpoint_acl_invalid_payload():
102
102
  assert res.is_client_error
103
103
  assert res.json() == {
104
104
  "severity": "MEDIUM",
105
- "message": "you are not authorized to access request resouce",
105
+ "message": "you are not authorized to access requested resource",
106
106
  "code": 0,
107
107
  }
108
108
 
@@ -153,7 +153,7 @@ async def test_endpoint_acl_any_user_type():
153
153
  assert res.status_code == 401
154
154
  assert res.json() == {
155
155
  "severity": "MEDIUM",
156
- "message": "you are not authorized to access request resouce",
156
+ "message": "you are not authorized to access requested resource",
157
157
  "code": 0,
158
158
  }
159
159
 
@@ -199,7 +199,7 @@ async def test_endpoint_acl_specific_user_type():
199
199
  assert res.status_code == 401
200
200
  assert res.json() == {
201
201
  "severity": "MEDIUM",
202
- "message": "you are not authorized to access request resouce",
202
+ "message": "you are not authorized to access requested resource",
203
203
  "code": 0,
204
204
  }
205
205
 
@@ -208,7 +208,7 @@ async def test_endpoint_acl_specific_user_type():
208
208
  assert res.status_code == 401
209
209
  assert res.json() == {
210
210
  "severity": "MEDIUM",
211
- "message": "you are not authorized to access request resouce",
211
+ "message": "you are not authorized to access requested resource",
212
212
  "code": 0,
213
213
  }
214
214
 
@@ -276,7 +276,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
276
276
  assert res.status_code == 401
277
277
  assert res.json() == {
278
278
  "severity": "MEDIUM",
279
- "message": "you are not authorized to access request resouce",
279
+ "message": "you are not authorized to access requested resource",
280
280
  "code": 0,
281
281
  }
282
282
 
@@ -289,7 +289,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
289
289
  assert res.status_code == 401
290
290
  assert res.json() == {
291
291
  "severity": "MEDIUM",
292
- "message": "you are not authorized to access request resouce",
292
+ "message": "you are not authorized to access requested resource",
293
293
  "code": 0,
294
294
  }
295
295
 
@@ -302,7 +302,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
302
302
  assert res.status_code == 401
303
303
  assert res.json() == {
304
304
  "severity": "MEDIUM",
305
- "message": "you are not authorized to access request resouce",
305
+ "message": "you are not authorized to access requested resource",
306
306
  "code": 0,
307
307
  }
308
308
 
@@ -346,7 +346,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
346
346
  assert res.status_code == 401
347
347
  assert res.json() == {
348
348
  "severity": "MEDIUM",
349
- "message": "you are not authorized to access request resouce",
349
+ "message": "you are not authorized to access requested resource",
350
350
  "code": 0,
351
351
  }
352
352
 
@@ -359,7 +359,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
359
359
  assert res.status_code == 401
360
360
  assert res.json() == {
361
361
  "severity": "MEDIUM",
362
- "message": "you are not authorized to access request resouce",
362
+ "message": "you are not authorized to access requested resource",
363
363
  "code": 0,
364
364
  }
365
365
 
@@ -376,7 +376,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
376
376
  assert res.status_code == 401
377
377
  assert res.json() == {
378
378
  "severity": "MEDIUM",
379
- "message": "you are not authorized to access request resouce",
379
+ "message": "you are not authorized to access requested resource",
380
380
  "code": 0,
381
381
  }
382
382
 
@@ -385,7 +385,7 @@ async def test_endpoint_acl_any_user_type_some_permissions():
385
385
  assert res.status_code == 401
386
386
  assert res.json() == {
387
387
  "severity": "MEDIUM",
388
- "message": "you are not authorized to access request resouce",
388
+ "message": "you are not authorized to access requested resource",
389
389
  "code": 0,
390
390
  }
391
391
 
@@ -456,7 +456,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
456
456
  assert res.status_code == 401
457
457
  assert res.json() == {
458
458
  "severity": "MEDIUM",
459
- "message": "you are not authorized to access request resouce",
459
+ "message": "you are not authorized to access requested resource",
460
460
  "code": 0,
461
461
  }
462
462
 
@@ -469,7 +469,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
469
469
  assert res.status_code == 401
470
470
  assert res.json() == {
471
471
  "severity": "MEDIUM",
472
- "message": "you are not authorized to access request resouce",
472
+ "message": "you are not authorized to access requested resource",
473
473
  "code": 0,
474
474
  }
475
475
 
@@ -482,7 +482,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
482
482
  assert res.status_code == 401
483
483
  assert res.json() == {
484
484
  "severity": "MEDIUM",
485
- "message": "you are not authorized to access request resouce",
485
+ "message": "you are not authorized to access requested resource",
486
486
  "code": 0,
487
487
  }
488
488
 
@@ -495,7 +495,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
495
495
  assert res.status_code == 401
496
496
  assert res.json() == {
497
497
  "severity": "MEDIUM",
498
- "message": "you are not authorized to access request resouce",
498
+ "message": "you are not authorized to access requested resource",
499
499
  "code": 0,
500
500
  }
501
501
 
@@ -508,7 +508,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
508
508
  assert res.status_code == 401
509
509
  assert res.json() == {
510
510
  "severity": "MEDIUM",
511
- "message": "you are not authorized to access request resouce",
511
+ "message": "you are not authorized to access requested resource",
512
512
  "code": 0,
513
513
  }
514
514
 
@@ -525,7 +525,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
525
525
  assert res.status_code == 401
526
526
  assert res.json() == {
527
527
  "severity": "MEDIUM",
528
- "message": "you are not authorized to access request resouce",
528
+ "message": "you are not authorized to access requested resource",
529
529
  "code": 0,
530
530
  }
531
531
 
@@ -538,7 +538,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
538
538
  assert res.status_code == 401
539
539
  assert res.json() == {
540
540
  "severity": "MEDIUM",
541
- "message": "you are not authorized to access request resouce",
541
+ "message": "you are not authorized to access requested resource",
542
542
  "code": 0,
543
543
  }
544
544
 
@@ -551,7 +551,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
551
551
  assert res.status_code == 401
552
552
  assert res.json() == {
553
553
  "severity": "MEDIUM",
554
- "message": "you are not authorized to access request resouce",
554
+ "message": "you are not authorized to access requested resource",
555
555
  "code": 0,
556
556
  }
557
557
 
@@ -568,7 +568,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
568
568
  assert res.status_code == 401
569
569
  assert res.json() == {
570
570
  "severity": "MEDIUM",
571
- "message": "you are not authorized to access request resouce",
571
+ "message": "you are not authorized to access requested resource",
572
572
  "code": 0,
573
573
  }
574
574
 
@@ -577,7 +577,7 @@ async def test_endpoint_acl_specific_user_type_some_permissions():
577
577
  assert res.status_code == 401
578
578
  assert res.json() == {
579
579
  "severity": "MEDIUM",
580
- "message": "you are not authorized to access request resouce",
580
+ "message": "you are not authorized to access requested resource",
581
581
  "code": 0,
582
582
  }
583
583
 
@@ -620,7 +620,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
620
620
  assert res.status_code == 401
621
621
  assert res.json() == {
622
622
  "severity": "MEDIUM",
623
- "message": "you are not authorized to access request resouce",
623
+ "message": "you are not authorized to access requested resource",
624
624
  "code": 0,
625
625
  }
626
626
 
@@ -633,7 +633,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
633
633
  assert res.status_code == 401
634
634
  assert res.json() == {
635
635
  "severity": "MEDIUM",
636
- "message": "you are not authorized to access request resouce",
636
+ "message": "you are not authorized to access requested resource",
637
637
  "code": 0,
638
638
  }
639
639
 
@@ -659,7 +659,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
659
659
  assert res.status_code == 401
660
660
  assert res.json() == {
661
661
  "severity": "MEDIUM",
662
- "message": "you are not authorized to access request resouce",
662
+ "message": "you are not authorized to access requested resource",
663
663
  "code": 0,
664
664
  }
665
665
 
@@ -672,7 +672,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
672
672
  assert res.status_code == 401
673
673
  assert res.json() == {
674
674
  "severity": "MEDIUM",
675
- "message": "you are not authorized to access request resouce",
675
+ "message": "you are not authorized to access requested resource",
676
676
  "code": 0,
677
677
  }
678
678
 
@@ -685,7 +685,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
685
685
  assert res.status_code == 401
686
686
  assert res.json() == {
687
687
  "severity": "MEDIUM",
688
- "message": "you are not authorized to access request resouce",
688
+ "message": "you are not authorized to access requested resource",
689
689
  "code": 0,
690
690
  }
691
691
 
@@ -698,7 +698,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
698
698
  assert res.status_code == 401
699
699
  assert res.json() == {
700
700
  "severity": "MEDIUM",
701
- "message": "you are not authorized to access request resouce",
701
+ "message": "you are not authorized to access requested resource",
702
702
  "code": 0,
703
703
  }
704
704
 
@@ -711,7 +711,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
711
711
  assert res.status_code == 401
712
712
  assert res.json() == {
713
713
  "severity": "MEDIUM",
714
- "message": "you are not authorized to access request resouce",
714
+ "message": "you are not authorized to access requested resource",
715
715
  "code": 0,
716
716
  }
717
717
 
@@ -737,7 +737,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
737
737
  assert res.status_code == 401
738
738
  assert res.json() == {
739
739
  "severity": "MEDIUM",
740
- "message": "you are not authorized to access request resouce",
740
+ "message": "you are not authorized to access requested resource",
741
741
  "code": 0,
742
742
  }
743
743
 
@@ -750,7 +750,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
750
750
  assert res.status_code == 401
751
751
  assert res.json() == {
752
752
  "severity": "MEDIUM",
753
- "message": "you are not authorized to access request resouce",
753
+ "message": "you are not authorized to access requested resource",
754
754
  "code": 0,
755
755
  }
756
756
 
@@ -767,7 +767,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
767
767
  assert res.status_code == 401
768
768
  assert res.json() == {
769
769
  "severity": "MEDIUM",
770
- "message": "you are not authorized to access request resouce",
770
+ "message": "you are not authorized to access requested resource",
771
771
  "code": 0,
772
772
  }
773
773
 
@@ -776,7 +776,7 @@ async def test_endpoint_acl_any_user_type_all_permissions():
776
776
  assert res.status_code == 401
777
777
  assert res.json() == {
778
778
  "severity": "MEDIUM",
779
- "message": "you are not authorized to access request resouce",
779
+ "message": "you are not authorized to access requested resource",
780
780
  "code": 0,
781
781
  }
782
782
 
@@ -820,7 +820,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
820
820
  assert res.status_code == 401
821
821
  assert res.json() == {
822
822
  "severity": "MEDIUM",
823
- "message": "you are not authorized to access request resouce",
823
+ "message": "you are not authorized to access requested resource",
824
824
  "code": 0,
825
825
  }
826
826
 
@@ -833,7 +833,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
833
833
  assert res.status_code == 401
834
834
  assert res.json() == {
835
835
  "severity": "MEDIUM",
836
- "message": "you are not authorized to access request resouce",
836
+ "message": "you are not authorized to access requested resource",
837
837
  "code": 0,
838
838
  }
839
839
 
@@ -859,7 +859,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
859
859
  assert res.status_code == 401
860
860
  assert res.json() == {
861
861
  "severity": "MEDIUM",
862
- "message": "you are not authorized to access request resouce",
862
+ "message": "you are not authorized to access requested resource",
863
863
  "code": 0,
864
864
  }
865
865
 
@@ -872,7 +872,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
872
872
  assert res.status_code == 401
873
873
  assert res.json() == {
874
874
  "severity": "MEDIUM",
875
- "message": "you are not authorized to access request resouce",
875
+ "message": "you are not authorized to access requested resource",
876
876
  "code": 0,
877
877
  }
878
878
 
@@ -885,7 +885,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
885
885
  assert res.status_code == 401
886
886
  assert res.json() == {
887
887
  "severity": "MEDIUM",
888
- "message": "you are not authorized to access request resouce",
888
+ "message": "you are not authorized to access requested resource",
889
889
  "code": 0,
890
890
  }
891
891
 
@@ -898,7 +898,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
898
898
  assert res.status_code == 401
899
899
  assert res.json() == {
900
900
  "severity": "MEDIUM",
901
- "message": "you are not authorized to access request resouce",
901
+ "message": "you are not authorized to access requested resource",
902
902
  "code": 0,
903
903
  }
904
904
 
@@ -911,7 +911,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
911
911
  assert res.status_code == 401
912
912
  assert res.json() == {
913
913
  "severity": "MEDIUM",
914
- "message": "you are not authorized to access request resouce",
914
+ "message": "you are not authorized to access requested resource",
915
915
  "code": 0,
916
916
  }
917
917
 
@@ -928,7 +928,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
928
928
  assert res.status_code == 401
929
929
  assert res.json() == {
930
930
  "severity": "MEDIUM",
931
- "message": "you are not authorized to access request resouce",
931
+ "message": "you are not authorized to access requested resource",
932
932
  "code": 0,
933
933
  }
934
934
 
@@ -941,7 +941,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
941
941
  assert res.status_code == 401
942
942
  assert res.json() == {
943
943
  "severity": "MEDIUM",
944
- "message": "you are not authorized to access request resouce",
944
+ "message": "you are not authorized to access requested resource",
945
945
  "code": 0,
946
946
  }
947
947
 
@@ -954,7 +954,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
954
954
  assert res.status_code == 401
955
955
  assert res.json() == {
956
956
  "severity": "MEDIUM",
957
- "message": "you are not authorized to access request resouce",
957
+ "message": "you are not authorized to access requested resource",
958
958
  "code": 0,
959
959
  }
960
960
 
@@ -971,7 +971,7 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
971
971
  assert res.status_code == 401
972
972
  assert res.json() == {
973
973
  "severity": "MEDIUM",
974
- "message": "you are not authorized to access request resouce",
974
+ "message": "you are not authorized to access requested resource",
975
975
  "code": 0,
976
976
  }
977
977
 
@@ -980,6 +980,6 @@ async def test_endpoint_acl_specific_user_type_all_permissions():
980
980
  assert res.status_code == 401
981
981
  assert res.json() == {
982
982
  "severity": "MEDIUM",
983
- "message": "you are not authorized to access request resouce",
983
+ "message": "you are not authorized to access requested resource",
984
984
  "code": 0,
985
985
  }
@@ -1076,7 +1076,7 @@ wheels = [
1076
1076
 
1077
1077
  [[package]]
1078
1078
  name = "qena-shared-lib"
1079
- version = "0.1.0"
1079
+ version = "0.1.2"
1080
1080
  source = { editable = "." }
1081
1081
  dependencies = [
1082
1082
  { name = "cronsim" },