diff --git a/gcode_metadata/metadata.py b/gcode_metadata/metadata.py index 1b5c7b6..1d7f98e 100644 --- a/gcode_metadata/metadata.py +++ b/gcode_metadata/metadata.py @@ -31,6 +31,20 @@ r"((?P[0-9]+)m\s*)?" r"((?P[0-9]+)s)?") +PRINTERS = [ + 'MK4IS', 'MK4MMU3', 'MK4', 'MK3SMMU3', 'MK3MMU3', 'MK3SMMU2S', + 'MK3MMU2', 'MK3S', 'MK3', 'MK2.5SMMU2S', 'MK2.5MMU2', 'MK2.5S', + 'MK2.5', 'MINI', 'XL5', 'XL4', 'XL3', 'XL2', 'XL', 'iX', 'SL1', + 'SHELF', 'AzteQ', 'EXTRACTOR', 'HARVESTER' + ] + +PRINTERS.sort(key=len, reverse=True) + +MATERIALS = [ + 'PLA', 'PETG', 'ABS', 'ASA', 'FLEX', 'HIPS', 'EDGE', 'NGEN', 'PA', + 'PVA', 'PCTG', 'PP', 'PC', 'TPU', 'PEBA', 'CPE', 'PVB', 'PET' +] + class UnknownGcodeFileType(ValueError): # pylint: disable=missing-class-docstring @@ -99,6 +113,39 @@ def same_or_nothing(value_list): return value_list[0] +def extract_data(input_string): + """Extracts metadata from the filename + >>> extract_data("Paladin_PLA,PLA_MK3SMMU3_3h22m.gcode")['printer'] + 'MK3SMMU3' + >>> extract_data("sh_bn_0.6n_0.32mm_PETG_MK4_8h55m.gcode")['material'] + 'PETG' + >>> extract_data("PLA_0.6n 0.32mm_MK3S_1d1h42m")['printer'] + 'MK3S' + >>> extract_data("42.gcode")['printer'] is None + True + >>> extract_data("Tisk tohoto souboru bude trvat 1d18h15m")['time'] + '1d18h15m' + """ + + patterns = [ + (r"(.*?)(?=[0-9.]+n|mm|{mat_pat}|{prt_pat}|\d+[dhm]+)", 'name'), + (r"([0-9.]+)n", 'nozzle'), + (r"([0-9.]+)mm", 'height'), + (r"(?:" + "|".join(MATERIALS) + r")", 'material'), + (r"(?:" + "|".join(PRINTERS) + r")", 'printer'), + (r"(\d+[dhm]+(?:\d*[dhm]+)*)(?!\w)", 'time') + ] + + data = {} + for pattern, key in patterns: + pattern = pattern.format(mat_pat="|".join(MATERIALS), + prt_pat="|".join(PRINTERS)) + match = re.search(pattern, input_string) + data[key] = match.group() if match else None + + return data + + class MetaData: """Base MetaData class""" @@ -363,10 +410,6 @@ def set_attr(self, name, value): "normal_change_in": "normal_change_in_present" } - FDM_FILENAME_PAT = re.compile( - r"^(?P.*?)_(?P[0-9.]+)mm_(?P[A-Za-z]+)_" - r"(?P[A-Za-z0-9]+)_(?P