Skip to content

Commit d28649d

Browse files
authored
Merge pull request #16 from EmmasBox/dev
Dev
2 parents 5df28ae + dc04261 commit d28649d

File tree

3 files changed

+71
-42
lines changed

3 files changed

+71
-42
lines changed

record_definition.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#This module contains the classes used to define the data structure of the IRRBU00 records
2+
3+
from dataclasses import dataclass
4+
from enum import Enum
5+
6+
class Record:
7+
"""Defines a record type that can be parsed, i.e. Group basic data record, 0100"""
8+
def __init__(self,name: str,identifier: str, fields: list):
9+
self.name = name
10+
self.identifier = identifier
11+
self.fields = fields
12+
13+
class DataType(Enum):
14+
Char = 1
15+
Int = 2
16+
Date = 3
17+
Time = 4
18+
19+
@dataclass
20+
class Field:
21+
"""The field class is used when defining a record type, it specifies when a field starts and ends"""
22+
name: str
23+
data_type: DataType
24+
start: int
25+
end: int
26+
27+
def get_range(self):
28+
return (self.start, self.end)

records.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,28 @@
1-
import ztarfruit as zfruit
1+
#This module defines all of the records and fields that can exist in IRRDBU00 output
2+
3+
import record_definition as definition
24

35
#0100
46
group_basic_data_record_fields = [
5-
zfruit.Field(name="GPBD_NAME",data_type=zfruit.DataType.Char,start=6,end=13),
6-
zfruit.Field(name="GPBD_SUPGRP_ID",data_type=zfruit.DataType.Char,start=15,end=22),
7-
zfruit.Field(name="GPBD_CREATE_DATE",data_type=zfruit.DataType.Char,start=24,end=33),
8-
zfruit.Field(name="GPBD_OWNER_ID",data_type=zfruit.DataType.Char,start=35,end=42),
9-
zfruit.Field(name="GPBD_UACC",data_type=zfruit.DataType.Char,start=44,end=51),
10-
zfruit.Field(name="GPBD_NOTERMUACC",data_type=zfruit.DataType.Char,start=53,end=56),
11-
zfruit.Field(name="GPBD_INSTALL_DATA",data_type=zfruit.DataType.Char,start=58,end=312),
12-
zfruit.Field(name="GPBD_MODEL",data_type=zfruit.DataType.Char,start=314,end=357),
13-
zfruit.Field(name="GPBD_UNIVERSAL",data_type=zfruit.DataType.Char,start=359,end=362)
7+
definition.Field(name="GPBD_NAME",data_type=DataType.Char,start=6,end=13),
8+
definition.Field(name="GPBD_SUPGRP_ID",data_type=DataType.Char,start=15,end=22),
9+
definition.Field(name="GPBD_CREATE_DATE",data_type=DataType.Char,start=24,end=33),
10+
definition.Field(name="GPBD_OWNER_ID",data_type=DataType.Char,start=35,end=42),
11+
definition.Field(name="GPBD_UACC",data_type=DataType.Char,start=44,end=51),
12+
definition.Field(name="GPBD_NOTERMUACC",data_type=DataType.Char,start=53,end=56),
13+
definition.Field(name="GPBD_INSTALL_DATA",data_type=DataType.Char,start=58,end=312),
14+
definition.Field(name="GPBD_MODEL",data_type=DataType.Char,start=314,end=357),
15+
definition.Field(name="GPBD_UNIVERSAL",data_type=DataType.Char,start=359,end=362)
1416
]
1517

1618
#0101
1719
group_subgroups_data_record_fields = [
18-
zfruit.Field(name="GPSGRP_NAME",data_type=zfruit.DataType.Char,start=6,end=13),
19-
zfruit.Field(name="GPSGRP_SUBGRP_ID",data_type=zfruit.DataType.Char,start=15,end=22),
20+
definition.Field(name="GPSGRP_NAME",data_type=DataType.Char,start=6,end=13),
21+
definition.Field(name="GPSGRP_SUBGRP_ID",data_type=DataType.Char,start=15,end=22),
2022
]
2123

22-
records = [
23-
zfruit.Record(name="Group basic data record",identifier="0100",fields=group_basic_data_record_fields),
24-
zfruit.Record(name="Group subgroups record",identifier="0101",fields=group_subgroups_data_record_fields)
24+
#Records
25+
database_records = [
26+
definition.Record(name="Group basic data record",identifier="0100",fields=group_basic_data_record_fields),
27+
definition.Record(name="Group subgroups record",identifier="0101",fields=group_subgroups_data_record_fields)
2528
]

ztarfruit.py

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
#Zstarfruit for RACF
1+
#Ztarfruit for RACF
22
#Dependencies: Python >=3.12.x and >=ZOAU 1.3.x
33
#Utility to parse output from IRRDBU00 and offer the data through an API
44

55
from zoautil_py import datasets
6-
from dataclasses import dataclass
76
from datetime import datetime
87
import os
98
import json
109
import tomllib
1110
import re
1211
import argparse
13-
import sqlalchemy
14-
from enum import Enum
12+
import sqlalchemy
13+
from records import database_records
1514

1615
parser = argparse.ArgumentParser(
1716
prog='Ztarfruit for RACF',
@@ -22,7 +21,7 @@
2221

2322
#Flags and arguments to specify in the command line
2423
parser.add_argument('-i', '--input')
25-
parser.add_argument('-r', '--reset')
24+
parser.add_argument('-r', '--reset', action='store_true')
2625
parser.add_argument('-o', '--obfuscate', action='store_true')
2726

2827
args = parser.parse_args()
@@ -40,27 +39,26 @@
4039

4140
#Input dataset to parse
4241
input_dataset = args.input or data_settings["input_dataset"]
42+
43+
#This function loads in the IRRDBU00 output, internal function please ignore
44+
def load_input():
45+
if datasets.exists(input_dataset):
46+
print("Target dataset exists")
47+
output = datasets.read(input_dataset)
48+
return output
49+
else:
50+
return ""
51+
52+
if input_dataset != "":
53+
dataset_contents = load_input()
54+
input_path = "./temp.txt"
4355

44-
class Record:
45-
"""Defines a record type that can be parsed, i.e. Group basic data record, 0100"""
46-
def __init__(self,name: str,identifier: str, fields: list):
47-
self.name = name
48-
self.identifier = identifier
49-
self.fields = fields
56+
#remove input data in case the utility has been ran before
57+
if os.path.exists(input_path):
58+
os.remove(input_path)
5059

51-
class DataType(Enum):
52-
Char = 1
53-
Int = 2
54-
Date = 3
55-
Time = 4
56-
57-
@dataclass
58-
class Field:
59-
"""The field class is used when defining a record type, it specifies when a field starts and ends"""
60-
name: str
61-
data_type: DataType
62-
start: int
63-
end: int
64-
65-
def get_range(self):
66-
return (self.start, self.end)
60+
rInput = open(input_path, "a")
61+
rInput.write(dataset_contents)
62+
rInput.close()
63+
print(f"Temp file size: {os.path.getsize(input_path)} bytes")
64+

0 commit comments

Comments
 (0)