From d85414701544a8abb0daae45603ddcfea4b747a1 Mon Sep 17 00:00:00 2001 From: egeakman Date: Wed, 30 Mar 2022 21:57:24 +0300 Subject: [PATCH] Ready for a new release Added a feature that reads the given gcode file and returns the duration of the print and the material used in metric units. Fixed a bug which makes the program execute the md5 function before creating the byte version of the original gcode. --- gcode2zaxe/convert.py | 54 ++++++++++++++++++++++++++++++------------- setup.py | 11 ++++----- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/gcode2zaxe/convert.py b/gcode2zaxe/convert.py index 2b2c101..0646470 100644 --- a/gcode2zaxe/convert.py +++ b/gcode2zaxe/convert.py @@ -3,6 +3,7 @@ import zipfile import hashlib import tempfile +import datetime from argparse import ArgumentParser TMP = tempfile.gettempdir() @@ -63,29 +64,50 @@ def md5(): return hash_md5.hexdigest() +def read_gcode(): + gcode_info = {} + with open(args.gcode, "r") as f: + for line in f.readlines(): + if line.startswith(";TIME:"): + time = int(line.split(";TIME:")[1].strip()) + gcode_info["time"] = str(datetime.timedelta(seconds=time)) + + with open(args.gcode, "r") as f: + for line in f.readlines(): + if line.startswith(";Filament used:"): + filament_used = round( + float(line.split(";Filament used:")[1].strip().replace("m", "")), 2 + ) + gcode_info["filament_used"] = f"{str(filament_used)}m" + + return gcode_info + + +def make_info(): + return { + "material": args.filament, + "nozzle_diameter": args.nozzle_diameter, + "filament_used": read_gcode()["filament_used"], + "model": args.model, + "checksum": md5(), + "name": args.name, + "duration": read_gcode()["time"], + "extruder_temperature": 220, + "bed_temperature": 60, + "version": "1.0.4", + } + + def main(): - with open(os.path.join(TMP, "info.json"), "w") as f: - f.write(json.dumps(info)) encoded = convert_to_bytes(args.gcode) with open(os.path.join(TMP, "o.gcode"), "wb") as f: f.write(encoded) + with open(os.path.join(TMP, "info.json"), "w") as f: + f.write(json.dumps(make_info())) + open(os.path.join(TMP, "snapshot.png"), "w").close() create_zaxe() - - -info = { - "material": args.filament, - "nozzle_diameter": args.nozzle_diameter, - "filament_used": 1000.0, - "model": args.model, - "checksum": md5(), - "name": args.name, - "duration": "00:20:00", - "extruder_temperature": 220, - "bed_temperature": 60, - "version": "1.0.4", -} diff --git a/setup.py b/setup.py index 596b570..145fce2 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,4 @@ +import contextlib import json import urllib.request from setuptools import setup, find_packages @@ -5,14 +6,12 @@ def latest_version(package_name): url = f"https://pypi.python.org/pypi/{package_name}/json" - try: + with contextlib.suppress(Exception): response = urllib.request.urlopen(urllib.request.Request(url), timeout=1) data = json.load(response) versions = data["releases"].keys() versions = sorted(versions) - return ">={}".format(versions[-1]) - except Exception: - pass + return f">={versions[-1]}" return "" @@ -27,9 +26,9 @@ def latest_version(package_name): description="Gcode to Zaxe Converter | executable: g2z", long_description=long_description, long_description_content_type="text/markdown", - version="2022.3.15-2", + version="2022.3.30", license="AGPLv3", - download_url="https://github.com/egeakman/gcode2zaxe/archive/2022.3.15-2.tar.gz", + download_url="https://github.com/egeakman/gcode2zaxe/archive/2022.3.30.tar.gz", packages=find_packages(where=".", exclude=["tests"]), python_requires=">=3.5", entry_points={