robotframework-pabot 4.0.0__py3-none-any.whl → 4.0.5__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.
pabot/SharedLibrary.py CHANGED
@@ -11,7 +11,6 @@ from .robotremoteserver import RemoteLibraryFactory
11
11
 
12
12
 
13
13
  class SharedLibrary(object):
14
-
15
14
  ROBOT_LIBRARY_SCOPE = "GLOBAL"
16
15
 
17
16
  def __init__(self, name, args=None):
@@ -26,8 +25,10 @@ class SharedLibrary(object):
26
25
  "Not currently running pabot. Importing library for this process."
27
26
  )
28
27
  self._lib = RemoteLibraryFactory(
29
- TestLibrary.from_name(name, args=args, variables=None, create_keywords=True).instance
30
- if ROBOT_VERSION >= "7.0"
28
+ TestLibrary.from_name(
29
+ name, args=args, variables=None, create_keywords=True
30
+ ).instance
31
+ if ROBOT_VERSION >= "7.0"
31
32
  else TestLibrary(name, args=args).get_instance()
32
33
  )
33
34
  return
@@ -36,7 +37,9 @@ class SharedLibrary(object):
36
37
  remotelib = Remote(uri) if uri else None
37
38
  if remotelib:
38
39
  try:
39
- port = remotelib.run_keyword("import_shared_library", [name], {"args": args})
40
+ port = remotelib.run_keyword(
41
+ "import_shared_library", [name], {"args": args}
42
+ )
40
43
  except RuntimeError:
41
44
  logger.error("No connection - is pabot called with --pabotlib option?")
42
45
  raise
pabot/__init__.py CHANGED
@@ -1,4 +1,5 @@
1
1
  from __future__ import absolute_import
2
2
 
3
3
  from .pabotlib import PabotLib
4
- __version__ = "4.0.0"
4
+
5
+ __version__ = "4.0.5"
pabot/arguments.py CHANGED
@@ -93,12 +93,16 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
93
93
  }
94
94
  # Explicitly define argument types for validation
95
95
  flag_args = {
96
- "verbose", "help", "testlevelsplit", "pabotlib",
97
- "artifactsinsubfolders", "chunk"
96
+ "verbose",
97
+ "help",
98
+ "testlevelsplit",
99
+ "pabotlib",
100
+ "artifactsinsubfolders",
101
+ "chunk",
98
102
  }
99
103
  value_args = {
100
104
  "hive": str,
101
- "processes": lambda x: int(x) if x != 'all' else None,
105
+ "processes": lambda x: int(x) if x != "all" else None,
102
106
  "resourcefile": str,
103
107
  "pabotlibhost": str,
104
108
  "pabotlibport": int,
@@ -106,7 +110,7 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
106
110
  "ordering": _parse_ordering,
107
111
  "suitesfrom": str,
108
112
  "artifacts": lambda x: x.split(","),
109
- "shard": _parse_shard
113
+ "shard": _parse_shard,
110
114
  }
111
115
 
112
116
  argumentfiles = []
@@ -119,11 +123,11 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
119
123
 
120
124
  while i < len(args):
121
125
  arg = args[i]
122
- if not arg.startswith('--'):
126
+ if not arg.startswith("--"):
123
127
  remaining_args.append(arg)
124
128
  i += 1
125
129
  continue
126
-
130
+
127
131
  arg_name = arg[2:] # Strip '--'
128
132
 
129
133
  if arg_name == "no-pabotlib":
@@ -135,23 +139,23 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
135
139
  saw_pabotlib_flag = True
136
140
  args = args[1:]
137
141
  continue
138
-
142
+
139
143
  # Special case for command
140
144
  if arg_name == "command":
141
145
  try:
142
146
  end_index = args.index("--end-command", i)
143
- pabot_args["command"] = args[i+1:end_index]
147
+ pabot_args["command"] = args[i + 1 : end_index]
144
148
  i = end_index + 1
145
149
  continue
146
150
  except ValueError:
147
151
  raise DataError("--command requires matching --end-command")
