orionis 0.703.0__py3-none-any.whl → 0.704.0__py3-none-any.whl

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.
@@ -1,3 +1,5 @@
1
+ from typing import List
2
+ from orionis.console.args.argument import CLIArgument
1
3
  from orionis.console.base.command import BaseCommand
2
4
  from orionis.console.exceptions import CLIOrionisRuntimeError
3
5
  from orionis.foundation.contracts.application import IApplication
@@ -26,6 +28,32 @@ class TestCommand(BaseCommand):
26
28
  # Command description
27
29
  description: str = "Executes all automated tests using the configured test kernel for the Orionis application."
28
30
 
31
+ def options(self) -> List[CLIArgument]:
32
+ """
33
+ Returns the list of command-line options available for the test command.
34
+
35
+ This method defines the supported CLI arguments for the test command,
36
+ allowing users to specify additional options such as the modules to test.
37
+
38
+ Returns
39
+ -------
40
+ List[CLIArgument]
41
+ A list containing CLIArgument instances that describe the available
42
+ command-line options for the test command.
43
+ """
44
+
45
+ # Define the available command-line options for the test command
46
+ return [
47
+ CLIArgument(
48
+ flags=["--module", "-m"],
49
+ type=str,
50
+ default=[],
51
+ help="Specify one or more test modules to execute (can be used multiple times).",
52
+ action="append",
53
+ dest="modules"
54
+ )
55
+ ]
56
+
29
57
  def handle(self, app: IApplication) -> dict:
30
58
  """
31
59
  Executes all automated tests using the configured test kernel.
@@ -59,7 +87,9 @@ class TestCommand(BaseCommand):
59
87
  kernel: ITestKernel = app.make(ITestKernel)
60
88
 
61
89
  # Run the test suite using the kernel's handle method
62
- return kernel.handle()
90
+ return kernel.handle(
91
+ modules=self.argument("modules")
92
+ )
63
93
 
64
94
  except Exception as e:
65
95
 
@@ -6,7 +6,7 @@
6
6
  NAME = "orionis"
7
7
 
8
8
  # Current version of the framework
9
- VERSION = "0.703.0"
9
+ VERSION = "0.704.0"
10
10
 
11
11
  # Full name of the author or maintainer of the project
12
12
  AUTHOR = "Raul Mauricio Uñate Castro"
@@ -4,67 +4,5 @@ from orionis.test.output.dumper import TestDumper
4
4
  class AsyncTestCase(unittest.IsolatedAsyncioTestCase, TestDumper):
5
5
  """
6
6
  Base class for asynchronous unit tests in the Orionis framework.
7
-
8
- Inherits from `unittest.IsolatedAsyncioTestCase` and `TestDumper`, providing
9
- a structure for writing asynchronous tests with isolated event loops and
10
- enhanced output capabilities. Subclasses can override `onAsyncSetup` and
11
- `onAsyncTeardown` for custom asynchronous setup and teardown logic.
12
-
13
- Attributes
14
- ----------
15
- None
16
7
  """
17
-
18
- async def asyncSetUp(self):
19
- """
20
- Asynchronous setup executed before each test method.
21
-
22
- Calls the parent class's asyncSetUp and then invokes the
23
- `onAsyncSetup` hook for additional subclass-specific setup.
24
-
25
- Returns
26
- -------
27
- None
28
- """
29
- await super().asyncSetUp()
30
- await self.onAsyncSetup()
31
-
32
- async def asyncTearDown(self):
33
- """
34
- Asynchronous teardown executed after each test method.
35
-
36
- Invokes the `onAsyncTeardown` hook for subclass-specific cleanup,
37
- then calls the parent class's asyncTearDown.
38
-
39
- Returns
40
- -------
41
- None
42
- """
43
- await self.onAsyncTeardown()
44
- await super().asyncTearDown()
45
-
46
- async def onAsyncSetup(self):
47
- """
48
- Hook for subclass-specific asynchronous setup logic.
49
-
50
- Intended to be overridden by subclasses to perform custom
51
- asynchronous initialization before each test.
52
-
53
- Returns
54
- -------
55
- None
56
- """
57
- pass
58
-
59
- async def onAsyncTeardown(self):
60
- """
61
- Hook for subclass-specific asynchronous teardown logic.
62
-
63
- Intended to be overridden by subclasses to perform custom
64
- asynchronous cleanup after each test.
65
-
66
- Returns
67
- -------
68
- None
69
- """
70
- pass
8
+ pass
@@ -4,67 +4,5 @@ from orionis.test.output.dumper import TestDumper
4
4
  class SyncTestCase(unittest.TestCase, TestDumper):
5
5
  """
