From d3a561692cf5c7ed1d9cfe4cd1e0033500a73456 Mon Sep 17 00:00:00 2001 From: Jeff MacKinnon Date: Wed, 1 Jan 2025 14:05:51 -0400 Subject: [PATCH] Added a single label LaTeX creation --- example_notebook.ipynb | 28 +++-- jepl/jepl_templates.py | 84 ++++++++++++++ jepl/templates/static/logo.png | Bin 0 -> 16285 bytes jepl/templates/template-label-ArcFlash.tex | 127 +++++++++++++++++++++ 4 files changed, 231 insertions(+), 8 deletions(-) create mode 100644 jepl/jepl_templates.py create mode 100644 jepl/templates/static/logo.png create mode 100644 jepl/templates/template-label-ArcFlash.tex diff --git a/example_notebook.ipynb b/example_notebook.ipynb index b9c8d23..fa079c4 100644 --- a/example_notebook.ipynb +++ b/example_notebook.ipynb @@ -775,16 +775,16 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'00'" + "'0'" ] }, - "execution_count": 3, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -797,9 +797,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "'00'" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "jmk.gloveClass(600,DC=True)" ] @@ -815,13 +826,14 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from jepl.jepl_templates import *\n", - "#af_label(equipment,working_distance,incident_energy,af_boundary,energy_level,voltage,limited_approach,restricted_approach, glove_class,author=\"Jeff MacKinnon\",warning=\"warning\",project=\"Arc Flash Warning Label\",project_num=\"####\")\n", - "af_label(\"equipnum\",\"3 ft\",3,\"36 in\",\"B\",\"480 Vac\",\"10 ft\",\"1 ft\", \"00\",author=\"Jeff MacKinnon\",warning=\"warning\",project=\"Arc Flash Warning Label\",project_num=\"####\")" + "#af_label(equipment,working_distance,incident_energy,af_boundary,energy_level,voltage, author=\"Jeff MacKinnon\",warning=\"warning\",project=\"Arc Flash Warning Label\",project_num=\"####\",DC=False,fixedElectrode = True, SI=True,project_year=2015)\n", + "af_label(\"equipnum\",\"3 ft\",3,\"36 in\",\"B\",480,author=\"Jeff MacKinnon\",warning=\"warning\",project=\"Arc Flash Warning Label\",test=True)\n", + "\n" ] }, { diff --git a/jepl/jepl_templates.py b/jepl/jepl_templates.py new file mode 100644 index 0000000..3b8a831 --- /dev/null +++ b/jepl/jepl_templates.py @@ -0,0 +1,84 @@ +''' +JMK Engineering Inc. Python Library for design and such. +by: Jeff MacKinnon + +email: jeff@jmkengineering.com + +Template Generation + +These functions are used to create labels, reports, etc. + +''' +from .jepl_safety import * + +def af_label(equipment,working_distance,incident_energy,af_boundary,energy_level,voltage, author="Jeff MacKinnon",warning="warning",project="Arc Flash Warning Label",project_num="2500",DC=False,fixedElectrode = True, SI=True,project_year=2015,test=False): + + ''' + This function is for printing a single label with all the information in the function above. Include the units (in, Vac, Vdc, ft, m, mm, etc.) in the values. All values are strings. + ''' + + from datetime import date + date = date.today() + revdate = date.strftime("%m/%d/%Y") + + if DC == True: + voltage_units = " Vdc" + else: + voltage_units = " Vac" + + label_voltage = str(voltage) + voltage_units + + + + glove_class = gloveClass(voltage,DC=DC) + limited_approach = limitedApproach(voltage,fixed=fixedElectrode,DC=DC,unitsSI=SI,year=project_year) + restricted_approach = restrictedApproach(voltage,DC=DC,unitsSI=SI,year=project_year) + + + if warning =="warning": + warning_colour = '242,85,31' + warning_text = '\warning WARNING' + elif warning == "danger": + warning_colour = '242,85,31' # This colour needs to change + warning_text = '\warning DANGER' + else: + warning_colour = '255,255,255' # This colour needs to change + warning_text = '' + + from jinja2 import Environment, FileSystemLoader + + environment = Environment( block_start_string = '\BLOCK{', + block_end_string = '}', + variable_start_string = '\VAR((', + variable_end_string = '))', + comment_start_string = '\#{', + comment_end_string = '}', + line_comment_prefix = '%#', + loader=FileSystemLoader("jepl/templates/") + ) + template = environment.get_template("template-label-ArcFlash.tex") + + if test == True: + filename = "test"+str(date) + "-"+project_num+"-label-ArcFlash.tex" + else: + filename = str(date) + "-"+project_num+"-label-ArcFlash.tex" + content = template.render( + DATE = revdate, + EQUIPMENT = equipment, + WORKING_DISTANCE = working_distance, + INCIDENT_ENERGY = incident_energy, + AF_BOUNDARY = af_boundary, + ENERGY_LEVEL = energy_level, + VOLTAGE = label_voltage, + LIMITED_APPROACH = limited_approach, + RESTRICTED_APPROACH = restricted_approach, + GLOVE_CLASS = glove_class, + AUTHOR = author, + TITLE = project, + WARNING_COLOUR = warning_colour, + WARNING_TEXT = warning_text, + + + ) + with open(filename, mode="w", encoding="utf-8") as message: + message.write(content) diff --git a/jepl/templates/static/logo.png b/jepl/templates/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6a71a0c258e5f2e320abe5a6624e02020318312a GIT binary patch literal 16285 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