148
-
152
+
149
153
  # Handle flag arguments
150
154
  if arg_name in flag_args:
151
155
  pabot_args[arg_name] = True
152
156
  i += 1
153
157
  continue
154
-
158
+
155
159
  # Handle value arguments
156
160
  if arg_name in value_args:
157
161
  if i + 1 >= len(args):
@@ -160,13 +164,16 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
160
164
  value = value_args[arg_name](args[i + 1])
161
165
  if arg_name == "shard":
162
166
  pabot_args["shardindex"], pabot_args["shardcount"] = value
167
+ elif arg_name == "pabotlibhost":
168
+ pabot_args["pabotlib"] = False
169
+ pabot_args[arg_name] = value
163
170
  else:
164
171
  pabot_args[arg_name] = value
165
172
  i += 2
166
173
  continue
167
174
  except (ValueError, TypeError) as e:
168
175
  raise DataError(f"Invalid value for --{arg_name}: {args[i + 1]}")
169
-
176
+
170
177
  # Handle argument files
171
178
  match = ARGSMATCHER.match(arg)
172
179
  if match:
@@ -175,15 +182,16 @@ def _parse_pabot_args(args): # type: (List[str]) -> Tuple[List[str], Dict[str,
175
182
  argumentfiles.append((match.group(1), args[i + 1]))
176
183
  i += 2
177
184
  continue
178
-
185
+
179
186
  # If we get here, it's a non-pabot argument
180
187
  remaining_args.append(arg)
181
188
  i += 1
182
-
189
+
183
190
  if saw_pabotlib_flag and saw_no_pabotlib:
184
191
  raise DataError("Cannot use both --pabotlib and --no-pabotlib options together")
185
-
192
+
186
193
  pabot_args["argumentfiles"] = argumentfiles
194
+
187
195
  return remaining_args, pabot_args
188
196
 
189
197
 
pabot/execution_items.py CHANGED
@@ -8,7 +8,6 @@ from robot.utils import PY2, is_unicode
8
8
 
9
9
  @total_ordering
10
10
  class ExecutionItem(object):
11
-
12
11
  isWait = False
13
12
  type = None # type: str
14
13
  name = None # type: str
@@ -51,7 +50,6 @@ class ExecutionItem(object):
51
50
 
52
51
 
53
52
  class HivedItem(ExecutionItem):
54
-
55
53
  type = "hived"
56
54
 
57
55
  def __init__(self, item, hive):
@@ -67,7 +65,6 @@ class HivedItem(ExecutionItem):
67
65
 
68
66
 
69
67
  class GroupItem(ExecutionItem):
70
-
71
68
  type = "group"
72
69
 
73
70
  def __init__(self):
@@ -128,7 +125,6 @@ class RunnableItem(ExecutionItem):
128
125
 
129
126
 
130
127
  class SuiteItem(RunnableItem):
131
-
132
128
  type = "suite"
133
129
 
134
130
  def __init__(self, name, tests=None, suites=None, dynamictests=None):
@@ -163,9 +159,9 @@ class SuiteItem(RunnableItem):
163
159
  return False
164
160
  if self.name == other.name:
165
161
  return True
166
- if other.name.endswith('.'+self.name):
162
+ if other.name.endswith("." + self.name):
167
163
  return True
168
- if self.name.endswith('.'+other.name):
164
+ if self.name.endswith("." + other.name):
169
165
  return True
170
166
  return False
171
167
 
@@ -178,7 +174,6 @@ class SuiteItem(RunnableItem):
178
174
 
179
175
 
180
176
  class TestItem(RunnableItem):
181
-
182
177
  type = "test"
183
178
 
184
179
  def __init__(self, name):
@@ -229,7 +224,6 @@ class DynamicSuiteItem(SuiteItem):
229
224
 
230
225
 
231
226
  class DynamicTestItem(ExecutionItem):
232
-
233
227
  type = "dynamictest"
234
228
 
235
229
  def __init__(self, name, suite):
