Files
SaveWizard/util.py
Lev Rusanov 8932327b5c Update utils
* Removed try-catch in generate_md5

Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
2023-10-21 21:22:10 +07:00

114 lines
3.6 KiB
Python

#!/usr/bin/python3
# -*- coding: utf-8 -*-
from os.path import isfile
from re import search, match
# from re import search, match, sub
from PyQt5.QtWidgets import QMessageBox
from hashlib import md5
from statics import hash_chunk_size
class CustomFuncs:
# Custom functions
def __init__(self):
self.lines = []
def set_lines(self, new_lines):
self.lines = new_lines
def get_lines(self, index=None):
if index is not None:
return self.lines[index]
return self.lines
@staticmethod
def generate_md5(fn):
if not isfile(fn):
return False
hash_md5 = md5()
with open(fn, "rb") as f:
for chunk in iter(lambda: f.read(hash_chunk_size), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
# Stock functions
def search_line(self, term, start=0, cancel=r"this_string_must_not_exist"):
if search(term, self.lines[start]):
return start
start += 1
while start <= len(self.lines) - 1:
if search(term, self.lines[start]):
return start
if search(cancel, self.lines[start]):
return None
start += 1
return None
def search_line_in_unit(self, term, unit):
line = self.search_line(" : " + unit + " {")
return self.search_line(term, start=line, cancel="}")
def search_all_lines(self, term):
matches = []
line = 0
while self.search_line(term, start=line + 1):
line = self.search_line(term, start=line + 1)
matches.append(line)
if matches is None:
return None
return matches
def get_value(self, line):
return search(r": (.+)$", self.lines[line]).group(1)
def set_value(self, line, value):
name = match(r"(.+):", self.lines[line]).group(1)
self.lines[line] = name + ": " + value
# def get_unit_name(self, line):
# return search(r" : (.+) {$", self.lines[line]).group(1)
def get_array_length(self, line):
return int(search(r": ([0-9]+)$", self.lines[line]).group(1))
# def get_array_value_by_index(self, line, index):
# return search(r": (.+)$", self.lines[line + index + 1]).group(1)
# def get_array_index_by_value(self, line, value):
# count = 0
# for i in range(self.get_array_length(line)):
# if self.get_value(line + count + 1) == value:
# return count
# count += 1
# return None
def get_array_items(self, line):
items = []
for i in range(self.get_array_length(line)):
items.append(search(r": (.+)$", self.lines[line + i + 1]).group(1))
if items is None:
return None
return items
def add_array_value(self, line, value):
name = match(r"(.+):", self.lines[line]).group(1)
count = self.get_array_length(line)
self.lines[line] = name + ": " + str(count + 1)
self.lines.insert(line + count + 1, name + "[" + str(count) + "]: " + value)
# def remove_array_value(self, line, value):
# name = match(r"(.+):", self.lines[line]).group(1)
# del self.lines[line + 1 + self.get_array_index_by_value(line, value)]
# count = self.get_array_length(line)
# self.lines[line] = name + ": " + str(count - 1)
# for i in range(count):
# self.lines[line + i + 1] = sub(r"\[[0-9]+]", "[" + str(i) + "]", lines[line + i + 1])
# def change_array_value(self, line, index, value):
# line += index + 1
# self.set_value(line, value)
util = CustomFuncs()