py-phias/aore/updater/aoxmltableentry.py

45 lines
1.2 KiB
Python

import re
from enum import Enum
class AoXmlTableEntry:
class OperationType(Enum):
update = 1
delete = 0
create = 2
def __str__(self):
return self._name_
@classmethod
def from_rar(cls, file_name, rar_factory=None, rar_info=None):
# for rar
return AoXmlTableEntry(file_name, lambda: rar_factory.open(rar_info))
@classmethod
def from_dir(cls, file_name, path):
# for extracted into folder
return AoXmlTableEntry(file_name, lambda: open(path + file_name, 'rb'))
def __init__(self, file_name, lamda_open):
matchings = re.search('^(AS_)(DEL_)*([A-Z]+)', file_name)
self.table_name = matchings.group(3)
self.operation_type = AoXmlTableEntry.OperationType(matchings.group(2) is None)
self.lamda_open = lamda_open
self.file_descriptor = None
def open(self):
if not self.file_descriptor:
self.file_descriptor = self.lamda_open()
return self.file_descriptor
def close(self):
self.file_descriptor.close()
def __str__(self):
return "Entry for {} table {}".format(self.operation_type, self.table_name)