6
6
  Base class for synchronous unit tests in the Orionis framework.
7
-
8
- Inherits from `unittest.TestCase` and `TestDumper`, providing
9
- hooks for custom setup and teardown logic via `onSetup()` and
10
- `onTeardown()` methods. Subclasses should override these hooks
11
- to implement test-specific initialization and cleanup.
12
-
13
- Attributes
14
- ----------
15
- None
16
7
  """
17
-
18
- def setUp(self):
19
- """
20
- Set up the test environment before each test method.
21
-
22
- Calls the superclass `setUp()` and then invokes the
23
- `onSetup()` hook for additional initialization.
24
-
25
- Returns
26
- -------
27
- None
28
- """
29
- super().setUp()
30
- self.onSetup()
31
-
32
- def tearDown(self):
33
- """
34
- Clean up the test environment after each test method.
35
-
36
- Invokes the `onTeardown()` hook for custom cleanup and
37
- then calls the superclass `tearDown()`.
38
-
39
- Returns
40
- -------
41
- None
42
- """
43
- self.onTeardown()
44
- super().tearDown()
45
-
46
- def onSetup(self):
47
- """
48
- Hook for subclass-specific setup logic.
49
-
50
- Intended to be overridden by subclasses to perform
51
- custom initialization before each test.
52
-
53
- Returns
54
- -------
55
- None
56
- """
57
- pass
58
-
59
- def onTeardown(self):
60
- """
61
- Hook for subclass-specific teardown logic.
62
-
63
- Intended to be overridden by subclasses to perform
64
- custom cleanup after each test.
65
-
66
- Returns
67
- -------
68
- None
69
- """
70
- pass
8
+ pass
@@ -10,9 +10,21 @@ class ITestKernel(ABC):
10
10
  """
11
11
 
12
12
  @abstractmethod
13
- def handle(self) -> IUnitTest:
13
+ def handle(
14
+ self,
15
+ modules: list = []
16
+ ) -> IUnitTest:
14
17
  """
15
- Configure and execute unit tests according to the current configuration.
18
+ Configures and executes unit tests based on the current test kernel configuration.
19
+
20
+ This method sets up the test environment, loads the specified modules, and orchestrates
21
+ the execution of unit tests. It returns an instance of `IUnitTest` representing the
22
+ results and state of the executed tests.
23
+
24
+ Parameters
25
+ ----------
26
+ modules : list, optional
27
+ A list of modules to be included in the test execution. Defaults to an empty list.
16
28
 
17
29
  Returns
18
30
  -------
@@ -4,6 +4,34 @@ from typing import Any, Dict, List
4
4
 
5
5
  class IUnitTest(ABC):
6
6
 
7
+ @abstractmethod
8
+ def setModule(
9
+ self,
10
+ module: str
11
+ ) -> None:
12
+ """
13
+ Add a specific module name to the list of modules for test discovery.
14
+
15
+ This method appends the provided module name to the internal list of specific modules
16
+ (`__specific_modules`). These modules will be considered during test discovery and loading.
17
+
18
+ Parameters
19
+ ----------
20
+ module : str
21
+ The name of the module to add for test discovery.
22
+
23
+ Returns
24
+ -------
25
+ None
26
+ This method does not return any value. It updates the internal module list.
27
+
28
+ Notes
29
+ -----
30
+ - The module name should be a string representing the fully qualified module path.
31
+ - This method is useful for targeting specific modules for test execution.
32
+ """
33
+ pass
34
+
7
35
  @abstractmethod
8
36
  def run(self) -> Dict[str, Any]:
9
37
  """
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import io
2
3
  import json