@@ -258,7 +252,6 @@ class DynamicTestItem(ExecutionItem):
258
252
 
259
253
 
260
254
  class WaitItem(ExecutionItem):
261
-
262
255
  type = "wait"
263
256
  isWait = True
264
257
 
@@ -270,7 +263,6 @@ class WaitItem(ExecutionItem):
270
263
 
271
264
 
272
265
  class GroupStartItem(ExecutionItem):
273
-
274
266
  type = "group"
275
267
 
276
268
  def __init__(self):
@@ -281,7 +273,6 @@ class GroupStartItem(ExecutionItem):
281
273
 
282
274
 
283
275
  class GroupEndItem(ExecutionItem):
284
-
285
276
  type = "group"
286
277
 
287
278
  def __init__(self):
@@ -292,7 +283,6 @@ class GroupEndItem(ExecutionItem):
292
283
 
293
284
 
294
285
  class IncludeItem(ExecutionItem):
295
-
296
286
  type = "include"
297
287
 
298
288
  def __init__(self, tag):
@@ -309,7 +299,6 @@ class IncludeItem(ExecutionItem):
309
299
 
310
300
 
311
301
  class SuiteItems(ExecutionItem):
312
-
313
302
  type = "suite"
314
303
 
315
304
  def __init__(self, suites):
pabot/pabot.py CHANGED
@@ -44,12 +44,20 @@ options (these must be before normal RF options):
44
44
  Indicator for a file that can contain shared variables for
45
45
  distributing resources.
46
46
 
47
- --pabotlib
48
- Start PabotLib remote server. This enables locking and resource
49
- distribution between parallel test executions.
47
+ --no-pabotlib
48
+ Disable the PabotLib remote server if you don't need locking or resource distribution features.
49
+ PabotLib remote server is started by default.
50
50
 
51
- --pabotlibhost [HOSTNAME]
52
- Host name of the PabotLib remote server (default is 127.0.0.1)
51
+ --pabotlibhost [HOSTNAME]
52
+ Connect to an already running instance of the PabotLib remote server at the given host
53
+ (disables the local PabotLib server start). For example, to connect to a
54
+ remote PabotLib server running on another machine:
55
+
56
+ pabot --pabotlibhost 192.168.1.123 --pabotlibport 8271 tests/
57
+
58
+ The remote PabotLib server can be started separately using:
59
+ python -m pabot.pabotlib <path_to_resourcefile> <host> <port>
60
+ python -m pabot.pabotlib resource.txt 192.168.1.123 8271
53
61
 
54
62
  --pabotlibport [PORT]
55
63
  Port number of the PabotLib remote server (default is 8270)
@@ -236,7 +244,7 @@ def execute_and_wait_with(item):
236
244
  caller_id,
237
245
  item.index,
238
246
  item.execution_item.type != "test",
239
- process_timeout=item.timeout
247
+ process_timeout=item.timeout,
240
248
  )
