diff --git a/benchtopdevices/benchtopdevices/__init__.py b/benchtopdevices/benchtopdevices/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/benchtopdevices/benchtopdevices/asgi.py b/benchtopdevices/benchtopdevices/asgi.py deleted file mode 100644 index 4c792cb..0000000 --- a/benchtopdevices/benchtopdevices/asgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -ASGI config for benchtopdevices project. - -It exposes the ASGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ -""" - -import os - -from django.core.asgi import get_asgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benchtopdevices.settings') - -application = get_asgi_application() diff --git a/benchtopdevices/benchtopdevices/settings.py b/benchtopdevices/benchtopdevices/settings.py deleted file mode 100644 index e588721..0000000 --- a/benchtopdevices/benchtopdevices/settings.py +++ /dev/null @@ -1,134 +0,0 @@ -""" -Django settings for benchtopdevices project. - -Generated by 'django-admin startproject' using Django 4.2.3. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/4.2/ref/settings/ -""" - -from pathlib import Path - -# Build paths inside the project like this: BASE_DIR / 'subdir'. -BASE_DIR = Path(__file__).resolve().parent.parent - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-=$1$b*-dgj6+@&-=yl*xsw@if=t%em(u_-i_^p4+-k0^nsg=--' - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True - -ALLOWED_HOSTS = [] - - -# Application definition - -INSTALLED_APPS = [ - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'debug_toolbar', - 'sheets', - 'rest_framework', -] - -MIDDLEWARE = [ - 'debug_toolbar.middleware.DebugToolbarMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - -] - -ROOT_URLCONF = 'benchtopdevices.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'benchtopdevices.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/4.2/ref/settings/#databases - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': BASE_DIR / 'db.sqlite3', - } -} - - -# Password validation -# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators - -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - - -# Internationalization -# https://docs.djangoproject.com/en/4.2/topics/i18n/ - -LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'America/New_York' - -USE_I18N = True - -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/4.2/howto/static-files/ - -STATIC_URL = 'static/' - -# Default primary key field type -# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field - -DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' - -INTERNAL_IPS = [ - # ... - "127.0.0.1", - # ... -] diff --git a/benchtopdevices/benchtopdevices/urls.py b/benchtopdevices/benchtopdevices/urls.py deleted file mode 100644 index ee7396a..0000000 --- a/benchtopdevices/benchtopdevices/urls.py +++ /dev/null @@ -1,24 +0,0 @@ -""" -URL configuration for benchtopdevices project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/4.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.urls import path, include - -urlpatterns = [ - path('', include('sheets.urls')), - path('admin/', admin.site.urls), - path("__debug__/", include("debug_toolbar.urls")), -] diff --git a/benchtopdevices/benchtopdevices/wsgi.py b/benchtopdevices/benchtopdevices/wsgi.py deleted file mode 100644 index efbb0b8..0000000 --- a/benchtopdevices/benchtopdevices/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for benchtopdevices project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benchtopdevices.settings') - -application = get_wsgi_application() diff --git a/benchtopdevices/manage.py b/benchtopdevices/manage.py deleted file mode 100755 index 978849e..0000000 --- a/benchtopdevices/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -"""Django's command-line utility for administrative tasks.""" -import os -import sys - - -def main(): - """Run administrative tasks.""" - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'benchtopdevices.settings') - try: - from django.core.management import execute_from_command_line - except ImportError as exc: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) from exc - execute_from_command_line(sys.argv) - - -if __name__ == '__main__': - main() diff --git a/benchtopdevices/requirements.txt b/benchtopdevices/requirements.txt deleted file mode 100644 index d78f2a6..0000000 --- a/benchtopdevices/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -django -psycopg2-binary -django-debug-toolbar -django-rest-framework \ No newline at end of file diff --git a/benchtopdevices/sheets/__init__.py b/benchtopdevices/sheets/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/benchtopdevices/sheets/admin.py b/benchtopdevices/sheets/admin.py deleted file mode 100644 index a570445..0000000 --- a/benchtopdevices/sheets/admin.py +++ /dev/null @@ -1,10 +0,0 @@ -from django.contrib import admin -from .models import ( - Sheet -) - - -class SheetAdmin(admin.ModelAdmin): - pass - -admin.site.register(Sheet, SheetAdmin) diff --git a/benchtopdevices/sheets/apps.py b/benchtopdevices/sheets/apps.py deleted file mode 100644 index 757cee8..0000000 --- a/benchtopdevices/sheets/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class SheetsConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'sheets' diff --git a/benchtopdevices/sheets/forms.py b/benchtopdevices/sheets/forms.py deleted file mode 100644 index 8aa2ce7..0000000 --- a/benchtopdevices/sheets/forms.py +++ /dev/null @@ -1,67 +0,0 @@ -from django import forms -from django.forms.widgets import ClearableFileInput -from django.db import models -from django.utils.translation import gettext_lazy as _ - -from .models import Sheet - - -class SheetForm(forms.ModelForm): - class Meta: - model = Sheet - fields = [ - "customer_name", - "onsite_cal", - "control_doc", - "technician", - - "instrument_model", - "instrument_calibration_date", - "instrument_calibration_due_date", - "serial_number", - "channel", - "transducer_model", - "transducer_span", - - "calibration_serial", - "calibration_model", - "calibration_date", - "calibration_due_date", - "calibration_cert_id", - - "accuracy", - "barometric_pressure", - "temperature", - "humidity", - "report_type", - "transducer_type", - - "as_found", - "as_left", - "both", - ] - - widgets = { - "accuracy": forms.NumberInput(attrs={'step': 0.01}), - "barometric_pressure": forms.NumberInput(attrs={'step': 0.01, 'max': 1100, 'min': 800}), - "temperature": forms.NumberInput(attrs={'step': 0.01, 'max': 1000.0, 'min': -459.67}), - "humidity": forms.NumberInput(attrs={'step': 0.01, 'max': 100.0, 'min': 0.0}), - "calibration_date": forms.SelectDateWidget(years=range(2020, 2030)), - "calibration_due_date": forms.SelectDateWidget(years=range(2020, 2030)), - "instrument_calibration_date": forms.SelectDateWidget(years=range(2020, 2030)), - "instrument_calibration_due_date": forms.SelectDateWidget(years=range(2020, 2030)), - } - - def __init__(self, *args, **kwargs): - super(SheetForm, self).__init__(*args, **kwargs) - - for name, field in self.fields.items(): - # add v-model to each model field - if isinstance(field, forms.fields.FileField): - field.widget.attrs.update( - { - 'v-on:change': f"change_{name}", - 'v-if': f"show_{name}" - }) - else: - field.widget.attrs.update({'v-model': name}) diff --git a/benchtopdevices/sheets/migrations/0001_initial.py b/benchtopdevices/sheets/migrations/0001_initial.py deleted file mode 100644 index b4d50bf..0000000 --- a/benchtopdevices/sheets/migrations/0001_initial.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 4.2.5 on 2023-09-18 17:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Sheet', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('customer_name', models.CharField(max_length=256)), - ('customer_address', models.CharField(max_length=256)), - ('serial_number', models.CharField(max_length=256)), - ('accuracy', models.FloatField()), - ('barometric_pressure', models.FloatField()), - ('temperature', models.FloatField()), - ('humidity', models.FloatField()), - ('report_type', models.CharField(choices=[('TV', 'Transducer Verify'), ('HC', 'Hardware Calibration')], max_length=256)), - ('as_found', models.FileField(blank=True, upload_to='')), - ('as_left', models.FileField(blank=True, upload_to='')), - ('both', models.FileField(blank=True, upload_to='')), - ('calibration_cert_id', models.CharField(default=0, max_length=100)), - ('calibration_date', models.DateField(default=0)), - ('calibration_due_date', models.DateField(default=0)), - ('calibration_model', models.CharField(default=0, max_length=100)), - ('calibration_serial', models.CharField(default=0, max_length=100)), - ('channel', models.CharField(default=0, max_length=256)), - ('instrument_model', models.CharField(default=0, max_length=256)), - ('transducer_model', models.CharField(default=0, max_length=256)), - ('transducer_span', models.CharField(default=0, max_length=256)), - ], - ), - ] diff --git a/benchtopdevices/sheets/migrations/0002_alter_sheet_calibration_cert_id_and_more.py b/benchtopdevices/sheets/migrations/0002_alter_sheet_calibration_cert_id_and_more.py deleted file mode 100644 index 1d12b43..0000000 --- a/benchtopdevices/sheets/migrations/0002_alter_sheet_calibration_cert_id_and_more.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated by Django 4.2.5 on 2023-09-18 17:03 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='sheet', - name='calibration_cert_id', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='sheet', - name='calibration_date', - field=models.DateField(), - ), - migrations.AlterField( - model_name='sheet', - name='calibration_due_date', - field=models.DateField(), - ), - migrations.AlterField( - model_name='sheet', - name='calibration_model', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='sheet', - name='calibration_serial', - field=models.CharField(max_length=100), - ), - migrations.AlterField( - model_name='sheet', - name='channel', - field=models.CharField(max_length=256), - ), - migrations.AlterField( - model_name='sheet', - name='instrument_model', - field=models.CharField(max_length=256), - ), - migrations.AlterField( - model_name='sheet', - name='transducer_model', - field=models.CharField(max_length=256), - ), - migrations.AlterField( - model_name='sheet', - name='transducer_span', - field=models.CharField(max_length=256), - ), - ] diff --git a/benchtopdevices/sheets/migrations/0003_remove_sheet_customer_address_sheet_control_doc_and_more.py b/benchtopdevices/sheets/migrations/0003_remove_sheet_customer_address_sheet_control_doc_and_more.py deleted file mode 100644 index 968ea78..0000000 --- a/benchtopdevices/sheets/migrations/0003_remove_sheet_customer_address_sheet_control_doc_and_more.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 4.2.5 on 2023-09-18 17:13 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0002_alter_sheet_calibration_cert_id_and_more'), - ] - - operations = [ - migrations.RemoveField( - model_name='sheet', - name='customer_address', - ), - migrations.AddField( - model_name='sheet', - name='control_doc', - field=models.CharField(default=0, max_length=256), - preserve_default=False, - ), - migrations.AddField( - model_name='sheet', - name='onsite_cal', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='sheet', - name='technician', - field=models.CharField(default=0, max_length=256), - preserve_default=False, - ), - ] diff --git a/benchtopdevices/sheets/migrations/0004_sheet_kind.py b/benchtopdevices/sheets/migrations/0004_sheet_kind.py deleted file mode 100644 index 370cdb0..0000000 --- a/benchtopdevices/sheets/migrations/0004_sheet_kind.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-05 03:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0003_remove_sheet_customer_address_sheet_control_doc_and_more'), - ] - - operations = [ - migrations.AddField( - model_name='sheet', - name='kind', - field=models.CharField(blank=True, choices=[('p', 'Pressure Transducer'), ('f', 'Flow Transducer')], max_length=256), - ), - ] diff --git a/benchtopdevices/sheets/migrations/0005_remove_sheet_kind_sheet_transducer_type.py b/benchtopdevices/sheets/migrations/0005_remove_sheet_kind_sheet_transducer_type.py deleted file mode 100644 index baa8cf8..0000000 --- a/benchtopdevices/sheets/migrations/0005_remove_sheet_kind_sheet_transducer_type.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-05 03:15 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0004_sheet_kind'), - ] - - operations = [ - migrations.RemoveField( - model_name='sheet', - name='kind', - ), - migrations.AddField( - model_name='sheet', - name='transducer_type', - field=models.CharField(blank=True, choices=[('Pressure', 'Pressure Transducer'), ('Flow', 'Flow Transducer')], max_length=256), - ), - ] diff --git a/benchtopdevices/sheets/migrations/0006_sheet_instrument_calibration_date_and_more.py b/benchtopdevices/sheets/migrations/0006_sheet_instrument_calibration_date_and_more.py deleted file mode 100644 index ca3d8ea..0000000 --- a/benchtopdevices/sheets/migrations/0006_sheet_instrument_calibration_date_and_more.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 4.2.5 on 2023-10-05 03:42 - -from django.db import migrations, models -import django.utils.timezone - - -class Migration(migrations.Migration): - - dependencies = [ - ('sheets', '0005_remove_sheet_kind_sheet_transducer_type'), - ] - - operations = [ - migrations.AddField( - model_name='sheet', - name='instrument_calibration_date', - field=models.DateField(default=django.utils.timezone.now), - preserve_default=False, - ), - migrations.AddField( - model_name='sheet', - name='instrument_calibration_due_date', - field=models.DateField(default=django.utils.timezone.now), - preserve_default=False, - ), - ] diff --git a/benchtopdevices/sheets/migrations/__init__.py b/benchtopdevices/sheets/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/benchtopdevices/sheets/models.py b/benchtopdevices/sheets/models.py deleted file mode 100644 index a459dd9..0000000 --- a/benchtopdevices/sheets/models.py +++ /dev/null @@ -1,54 +0,0 @@ -from django.db import models -from django.utils.translation import gettext_lazy as _ - - -class Sheet(models.Model): - instrument_model = models.CharField(max_length=256) - instrument_calibration_date = models.DateField() - instrument_calibration_due_date = models.DateField() - serial_number = models.CharField(max_length=256) - channel = models.CharField(max_length=256) - transducer_model = models.CharField(max_length=256) - transducer_span = models.CharField(max_length=256) - - customer_name = models.CharField(max_length=256) - onsite_cal = models.BooleanField(default=False) - control_doc = models.CharField(max_length=256) - technician = models.CharField(max_length=256) - - accuracy = models.FloatField() - - barometric_pressure = models.FloatField() - temperature = models.FloatField() - humidity = models.FloatField() - - calibration_serial = models.CharField(max_length=100) - calibration_model = models.CharField(max_length=100) - calibration_date = models.DateField() - calibration_due_date = models.DateField() - calibration_cert_id = models.CharField(max_length=100) - - CHOICES = [ - ('TV', _('Transducer Verify')), - ('HC', _('Hardware Calibration')) - ] - - report_type = models.CharField( - max_length=256, - choices=CHOICES, - ) - - TRANSDUCER_TYPES = [ - ('Pressure', _('Pressure Transducer')), - ('Flow', _('Flow Transducer')) - ] - - transducer_type = models.CharField( - max_length=256, - choices=TRANSDUCER_TYPES, - blank=True - ) - - as_found = models.FileField(blank=True) - as_left = models.FileField(blank=True) - both = models.FileField(blank=True) diff --git a/benchtopdevices/sheets/parsers/__init__.py b/benchtopdevices/sheets/parsers/__init__.py deleted file mode 100644 index 6690db8..0000000 --- a/benchtopdevices/sheets/parsers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .hardware import parse_hardware_calibration -from .transducer import parse_transducer diff --git a/benchtopdevices/sheets/parsers/hardware.py b/benchtopdevices/sheets/parsers/hardware.py deleted file mode 100644 index dd3dbbd..0000000 --- a/benchtopdevices/sheets/parsers/hardware.py +++ /dev/null @@ -1,68 +0,0 @@ -import re - - -def parse_instrument_info(text): - instrument_info = {} - # Regex pattern for key-value pairs in the instrument info section - for line in text.split("\n")[2:]: - if line: - key, value = re.sub(r"\s\s+", "`", line.strip()).split("`") - instrument_info[key.strip()] = value.strip() - return instrument_info - - -def parse_ports(text): - text = f"{text}\n\n" # ensure extra newline to match on - pattern = r"(Test Port \d)" - matches = re.split(pattern, text)[1:] - m = dict(list(zip(matches[0::2], matches[1::2]))) - calibration_data = {} - for port, calibration in m.items(): - calibration_data[port] = parse_calibration_data(calibration) - return calibration_data - - -KEEP = { - "Mass Flow Trans": ("Instrument Flow", "Master Reading"), - "Pressure Transducer": ("Instrument Pressure", "Master Value"), -} - - -def parse_calibration_data(text): - # Regex pattern for each block in the calibration data section per Port - pattern = r"(Mass Flow Trans|Pressure Transducer)\n(.+?)\n\n" - matches = re.findall(pattern, text, re.DOTALL) - calibration_data = {} - for block_title, block_content in matches: - lines = block_content.strip().split("\n") - lines.pop(0) # Go away ======= - device_name = lines.pop(0).strip().split(None, 1)[-1].strip() - device_data = {"name": device_name} - for line in lines: - key, value = re.sub(r"\s\s+", "`", line.strip()).split("`") - # Only keep the fields we want - for start in KEEP[block_title]: - key = key.strip() - if key.startswith(start): - device_data[key] = value.strip() - calibration_data[block_title] = device_data - return calibration_data - - -def parse_hardware_calibration(content, accuracy): - # Split the content into instrument info and calibration data sections - info_section, calibration_section = content.split( - "|| Hardware Calibration Report ||" - ) - - instrument_info = parse_instrument_info(info_section) - calibration_data = parse_ports(calibration_section) - - return {"instrument": instrument_info, "calibration": calibration_data} - - -if __name__ == "__main__": - file_path = "./hardware_calibration.txt" # Replace with the actual file path - with open(file_path, "r") as file: - content = file.read() - data = parse_file(file_path) diff --git a/benchtopdevices/sheets/parsers/transducer.py b/benchtopdevices/sheets/parsers/transducer.py deleted file mode 100644 index 7acc6e0..0000000 --- a/benchtopdevices/sheets/parsers/transducer.py +++ /dev/null @@ -1,129 +0,0 @@ -import re -import json - -def in_range(index, value, master_values): - return ( - master_values[index]["Low Limit"] <= value <= master_values[index]["High Limit"] - ) - - -def delta(index, value, master_values): - return abs(master_values[index]["Low Limit"] - value) - - -def parse_transducer(content, accuracy): - accuracy = accuracy/100.0 # Comes in as Percent - transducer_data = [] - - # Split the content into sections based on the blank line - sections = content.strip().split("\n\n") - - for section in sections: - # Split each section into lines - lines = section.strip().split("\n") - lines = [ - line.strip() - for line in lines - if not line.startswith("==") and line != "|| Transducer Verify Report ||" - ] - lines.pop(0) - - # Extract the Transducer number and Transducer type - transducer_line = lines.pop(0).strip() - _, transducer_name, part_number = transducer_line.split(None, 2) - - # Get part number and values - value = None - unit = None - transducer_type = None - if part_number != "Custom": - value = part_number.split()[-1] - part_number = part_number.split()[1] - if match := re.match(r"([0-9]+)([A-Z]+)", value, re.I): - value, unit = match.groups() - value = int(value) - if unit == "SCCM": - transducer_type = "Flow" - if unit == "PSIA": - transducer_type = "Pressure" - - # Create a dictionary to store the data for each transducer - transducer_info = { - "Accuracy": accuracy, - "Part Number": part_number, - "Value": value, - "Unit": unit, - "Limit ABS": int(value * accuracy * 1000), - "Transducer Name": transducer_name, - "Transducer Type": transducer_type, - "Gauge Reading": [], - "Master Value": [], - "Verify Date": "", - "Verify Time": "", - } - - # Extract other information for the transducer - for line in lines: - key, value = re.sub(r"\s\s+", ",", line.strip()).split(",") - if "Verify Date" in key: - transducer_info["Verify Date"] = value - continue - elif "Verify Time" in key: - transducer_info["Verify Time"] = value - continue - - # Toss anything else where it belongs - key = re.match(r"(.*)\W(\d)", key)[1] - if key in transducer_info or f"Instrument {transducer_type}" in key: - value = int(float(value.split()[0])*1000) - # special case Master to get the limits - if "Master" in key: - hi = value + transducer_info["Limit ABS"] - lo = value - transducer_info["Limit ABS"] - transducer_info[key].append( - { - "Low Limit": int(lo), - "Master Value": value, - "High Limit": int(hi), - } - ) - # Turn both Instrument Pressure and Instrument Flow to Gauge Reading - elif f"Instrument {transducer_type}" in key: - transducer_info["Gauge Reading"].append(value) - else: - transducer_info[key].append(value) - - # Once we have the readings, and master values, we can do the math - transducer_info["Gauge Reading"] = [ - { - "Value": v, - "In Range": in_range(idx, v, transducer_info["Master Value"]), - "Delta": delta(idx, v, transducer_info["Master Value"]) - } - for idx, v in enumerate(transducer_info["Gauge Reading"]) - ] - - transducer_data.append(transducer_info) - - return transducer_data - - -if __name__ == "__main__": - from pprint import pprint - file_path = "./transducer_verify.txt" - with open(file_path, "r") as file: - output = { - "Instrument": "CTS0JODFDASH", - "Customer Name": "Anthony Souza", - "Customer Address": "PO Box 357, West Chesterfield, NH 03466", - "Control Number": "123123", - "Serial Number": "123313", - "Accuracy": 0.5, - "Barometric Pressure": 1013.25, - "Temperature": 50.3, - "Humidity": 27, - "Transducers": parse_transducer(file.read(), 0.5) - } - print(json.dumps(output).replace('"', '""')) - pprint(output) - diff --git a/benchtopdevices/sheets/templates/sheets/index.html b/benchtopdevices/sheets/templates/sheets/index.html deleted file mode 100644 index e69de29..0000000 diff --git a/benchtopdevices/sheets/tests.py b/benchtopdevices/sheets/tests.py deleted file mode 100644 index 7ce503c..0000000 --- a/benchtopdevices/sheets/tests.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.test import TestCase - -# Create your tests here. diff --git a/benchtopdevices/sheets/urls.py b/benchtopdevices/sheets/urls.py deleted file mode 100644 index 839f66d..0000000 --- a/benchtopdevices/sheets/urls.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.urls import path -from . import views - -urlpatterns = [ - path('', views.upload_file, name = 'upload'), -] \ No newline at end of file diff --git a/benchtopdevices/sheets/views.py b/benchtopdevices/sheets/views.py deleted file mode 100644 index b75cbaa..0000000 --- a/benchtopdevices/sheets/views.py +++ /dev/null @@ -1,33 +0,0 @@ -from django.http import HttpResponseRedirect, HttpResponse -from django.shortcuts import render -from django.core.exceptions import ValidationError - -from .forms import SheetForm, SheetForm -from .parsers import parse_transducer, parse_hardware_calibration - - -def upload_file(request): - if request.method == "POST": - f = SheetForm(request.POST, request.FILES) - if f.is_valid(): - data = f.clean() - as_found = request.FILES.get('as_found') - as_left = request.FILES.get('as_left') - both = request.FILES.get('both') - if both: - if data['report_type'] == "TV": - tv = parse_transducer(both.read().decode(), data['accuracy']) - f.transducer_type = tv["Transducer Type"] - else: - hc = parse_hardware_calibration(both.read().decode(), data['accuracy']) - elif as_found and as_left: - # TODO: DO THIS - pass - else: - raise ValidationError("Please provide proper files") - f.save() - breakpoint() - return HttpResponseRedirect("/") - else: - form = SheetForm() - return HttpResponse("hi") diff --git a/benchtopdevices/transducer_verify.txt b/benchtopdevices/transducer_verify.txt deleted file mode 100644 index 596e282..0000000 --- a/benchtopdevices/transducer_verify.txt +++ /dev/null @@ -1,85 +0,0 @@ -|| Transducer Verify Report || -TRANSDUCER1 -=============================================================== -Transducer 1 CTS D34-442 115PSIA -Setpoint Pressure 1 0.000 psig -Setpoint Pressure 2 20.000 psig -Setpoint Pressure 3 40.000 psig -Setpoint Pressure 4 60.000 psig -Setpoint Pressure 5 80.000 psig -Setpoint Pressure 6 100.000 psig -Instrument Pressure 1 0.000 psig -Instrument Pressure 2 20.002 psig -Instrument Pressure 3 39.997 psig -Instrument Pressure 4 60.010 psig -Instrument Pressure 5 80.001 psig -Instrument Pressure 6 100.002 psig -Master Value 1 0.000 psig -Master Value 2 20.000 psig -Master Value 3 40.000 psig -Master Value 4 60.000 psig -Master Value 5 80.000 psig -Master Value 6 100.000 psig -Verify Date 07/20/22 -Verify Time 11:20:26 - -TRANSDUCER2 -=============================================================== -Transducer 2 CTS A12-221 250SCCM -Setpoint Pressure 1 20.000 psig -Setpoint Pressure 2 20.000 psig -Setpoint Pressure 3 20.000 psig -Setpoint Pressure 4 20.000 psig -Setpoint Pressure 5 20.000 psig -Setpoint Pressure 6 20.000 psig -Setpoint Pressure 7 20.000 psig -Setpoint Pressure 8 20.000 psig -Setpoint Pressure 9 20.000 psig -Setpoint Pressure 10 20.000 psig -Setpoint Pressure 11 20.000 psig -Instrument Pressure 1 20.154 psig -Instrument Pressure 2 20.153 psig -Instrument Pressure 3 20.152 psig -Instrument Pressure 4 20.150 psig -Instrument Pressure 5 20.148 psig -Instrument Pressure 6 20.145 psig -Instrument Pressure 7 20.144 psig -Instrument Pressure 8 20.141 psig -Instrument Pressure 9 20.139 psig -Instrument Pressure 10 20.138 psig -Instrument Pressure 11 20.136 psig -Instrument Flow 1 -0.082 sccm -Instrument Flow 2 24.802 sccm -Instrument Flow 3 49.664 sccm -Instrument Flow 4 74.836 sccm -Instrument Flow 5 99.416 sccm -Instrument Flow 6 125.289 sccm -Instrument Flow 7 150.205 sccm -Instrument Flow 8 175.290 sccm -Instrument Flow 9 200.165 sccm -Instrument Flow 10 224.748 sccm -Instrument Flow 11 249.825 sccm -Master Reading 1 0.000 sccm -Master Reading 2 25.000 sccm -Master Reading 3 50.000 sccm -Master Reading 4 75.000 sccm -Master Reading 5 100.000 sccm -Master Reading 6 125.000 sccm -Master Reading 7 150.000 sccm -Master Reading 8 175.000 sccm -Master Reading 9 200.000 sccm -Master Reading 10 225.000 sccm -Master Reading 11 250.000 sccm -Master Value 1 0.000 sccm -Master Value 2 25.000 sccm -Master Value 3 50.000 sccm -Master Value 4 75.000 sccm -Master Value 5 100.000 sccm -Master Value 6 125.000 sccm -Master Value 7 150.000 sccm -Master Value 8 175.000 sccm -Master Value 9 200.000 sccm -Master Value 10 225.000 sccm -Master Value 11 250.000 sccm -Verify Date 07/15/21 -Verify Time 14:55:10