3
4
  import logging
@@ -19,6 +20,7 @@ from orionis.foundation.contracts.application import IApplication
19
20
  from orionis.services.introspection.concretes.reflection import ReflectionConcrete
20
21
  from orionis.services.introspection.instances.reflection import ReflectionInstance
21
22
  from orionis.support.performance.contracts.counter import IPerformanceCounter
23
+ from orionis.test.cases.asynchronous import AsyncTestCase
22
24
  from orionis.test.contracts.test_result import IOrionisTestResult
23
25
  from orionis.test.contracts.unit_test import IUnitTest
24
26
  from orionis.test.entities.result import TestResult
@@ -32,7 +34,6 @@ from orionis.test.validators import (
32
34
  ValidPersistent, ValidThrowException, ValidVerbosity, ValidWebReport, ValidWorkers,
33
35
  )
34
36
  from orionis.test.view.render import TestingResultRender
35
- import asyncio
36
37
 
37
38
  class UnitTest(IUnitTest):
38
39
  """
@@ -91,10 +92,10 @@ class UnitTest(IUnitTest):
91
92
  logging.getLogger("asyncio").setLevel(logging.ERROR)
92
93
 
93
94
  # List of common setup/teardown methods to inspect for debug calls
94
- self.__commonMethods = [
95
- 'setUp', 'tearDown', 'onSetup', 'onTeardown',
96
- 'asyncSetUp', 'asyncTearDown', 'onAsyncSetup', 'onAsyncTeardown'
97
- ]
95
+ self.__commonMethods = {
96
+ 'sync': ['setUp', 'tearDown'],
97
+ 'async': ['asyncSetUp', 'asyncTearDown']
98
+ }
98
99
 
99
100
  # Store the application instance for dependency injection and configuration access
100
101
  self.__app: IApplication = app
@@ -107,6 +108,7 @@ class UnitTest(IUnitTest):
107
108
  self.__flatten_test_suite: Optional[List[unittest.TestCase]] = None
108
109
 
109
110
  # List to store imported test modules
111
+ self.__specific_modules: List[str] = []
110
112
  self.__imported_modules: List = []
111
113
 
112
114
  # Sets to track discovered test cases, modules, and IDs
@@ -278,7 +280,8 @@ class UnitTest(IUnitTest):
278
280
  )
279
281
 
280
282
  def __loadModules(
281
- self
283
+ self,
284
+ modules: List[str] = None
282
285
  ) -> None:
283
286
  """
284
287
  Loads and validates Python modules for test discovery based on the configured folder paths and file patterns.