241
249
  outputxml_preprocessing(
242
250
  item.options, outs_dir, name, item.verbose, _make_id(), caller_id
@@ -294,7 +302,7 @@ def _try_execute_and_wait(
294
302
  caller_id,
295
303
  my_index=-1,
296
304
  show_stdout_on_failure=False,
297
- process_timeout=None
305
+ process_timeout=None,
298
306
  ):
299
307
  # type: (List[str], str, str, bool, int, str, int, bool, Optional[int]) -> None
300
308
  plib = None
@@ -305,7 +313,15 @@ def _try_execute_and_wait(
305
313
  with open(os.path.join(outs_dir, cmd[0] + "_stdout.out"), "w") as stdout:
306
314
  with open(os.path.join(outs_dir, cmd[0] + "_stderr.out"), "w") as stderr:
307
315
  process, (rc, elapsed) = _run(
308
- cmd, stderr, stdout, item_name, verbose, pool_id, my_index, outs_dir, process_timeout
316
+ cmd,
317
+ stderr,
318
+ stdout,
319
+ item_name,
320
+ verbose,
321
+ pool_id,
322
+ my_index,
323
+ outs_dir,
324
+ process_timeout,
309
325
  )
310
326
  except:
311
327
  _write(traceback.format_exc())
@@ -478,7 +494,17 @@ def _increase_completed(plib, my_index):
478
494
  )
479
495
 
480
496
 
481
- def _run(command, stderr, stdout, item_name, verbose, pool_id, item_index, outs_dir, process_timeout):
497
+ def _run(
498
+ command,
499
+ stderr,
500
+ stdout,
501
+ item_name,
502
+ verbose,
503
+ pool_id,
504
+ item_index,
505
+ outs_dir,
506
+ process_timeout,
507
+ ):
482
508
  # type: (List[str], IO[Any], IO[Any], str, bool, int, int, str, Optional[int]) -> Tuple[Union[subprocess.Popen[bytes], subprocess.Popen], Tuple[int, float]]
483
509
  timestamp = datetime.datetime.now()
484
510
  cmd = " ".join(command)
@@ -487,10 +513,14 @@ def _run(command, stderr, stdout, item_name, verbose, pool_id, item_index, outs_
487
513
  # avoid hitting https://bugs.python.org/issue10394
488
514
  with POPEN_LOCK:
489
515
  my_env = os.environ.copy()
490
- syslog_file = my_env.get('ROBOT_SYSLOG_FILE', None)
516
+ syslog_file = my_env.get("ROBOT_SYSLOG_FILE", None)
491
517
  if syslog_file:
492
- my_env['ROBOT_SYSLOG_FILE'] = os.path.join(outs_dir, os.path.basename(syslog_file))
493
- process = subprocess.Popen(cmd, shell=True, stderr=stderr, stdout=stdout, env=my_env)
518
+ my_env["ROBOT_SYSLOG_FILE"] = os.path.join(
519
+ outs_dir, os.path.basename(syslog_file)
520
+ )
521
+ process = subprocess.Popen(
522
+ cmd, shell=True, stderr=stderr, stdout=stdout, env=my_env
523
+ )
494
524
  if verbose:
495
525
  _write_with_id(
496
526
  process,
@@ -507,7 +537,9 @@ def _run(command, stderr, stdout, item_name, verbose, pool_id, item_index, outs_
507
537
  "EXECUTING %s" % item_name,
508
538
  timestamp=timestamp,
509
539
  )
510
- return process, _wait_for_return_code(process, item_name, pool_id, item_index, process_timeout)
540
+ return process, _wait_for_return_code(
541
+ process, item_name, pool_id, item_index, process_timeout
542
+ )
511
543
 
512
544
 
513
545
  def _wait_for_return_code(process, item_name, pool_id, item_index, process_timeout):
@@ -522,12 +554,15 @@ def _wait_for_return_code(process, item_name, pool_id, item_index, process_timeo
522
554
  if process_timeout and elapsed / 10.0 >= process_timeout:
523
555
  process.terminate()
524
556
  process.wait()
525
- rc = -1 # Set a return code indicating that the process was killed due to timeout
557
+ rc = (
558
+ -1
559
+ ) # Set a return code indicating that the process was killed due to timeout
526
560
  _write_with_id(
527
561
  process,
528
562
  pool_id,
529
563
  item_index,
530
- "Process %s killed due to exceeding the maximum timeout of %s seconds" % (item_name, process_timeout),
564
+ "Process %s killed due to exceeding the maximum timeout of %s seconds"
565
+ % (item_name, process_timeout),
531
566
  )
532
567
  break
533
568
 
@@ -544,7 +579,6 @@ def _wait_for_return_code(process, item_name, pool_id, item_index, process_timeo
544
579
  return rc, elapsed / 10.0
545
580
 
546
581
 
547
-
548
582
  def _read_file(file_handle):
549
583
  try:
550
584
  with open(file_handle.name, "r") as content_file:
@@ -1121,7 +1155,6 @@ def store_suite_names(hashes, suite_names):
1121
1155
  for d in suite_lines
1122
1156
  )
1123
1157
  except IOError:
1124
-
1125
1158
  _write(
1126
1159
  "[ "
1127
1160
  + _wrap_with(Color.YELLOW, "WARNING")
@@ -1154,21 +1187,26 @@ def generate_suite_names_with_builder(outs_dir, datasources, options):
1154
1187
  # Note: first argument (included_suites) is deprecated from RobotFramework 6.1
1155
1188
  if ROBOT_VERSION >= "6.1":
1156
1189
  builder = TestSuiteBuilder(
1157
- included_extensions=settings.extension, rpa=settings.rpa, lang=opts.get("language")
1190
+ included_extensions=settings.extension,
1191
+ rpa=settings.rpa,
1192
+ lang=opts.get("language"),
1158
1193
  )
1159
1194
  else:
1160
1195
  builder = TestSuiteBuilder(
1161
1196
  settings["SuiteNames"], settings.extension, rpa=settings.rpa
1162
- )
1197
+ )
1163
1198
 
1164
1199
  suite = builder.build(*datasources)
1165
- settings.rpa = builder.rpa
1166
- suite.configure(**settings.suite_config)
1200
+
1167
1201
  if settings.pre_run_modifiers:
1168
1202
  _write.error = _write.warn = _write.info = _write.debug = _write.trace = _write
1169
1203
  suite.visit(
1170
1204
  ModelModifier(settings.pre_run_modifiers, settings.run_empty_suite, _write)
1171
1205
  )
1206
+
1207
+ settings.rpa = builder.rpa
1208
+ suite.configure(**settings.suite_config)
1209
+
1172
1210
  all_suites = (
1173
1211
  get_all_suites_from_main_suite(suite.suites) if suite.suites else [suite]
1174
1212
  )
@@ -1657,7 +1695,7 @@ class QueueItem(object):
1657
1695
  argfile,
1658
1696
  hive=None,
1659
1697
  processes=0,
1660
- timeout=None
1698
+ timeout=None,
1661
1699
  ):
1662
1700
  # type: (List[str], str, Dict[str, object], ExecutionItem, List[str], bool, Tuple[str, Optional[str]], Optional[str], int, Optional[int]) -> None
1663
1701
  self.datasources = datasources
@@ -1755,7 +1793,7 @@ def _create_items(datasources, opts_for_run, outs_dir, pabot_args, suite_group):
1755
1793
  argfile,
1756
1794
  pabot_args.get("hive"),
1757
1795
  pabot_args["processes"],
1758
- pabot_args["processtimeout"]
1796
+ pabot_args["processtimeout"],
1759
1797
  )
1760
1798
  for suite in suite_group
1761
1799
  for argfile in pabot_args["argumentfiles"] or [("", None)]
@@ -1774,9 +1812,7 @@ def _create_execution_items_for_dry_run(
1774
1812
  datasources, opts_for_run, outs_dir, pabot_args, suite_group
1775
1813
  )
1776
1814
  chunk_size = (
1777
- round(len(items) / processes_count)
1778
- if len(items) > processes_count
1779
- else 1
1815
+ round(len(items) / processes_count) if len(items) > processes_count else 1
1780
1816
  )
1781
1817
  chunked_items = list(_chunk_items(items, chunk_size))
1782
1818
  _NUMBER_OF_ITEMS_TO_BE_EXECUTED += len(chunked_items)
@@ -1800,7 +1836,7 @@ def _chunk_items(items, chunk_size):
1800
1836
  base_item.verbose,
1801
1837
  (base_item.argfile_index, base_item.argfile),
1802
1838
  processes=base_item.processes,
1803
- timeout=base_item.timeout
1839
+ timeout=base_item.timeout,
1804
1840
  )
1805
1841
  yield chunked_item
1806
1842
 
@@ -1880,7 +1916,7 @@ def _get_dynamically_created_execution_items(
1880
1916
  ("", None),
1881
1917
  pabot_args.get("hive"),
1882
1918
  pabot_args["processes"],
1883
- pabot_args["processtimeout"]
1919
+ pabot_args["processtimeout"],
1884
1920
  )
1885
1921
  for suite in suite_group
1886
1922
  ]
