jcl-parser 2.2.1__tar.gz → 2.2.2__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.
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/PKG-INFO +1 -1
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/PKG-INFO +1 -1
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/__init__.py +1 -1
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/dataset_lifecycle.py +25 -4
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/pyproject.toml +1 -1
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/LICENSE +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/README.md +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/SOURCES.txt +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/dependency_links.txt +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/entry_points.txt +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/requires.txt +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jcl_parser.egg-info/top_level.txt +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/__main__.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_include_origins.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_job_builder.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_model_factories.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_post_parse.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_source_scanner.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/_statement_parser.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/builtin_procs.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/checks.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/cli.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/condition_parser.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/continuation_handler.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/errors.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/explosion.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/include_loader.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/jcl_file_type.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/jes_statements.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lineage.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/__init__.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/base.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/config.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/rules.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/runner.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/lint/suppress.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/metrics.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/model.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/parameter_ast.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/parameter_validators.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/parser.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/plugins/__init__.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/plugins/base.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/proc_loader.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/profiling.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/__init__.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/_control.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/_invoked.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/adrdssu.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/base.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/binder.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/bpxbatch.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/compilers.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/db2_batch.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/dfsrrc00.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/dsnutilb.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/ftp.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/icetool.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/idcams.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iebcompr.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iebdg.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iebgener.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iebptpch.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iebupdte.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iefbr14.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iehinitt.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iehlist.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/iehprogm.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/ikjeft01.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/irxjcl.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/registry.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/program_profiles/sort.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/py.typed +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/rc_analysis.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/serialization.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/sql_detector.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/system_symbols.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/utils.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/jclparser/validators.py +0 -0
- {jcl_parser-2.2.1 → jcl_parser-2.2.2}/setup.cfg +0 -0
|
@@ -20,7 +20,7 @@ application, for example::
|
|
|
20
20
|
import logging as _logging
|
|
21
21
|
|
|
22
22
|
# Package metadata
|
|
23
|
-
__version__ = "2.2.
|
|
23
|
+
__version__ = "2.2.2" # x-release-please-version
|
|
24
24
|
__author__ = "JCL Parser Team"
|
|
25
25
|
__description__ = "Parse IBM JCL scripts into Python objects"
|
|
26
26
|
|
|
@@ -63,6 +63,11 @@ class DatasetEvent:
|
|
|
63
63
|
disp_abnormal: Abnormal termination disposition (same set as normal),
|
|
64
64
|
or ``""`` if omitted.
|
|
65
65
|
line_number: Source line number of the DD statement.
|
|
66
|
+
concatenation_member: ``0`` for a named DD; for an unnamed
|
|
67
|
+
concatenation member, its position in the concatenation (the
|
|
68
|
+
named DD is member 1, so the first unnamed card is member 2).
|
|
69
|
+
``dd_name`` is then the name of the DD the concatenation
|
|
70
|
+
belongs to.
|
|
66
71
|
"""
|
|
67
72
|
|
|
68
73
|
step_name: str
|
|
@@ -72,6 +77,14 @@ class DatasetEvent:
|
|
|
72
77
|
disp_normal: str = ""
|
|
73
78
|
disp_abnormal: str = ""
|
|
74
79
|
line_number: int = 0
|
|
80
|
+
concatenation_member: int = 0
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def dd_label(self) -> str:
|
|
84
|
+
"""The DD as messages name it: ``IN``, or ``IN, concatenation member 2``."""
|
|
85
|
+
if self.concatenation_member:
|
|
86
|
+
return f"{self.dd_name}, concatenation member {self.concatenation_member}"
|
|
87
|
+
return self.dd_name
|
|
75
88
|
|
|
76
89
|
|
|
77
90
|
# ---------------------------------------------------------------------------
|
|
@@ -206,7 +219,14 @@ def _step_events(
|
|
|
206
219
|
"""Record *step*'s events into *lifecycle*; ``None`` when it has none."""
|
|
207
220
|
step_name = step.name or ""
|
|
208
221
|
step_events: list[_Event] = []
|
|
222
|
+
# An unnamed DD card continues the concatenation of the named DD before
|
|
223
|
+
# it, so it is reported under that DD's name (as ``Step.steplib`` does).
|
|
224
|
+
owner, member = "", 0
|
|
209
225
|
for dd in _dataset_dds(step):
|
|
226
|
+
if dd.name:
|
|
227
|
+
owner, member = dd.name, 0
|
|
228
|
+
elif owner:
|
|
229
|
+
member = member + 1 if member else 2
|
|
210
230
|
if not dd.dataset_name:
|
|
211
231
|
continue
|
|
212
232
|
# A backward reference names the dataset of the DD it points at;
|
|
@@ -222,12 +242,13 @@ def _step_events(
|
|
|
222
242
|
|
|
223
243
|
event = DatasetEvent(
|
|
224
244
|
step_name=step.name or "(unnamed)",
|
|
225
|
-
dd_name=dd.name or
|
|
245
|
+
dd_name=dd.name or owner,
|
|
226
246
|
action=_action_from_disp(status),
|
|
227
247
|
disp_status=status,
|
|
228
248
|
disp_normal=normal,
|
|
229
249
|
disp_abnormal=abnormal,
|
|
230
250
|
line_number=dd.line_number,
|
|
251
|
+
concatenation_member=0 if dd.name else member,
|
|
231
252
|
)
|
|
232
253
|
events = lifecycle.setdefault(dsn_key, [])
|
|
233
254
|
step_events.append((dsn_key, len(events), event))
|
|
@@ -460,7 +481,7 @@ class _LifecycleChecker:
|
|
|
460
481
|
dsn,
|
|
461
482
|
pos,
|
|
462
483
|
f"Dataset '{dsn}' allocated with DISP=NEW,CATLG in step "
|
|
463
|
-
f"'{evt.step_name}' (DD {evt.
|
|
484
|
+
f"'{evt.step_name}' (DD {evt.dd_label}) but was already "
|
|
464
485
|
f"cataloged in step '{cataloged_by.step_name}' without "
|
|
465
486
|
f"an intervening DELETE or UNCATLG",
|
|
466
487
|
evt,
|
|
@@ -492,7 +513,7 @@ class _LifecycleChecker:
|
|
|
492
513
|
dsn,
|
|
493
514
|
pos,
|
|
494
515
|
f"Dataset '{dsn}' opened in step '{evt.step_name}' "
|
|
495
|
-
f"(DD {evt.
|
|
516
|
+
f"(DD {evt.dd_label}) after being uncataloged in step "
|
|
496
517
|
f"'{uncataloged_by.step_name}'",
|
|
497
518
|
evt,
|
|
498
519
|
)
|
|
@@ -506,7 +527,7 @@ class _LifecycleChecker:
|
|
|
506
527
|
dsn,
|
|
507
528
|
pos,
|
|
508
529
|
f"Dataset '{dsn}' opened {disp_label} in step "
|
|
509
|
-
f"'{evt.step_name}' (DD {evt.
|
|
530
|
+
f"'{evt.step_name}' (DD {evt.dd_label}) before it "
|
|
510
531
|
f"is allocated in a later step — verify the dataset "
|
|
511
532
|
f"exists in the catalog",
|
|
512
533
|
evt,
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "jcl-parser"
|
|
7
|
-
version = "2.2.
|
|
7
|
+
version = "2.2.2"
|
|
8
8
|
description = "Parse IBM JCL (Job Control Language) scripts into Python objects"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "Samuel Dion", email = "sam94dion@gmail.com"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|