@@ -311,14 +314,23 @@ class UnitTest(IUnitTest):
311
314
  """
312
315
 
313
316
  # Use a set to avoid duplicate module imports
314
- modules = set()
317
+ discover_modules = set()
318
+
319
+ # If specific modules are provided, validate and import them directly
320
+ if modules:
321
+ for module in modules:
322
+ if not isinstance(module, str) or not module.strip():
323
+ raise OrionisTestValueError(
324
+ f"Invalid module name: expected a non-empty string, got {repr(module)}."
325
+ )
326
+ discover_modules.add(import_module(ValidModuleName(module.strip())))
315
327
 
316
328
  # If folder_path is '*', discover all modules matching the pattern in the test directory
317
- if self.__folder_path == '*':
329
+ elif self.__folder_path == '*':
318
330
  list_modules = self.__listMatchingModules(
319
331
  self.__root_path, self.__test_path, '', self.__pattern
320
332
  )
321
- modules.update(list_modules)
333
+ discover_modules.update(list_modules)
322
334
 
323
335
  # If folder_path is a list, discover modules in each specified subdirectory
324
336
  elif isinstance(self.__folder_path, list):
@@ -326,10 +338,10 @@ class UnitTest(IUnitTest):
326
338
  list_modules = self.__listMatchingModules(
327
339
  self.__root_path, self.__test_path, custom_path, self.__pattern
328
340
  )
329
- modules.update(list_modules)
341
+ discover_modules.update(list_modules)
330
342
 
331
343
  # Extend the internal module list with the sorted discovered modules
332
- self.__imported_modules.extend(modules)
344
+ self.__imported_modules.extend(discover_modules)
333
345
 
334
346
  def __listMatchingModules(
335
347
  self,
@@ -656,7 +668,7 @@ class UnitTest(IUnitTest):
656
668
  rf_instance = ReflectionInstance(test_case)
657
669
  method_name = rf_instance.getAttribute("_testMethodName")
658
670
  method_names_to_check = [method_name] if method_name else []
659
- method_names_to_check += [m for m in self.__commonMethods if rf_instance.hasMethod(m)]
671
+ method_names_to_check += [m for m in self.__commonMethods['sync'] + self.__commonMethods['async'] if rf_instance.hasMethod(m)]
660
672
 
661
673
  # Inspect each method's source code for debug keywords
662
674
  for mname in method_names_to_check:
@@ -701,6 +713,35 @@ class UnitTest(IUnitTest):
701
713
  # No debug keywords found in any inspected method
702
714
  return False
703
715
 
716
+ def setModule(
717
+ self,
718
+ module: str
719
+ ) -> None:
720
+ """
721
+ Add a specific module name to the list of modules for test discovery.
722
+
723
+ This method appends the provided module name to the internal list of specific modules
724
+ (`__specific_modules`). These modules will be considered during test discovery and loading.
725
+
726
+ Parameters
727
+ ----------
728
+ module : str
729
+ The name of the module to add for test discovery.
730
+
731
+ Returns
732
+ -------
733
+ None
734
+ This method does not return any value. It updates the internal module list.
735
+
736
+ Notes
737
+ -----
738
+ - The module name should be a string representing the fully qualified module path.
739
+ - This method is useful for targeting specific modules for test execution.
740
+ """
741
+
742
+ # Append the provided module name to the list of specific modules for discovery
743
+ self.__specific_modules.append(module)
744
+
704
745
  def run(
705
746
  self,
706
747
  performance_counter: IPerformanceCounter
@@ -729,7 +770,7 @@ class UnitTest(IUnitTest):
729
770
  self.__loadConfig()
730
771
 
731
772
  # Discover and import test modules based on the configuration
732
- self.__loadModules()
773
+ self.__loadModules(self.__specific_modules)
733
774
 
734
775
  # Discover and load all test cases from the imported modules into the suite
735
776
  self.__loadTests()
@@ -923,10 +964,17 @@ class UnitTest(IUnitTest):
923
964
  if not rf_instance.hasAttribute("_testMethodName"):
924
965
  return test_case
925
966
 
967
+ # Determine if the test case uses async or sync common methods
968
+ common_methods = []
969
+ if AsyncTestCase in rf_instance.getBaseClasses():
970
+ common_methods = self.__commonMethods['async']
971
+ else:
972
+ common_methods = self.__commonMethods['sync']
973
+
926
974
  # Iterate over the main test method and common setup/teardown methods
927
975
  for method_name in [
928
976
  rf_instance.getAttribute("_testMethodName"),
929
- *self.__commonMethods
977
+ *common_methods
930
978
  ]:
931
979
 
932
980
  # Skip if the method does not exist on the class
@@ -958,26 +1006,15 @@ class UnitTest(IUnitTest):
958
1006
  dependencies
959
1007
  )
960
1008
 
961
- # If the test method is asynchronous, wrap it to run in an event loop
1009
+ # If the test method is asynchronous, wrap it to preserve async nature
962
1010
  if asyncio.iscoroutinefunction(original_method):
963
1011
 
964
- # Define an async wrapper to inject dependencies
1012
+ # Define an async wrapper to inject dependencies and preserve async nature
965
1013
  async def async_wrapper(self_instance):
966
- return await original_method(self_instance, **resolved_args)
967
-
968
- # Wrap with a sync function for unittest compatibility
969
- def sync_wrapper(self_instance):
970
- try:
971
- loop = asyncio.get_running_loop()
972
- except RuntimeError:
973
- loop = None
974
- if loop and loop.is_running():
975
- return loop.create_task(async_wrapper(self_instance)) # NOSONAR
976
- else:
977
- return asyncio.run(async_wrapper(self_instance))
1014
+ return await original_method(self_instance, **resolved_args) # NOSONAR
978
1015
 
979
- # Bind the wrapped method to the test case instance
980
- bound_method = sync_wrapper.__get__(test_case, test_cls)
1016
+ # Bind the async wrapped method to the test case instance
1017
+ bound_method = async_wrapper.__get__(test_case, test_cls)
981
1018
 
982
1019
  else:
983
1020
 
@@ -1045,7 +1082,7 @@ class UnitTest(IUnitTest):
1045
1082
  )
1046
1083
 
1047
1084
  # Run the current test case and obtain the result
1048
- single_result: IOrionisTestResult = runner.run(unittest.TestSuite([case]))
1085
+ single_result: unittest.TestResult = runner.run(unittest.TestSuite([case]))
1049
1086
 
1050
1087
  # Print the result of the current test case using the printer
1051
1088
  self.__printer.unittestResult(single_result.test_results[0])
orionis/test/kernel.py CHANGED
@@ -47,7 +47,10 @@ class TestKernel(ITestKernel):
47
47
  # Retrieve the unit test service from the application container
48
48
  self.__unit_test: IUnitTest = app.make(IUnitTest)
49
49
 
50
- def handle(self) -> dict:
50
+ def handle(
51
+ self,
52
+ modules: list = []
53
+ ) -> dict:
51
54
  """