@@ -1982,7 +2018,7 @@ def _group_suites(outs_dir, datasources, options, pabot_args):
1982
2018
  grouped_suites = (
1983
2019
  _chunked_suite_names(shard_suites, pabot_args["processes"])
1984
2020
  if pabot_args["chunk"]
1985
- else _group_by_wait(_group_by_groups(ordered_suites))
2021
+ else _group_by_wait(_group_by_groups(shard_suites))
1986
2022
  )
1987
2023
  grouped_by_depend = _all_grouped_suites_by_depend(grouped_suites)
1988
2024
  return grouped_by_depend
@@ -2019,17 +2055,23 @@ def _verify_depends(suite_names):
2019
2055
  )
2020
2056
  )
2021
2057
  if suites_with_depends != suites_with_found_dependencies:
2022
- raise DataError("Invalid test configuration: Some test suites have dependencies (#DEPENDS) that cannot be found.")
2058
+ raise DataError(
2059
+ "Invalid test configuration: Some test suites have dependencies (#DEPENDS) that cannot be found."
2060
+ )
2023
2061
  suites_with_circular_dependencies = list(
2024
2062
  filter(lambda suite: suite.depends == suite.name, suites_with_depends)
2025
2063
  )
2026
2064
  if suites_with_circular_dependencies:
2027
- raise DataError("Invalid test configuration: Test suites cannot depend on themselves.")
2065
+ raise DataError(
2066
+ "Invalid test configuration: Test suites cannot depend on themselves."
2067
+ )
2028
2068
  grouped_suites = list(
2029
2069
  filter(lambda suite: isinstance(suite, GroupItem), suite_names)
2030
2070
  )
2031
2071
  if grouped_suites and suites_with_depends:
2032
- raise DataError("Invalid test configuration: Cannot use both #DEPENDS and grouped suites.")
2072
+ raise DataError(
2073
+ "Invalid test configuration: Cannot use both #DEPENDS and grouped suites."
2074
+ )
2033
2075
 
2034
2076
 
2035
2077
  def _group_by_depend(suite_names):
@@ -2057,7 +2099,9 @@ def _group_by_depend(suite_names):
2057
2099
  dependency_tree += [dependent_on_last_stage]
2058
2100
  flattened_dependency_tree = sum(dependency_tree, [])
2059
2101
  if len(flattened_dependency_tree) != len(runnable_suites):
2060
- raise DataError("Invalid test configuration: Circular or unmet dependencies detected between test suites. Please check your #DEPENDS definitions.")
2102
+ raise DataError(
2103
+ "Invalid test configuration: Circular or unmet dependencies detected between test suites. Please check your #DEPENDS definitions."
2104
+ )
2061
2105
  return dependency_tree
2062
2106
 
2063
2107
 
pabot/pabotlib.py CHANGED
@@ -43,7 +43,6 @@ PABOT_MIN_QUEUE_INDEX_EXECUTING_PARALLEL_VALUE = "pabot_min_queue_index_executin
43
43
 
44
44
 
45
45
  class _PabotLib(object):
46
-
47
46
  _TAGS_KEY = "tags"
48
47
 
49
48
  def __init__(self, resourcefile=None): # type: (Optional[str]) -> None
@@ -155,17 +154,19 @@ class _PabotLib(object):
155
154
  content[self._TAGS_KEY] = []
156
155
  self._values[name] = content
157
156
 
158
- def import_shared_library(self, name, args=None): # type: (str, Iterable[Any]|None) -> int
157
+ def import_shared_library(
158
+ self, name, args=None
159
+ ): # type: (str, Iterable[Any]|None) -> int
159
160
  if name in self._remote_libraries:
160
161
  return self._remote_libraries[name][0]
161
162
  if name in STDLIBS:
162
- import_name = 'robot.libraries.' + name
163
+ import_name = "robot.libraries." + name
163
164
  else:
164
165
  import_name = name