52
55
  Executes the unit test suite and logs a summary of the results.
53
56
 
@@ -68,6 +71,11 @@ class TestKernel(ITestKernel):
68
71
  'success_rate', and 'timestamp'. If no tests are run, returns None.
69
72
  """
70
73
 
74
+ # If specific modules are provided, set them in the unit test service
75
+ if modules and isinstance(modules, list) and len(modules) > 0:
76
+ for module in modules:
77
+ self.__unit_test.setModule(module)
78
+
71
79
  # Run the unit test suite and collect the output summary
72
80
  output = self.__app.call(self.__unit_test, 'run')
73
81
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orionis
3
- Version: 0.703.0
3
+ Version: 0.704.0
4
4
  Summary: Orionis Framework – Elegant, Fast, and Powerful.
5
5
  Home-page: https://github.com/orionis-framework/framework
6
6
  Author: Raul Mauricio Uñate Castro
@@ -16,7 +16,7 @@ orionis/console/commands/log_clear.py,sha256=OI1j_myCYUOMI-SfnN-NH-6BYzzWKXOKIEb
16
16
  orionis/console/commands/make_command.py,sha256=WHE2J78fuY9RHScCOn9R_2KjkiayYJHFlm-Mp-k8X-o,5956
17
17
  orionis/console/commands/scheduler_list.py,sha256=7Ug0eoqusIOsmHaiakm3-JYAK8VNIypOtKMcSzn-AL0,4544
18
18
  orionis/console/commands/scheduler_work.py,sha256=NV-WhJwY4Lv_x6UO2FcWikA1HFFK-PmJWm-oHQPs0fg,5573
19
- orionis/console/commands/test.py,sha256=LXtl918TmYhg0sjBiCfbsvaXUmCLqwCXTazmy7AJhlE,2445
19
+ orionis/console/commands/test.py,sha256=G3pveONRbeWTcVwaHat3wTAhxMm4g_BwhJhIejq6V0Y,3518
20
20
  orionis/console/commands/version.py,sha256=u5_8CfnEVdS3VSME8rbP6o3Z0XFZ30nSz8uHdahBAoY,4766
21
21
  orionis/console/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
22
  orionis/console/contracts/base_command.py,sha256=0N1XeV2AdAJaCZCAJNpwItx3YI4GDQmVGrfApx0r0B4,7513
@@ -207,7 +207,7 @@ orionis/foundation/providers/scheduler_provider.py,sha256=IrPQJwvQVLRm5Qnz0Cxon4
207
207
  orionis/foundation/providers/testing_provider.py,sha256=eI1p2lUlxl25b5Z487O4nmqLE31CTDb4c3Q21xFadkE,1615
208
208
  orionis/foundation/providers/workers_provider.py,sha256=GdHENYV_yGyqmHJHn0DCyWmWId5xWjD48e6Zq2PGCWY,1674
209
209
  orionis/metadata/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
210
- orionis/metadata/framework.py,sha256=NyzwTFyjh6tKJaUF4GNsIKqP3bN_3noq0pZaAjSIsDA,4570
210
+ orionis/metadata/framework.py,sha256=HSOSLkNVgGs7btIDBHc9IREQR7ctQb7A2N_6kbYeoug,4570
211
211
  orionis/metadata/package.py,sha256=s1JeGJPwdVh4jO3IOfmpwMuJ_oX6Vf9NL7jgPEQNf5Y,16050
212
212
  orionis/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
213
213
  orionis/services/asynchrony/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -348,20 +348,20 @@ orionis/support/wrapper/__init__.py,sha256=jGoWoIGYuRYqMYQKlrX7Dpcbg-AGkHoB_aM2x
348
348
  orionis/support/wrapper/dataclass.py,sha256=D2g9vHc6F0T7qLpzDwWUAiohcYz8Gcs2Ph5rLaOhqMo,9432
349
349
  orionis/support/wrapper/dot_dict.py,sha256=T8xWwwOhBZHNeXRwE_CxvOwG9UFxsLqNmOJjV2CNIrc,7284
350
350
  orionis/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
351
- orionis/test/kernel.py,sha256=gZARnbvdz193WE-gdOiZvtUsuwHCGHHAw07conCNWMo,4019
351
+ orionis/test/kernel.py,sha256=cEWfa8_WA_3PcG1ss8Bq8kO4-22diesZUapBlvzyXnY,4305
352
352
  orionis/test/cases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
353
- orionis/test/cases/asynchronous.py,sha256=3e1Y3qzIxVU7i7lbLFEVyJ89IA74JsB7famx71W-p2E,1974
354
- orionis/test/cases/synchronous.py,sha256=S5jhuDEZ5I9wosrTFaCtowkD5r5HzJH6mKPOdEJcDJE,1734
353
+ orionis/test/cases/asynchronous.py,sha256=Fc0_14-oDmx7jmJ6bL5z-9ffNFRipCKb7vqQ8ad5FiY,234
354
+ orionis/test/cases/synchronous.py,sha256=1K8zmzntXisKDBYuk12sfL8k260i1S6-7tAoXQcxe54,217
355
355
  orionis/test/contracts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
356
356
  orionis/test/contracts/dumper.py,sha256=-QKcbD1afjjRQ4oDwJuCZ0c1TyKa4YK_g_5gX6t0kA8,1356
357
- orionis/test/contracts/kernel.py,sha256=tBUt8cr6HGE16lsIaRp1FoDcr46tiEta5PaasfbHe-w,732
357
+ orionis/test/contracts/kernel.py,sha256=iZQJT-BC5lsqfEi6_nlocO1S5SX8omYmSMpHzEqMWX8,1201
358
358
  orionis/test/contracts/logs.py,sha256=kRH3TGQcTNI0kRxFyEs13Y7NOPP9x9WGitPexnoLzQo,2352
359
359
  orionis/test/contracts/printer.py,sha256=iBz8wHAGaS21VBsHlZQVcx0xu9Bqusb-CLAjj-R1Sjg,3412
360
360
  orionis/test/contracts/render.py,sha256=wpDQzUtT0r8KFZ7zPcxWHXQ1EVNKxzA_rZ6ZKUcZO1c,744
361
361
  orionis/test/contracts/test_result.py,sha256=SNXJ2UerkweYn7uCT0i0HmMGP0XBrL_9KJs-0ZvIYU4,4002
362
- orionis/test/contracts/unit_test.py,sha256=EyidHoOPJItwgkBWGYY1TymbNklyn2EUXnghVvW4htc,4652
362
+ orionis/test/contracts/unit_test.py,sha256=W_RQ8xw_EIiPSsxjdUQTGG8PidrdwUwIMiYax0HlVuI,5538
363
363
  orionis/test/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
- orionis/test/core/unit_test.py,sha256=9NhwOWJjutYOJa1Mc2ioXzuLV6rejFGbEI91jrdVfHE,72578
364
+ orionis/test/core/unit_test.py,sha256=NJcf8Wf8FYAo_yXeas7T7m6ejECoDfzWQl4ddWKK6rw,73989
365
365
  orionis/test/entities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
366
366
  orionis/test/entities/result.py,sha256=eZ6UIqGmFW8FZ9x8PB_MZbLAc-SAuUyi4FUcMYIZzGo,4777
367
367
  orionis/test/enums/__init__.py,sha256=M3imAgMvKFTKg55FbtVoY3zxj7QRY9AfaUWxiSZVvn4,66
@@ -394,8 +394,8 @@ orionis/test/validators/workers.py,sha256=rWcdRexINNEmGaO7mnc1MKUxkHKxrTsVuHgbnI
394
394
  orionis/test/view/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
395
395
  orionis/test/view/render.py,sha256=arysoswhkV2vUd2aVMZRPpmH317jaWbgjDpQ_AWQ5AE,5663
396
396
  orionis/test/view/report.stub,sha256=QLqqCdRoENr3ECiritRB3DO_MOjRQvgBh5jxZ3Hs1r0,28189
397
- orionis-0.703.0.dist-info/licenses/LICENCE,sha256=JhC-z_9mbpUrCfPjcl3DhDA8trNDMzb57cvRSam1avc,1463
398
- orionis-0.703.0.dist-info/METADATA,sha256=1BS2RhRHcbJ5MnSJAnSoNV0-gyTuvVus8XrmcN3nDi8,4772
399
- orionis-0.703.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
400
- orionis-0.703.0.dist-info/top_level.txt,sha256=lyXi6jArpqJ-0zzNqd_uwsH-z9TCEBVBL-pC3Ekv7hU,8
401
- orionis-0.703.0.dist-info/RECORD,,
397
+ orionis-0.704.0.dist-info/licenses/LICENCE,sha256=JhC-z_9mbpUrCfPjcl3DhDA8trNDMzb57cvRSam1avc,1463
398
+ orionis-0.704.0.dist-info/METADATA,sha256=F4vTOgBolNED4Vkqyw0vqHMIbVEf5eP5IxxOwoq7OsY,4772
399
+ orionis-0.704.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
400
+ orionis-0.704.0.dist-info/top_level.txt,sha256=lyXi6jArpqJ-0zzNqd_uwsH-z9TCEBVBL-pC3Ekv7hU,8
401
+ orionis-0.704.0.dist-info/RECORD,,