165
- imported = Importer('library').import_class_or_module(name_or_path=import_name, instantiate_with_args=args)
166
- server = RobotRemoteServer(
167
- imported, port=0, serve=False, allow_stop=True
166
+ imported = Importer("library").import_class_or_module(
167
+ name_or_path=import_name, instantiate_with_args=args
168
168
  )
169
+ server = RobotRemoteServer(imported, port=0, serve=False, allow_stop=True)
169
170
  server_thread = threading.Thread(target=server.serve)
170
171
  server_thread.start()
171
172
  time.sleep(1)
@@ -197,7 +198,6 @@ class _PabotLib(object):
197
198
 
198
199
 
199
200
  class PabotLib(_PabotLib):
200
-
201
201
  __version__ = 0.67
202
202
  ROBOT_LIBRARY_SCOPE = "GLOBAL"
203
203
  ROBOT_LISTENER_API_VERSION = 2
pabot/py3/messages.py CHANGED
@@ -34,7 +34,6 @@ def get(sock) -> str:
34
34
 
35
35
 
36
36
  class Message:
37
-
38
37
  _type: Optional[int]
39
38
  _length: int
40
39
  _data: Optional[str]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: robotframework-pabot
3
- Version: 4.0.0
3
+ Version: 4.0.5
4
4
  Summary: Parallel test runner for Robot Framework
5
5
  Home-page: https://pabot.org
6
6
  Download-URL: https://pypi.python.org/pypi/robotframework-pabot
@@ -0,0 +1,22 @@
1
+ pabot/SharedLibrary.py,sha256=mIipGs3ZhKYEakKprcbrMI4P_Un6qI8gE7086xpHaLY,2552
2
+ pabot/__init__.py,sha256=76eyqVhLodk4PGoMwMLwhb4C9eRfojlclZysIbG27lY,94
3
+ pabot/arguments.py,sha256=PQuJiRYwkfhzbQLat4rOflfAvDONuBAWhu1SOmVV858,7149
4
+ pabot/clientwrapper.py,sha256=yz7battGs0exysnDeLDWJuzpb2Q-qSjitwxZMO2TlJw,231
5
+ pabot/coordinatorwrapper.py,sha256=nQQ7IowD6c246y8y9nsx0HZbt8vS2XODhPVDjm-lyi0,195
6
+ pabot/execution_items.py,sha256=ktPoGx0yXK6Q_4A8CYW3OFCnCyZQnJb8cPYZULmwyAU,8320
7
+ pabot/pabot.py,sha256=QPzClIudUFWZIMRkWjiqGFFVDBXP-40bWUG5PbjJaX4,68695
8
+ pabot/pabotlib.py,sha256=FRZKaKy1ybyRkE-0SpaCsUWzxZAzNNU5dAywSm1QoPk,22324
9
+ pabot/result_merger.py,sha256=0LJN5AhgbaXW0OSCvygYvhxY3eOwYp5GntTjLASqsu8,8864
10
+ pabot/robotremoteserver.py,sha256=L3O2QRKSGSE4ux5M1ip5XJMaelqaxQWJxd9wLLdtpzM,22272
11
+ pabot/workerwrapper.py,sha256=BdELUVDs5BmEkdNBcYTlnP22Cj0tUpZEunYQMAKyKWU,185
12
+ pabot/py3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
+ pabot/py3/client.py,sha256=Od9L4vZ0sozMHq_W_ITQHBBt8kAej40DG58wnxmbHGM,1434
14
+ pabot/py3/coordinator.py,sha256=kBshCzA_1QX_f0WNk42QBJyDYSwSlNM-UEBxOReOj6E,2313
15
+ pabot/py3/messages.py,sha256=7mFr4_0x1JHm5sW8TvKq28Xs_JoeIGku2bX7AyO0kng,2557
16
+ pabot/py3/worker.py,sha256=5rfp4ZiW6gf8GRz6eC0-KUkfx847A91lVtRYpLAv2sg,1612
17
+ robotframework_pabot-4.0.5.dist-info/LICENSE.txt,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
18
+ robotframework_pabot-4.0.5.dist-info/METADATA,sha256=nHWgNo6EPBILtwWRehNCGf8kYu7nRN_VHSvpzZVzMDA,997
19
+ robotframework_pabot-4.0.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
20
+ robotframework_pabot-4.0.5.dist-info/entry_points.txt,sha256=JpAIFADTeFOQWdwmn56KpAil8V3-41ZC5ICXCYm3Ng0,43
21
+ robotframework_pabot-4.0.5.dist-info/top_level.txt,sha256=t3OwfEAsSxyxrhjy_GCJYHKbV_X6AIsgeLhYeHvObG4,6
22
+ robotframework_pabot-4.0.5.dist-info/RECORD,,
@@ -1,22 +0,0 @@
1
- pabot/SharedLibrary.py,sha256=lVYRIajUlMzlNT7bSylLYL248Rumh4dlg4OMl3M988E,2479
2
- pabot/__init__.py,sha256=rcrYtEQEaO-Ne2-f9csXGogs2eiVd4yRdxkBGmnItxw,93
3
- pabot/arguments.py,sha256=hgENptU63ftYktbQTNahDYC-50kJQYTRUM-yZ-6wln8,7046
4
- pabot/clientwrapper.py,sha256=yz7battGs0exysnDeLDWJuzpb2Q-qSjitwxZMO2TlJw,231
5
- pabot/coordinatorwrapper.py,sha256=nQQ7IowD6c246y8y9nsx0HZbt8vS2XODhPVDjm-lyi0,195
6
- pabot/execution_items.py,sha256=e7mjwAdgd-qGHjk9fR5QmIxqf6_c73rVbMGHVfU924I,8327
7
- pabot/pabot.py,sha256=XqWTq7SlXbcWjV_m3bk3Yq3D-xqTVZTGwkllIWKIjgg,67826
8
- pabot/pabotlib.py,sha256=XgiEtDJ8ZkoOcBAWokgzY5TlfYIL4hZN9Q3-Kj-5HhQ,22312
9
- pabot/result_merger.py,sha256=0LJN5AhgbaXW0OSCvygYvhxY3eOwYp5GntTjLASqsu8,8864
10
- pabot/robotremoteserver.py,sha256=L3O2QRKSGSE4ux5M1ip5XJMaelqaxQWJxd9wLLdtpzM,22272
11
- pabot/workerwrapper.py,sha256=BdELUVDs5BmEkdNBcYTlnP22Cj0tUpZEunYQMAKyKWU,185
12
- pabot/py3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- pabot/py3/client.py,sha256=Od9L4vZ0sozMHq_W_ITQHBBt8kAej40DG58wnxmbHGM,1434
14
- pabot/py3/coordinator.py,sha256=kBshCzA_1QX_f0WNk42QBJyDYSwSlNM-UEBxOReOj6E,2313
15
- pabot/py3/messages.py,sha256=7earx6jFDSaK7LofHHv1fWuPEw7uxYN48JT6NZMWEdk,2558
16
- pabot/py3/worker.py,sha256=5rfp4ZiW6gf8GRz6eC0-KUkfx847A91lVtRYpLAv2sg,1612
17
- robotframework_pabot-4.0.0.dist-info/LICENSE.txt,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
18
- robotframework_pabot-4.0.0.dist-info/METADATA,sha256=gmCpH_OKFwnSgV9hZU8TO_8CfUfJ92g7kWmlAEJfkxE,997
19
- robotframework_pabot-4.0.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
20
- robotframework_pabot-4.0.0.dist-info/entry_points.txt,sha256=JpAIFADTeFOQWdwmn56KpAil8V3-41ZC5ICXCYm3Ng0,43
21
- robotframework_pabot-4.0.0.dist-info/top_level.txt,sha256=t3OwfEAsSxyxrhjy_GCJYHKbV_X6AIsgeLhYeHvObG4,6
22
- robotframework_pabot-4.0.0.dist-info/RECORD,,