syncing master
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
import csv
|
||||
from helix.constants.file_validation_error import FileValidationError, FileValidationMessage
|
||||
from helix.calculators.coordinates_calculator import CoordinatesCalculator
|
||||
from helix.models.coordinate import Coordinate
|
||||
|
||||
|
||||
class CsvInputValidator(object):
|
||||
@@ -14,7 +16,7 @@ class CsvInputValidator(object):
|
||||
if len(headers) < 5:
|
||||
return FileValidationError(FileValidationMessage.InvalidHeaders, 0)
|
||||
if len(rows) == 0:
|
||||
return FileValidationError(FileValidationMessage.InvalidRowCount, 0)
|
||||
return FileValidationError(FileValidationMessage.InvalidRowCount, 0)
|
||||
|
||||
for row_index, row in enumerate(rows):
|
||||
chain = [
|
||||
@@ -28,13 +30,14 @@ class CsvInputValidator(object):
|
||||
|
||||
file_validation_chain = [
|
||||
CsvInputValidator.validate_file_for_panel_types,
|
||||
CsvInputValidator.validate_for_spacing,
|
||||
]
|
||||
result = self.run_validation_chain(headers, rows, file_validation_chain)
|
||||
if result:
|
||||
return FileValidationError(result, None)
|
||||
|
||||
return None
|
||||
except:
|
||||
except Exception as inst:
|
||||
return FileValidationError(FileValidationMessage.Generic, None)
|
||||
|
||||
# Row Validators
|
||||
@@ -75,6 +78,45 @@ class CsvInputValidator(object):
|
||||
return FileValidationMessage.panel_type_too_few_corners(self.user_values.system_type())
|
||||
return None
|
||||
|
||||
def validate_for_spacing(self, headers, rows):
|
||||
try:
|
||||
|
||||
if len(headers) < 13:
|
||||
return None
|
||||
|
||||
coordinates_calculator = CoordinatesCalculator(self.user_values)
|
||||
|
||||
scaling_factor = self.user_values.module_system_constants().tolerance + 1
|
||||
spacing_x, spacing_y = self.user_values.module_system_constants().panel_spacing
|
||||
|
||||
spacing_coordinates = Coordinate(spacing_x*scaling_factor, spacing_y*scaling_factor,0)
|
||||
spacing_coordinates_scaled = coordinates_calculator.scale(spacing_coordinates)
|
||||
|
||||
for row_index, row in enumerate(rows):
|
||||
first_panel = Coordinate(float(row[11]), float(row[12]), float(row[13]))
|
||||
first_panel_rotated = coordinates_calculator.rotate(first_panel)
|
||||
first_panel_scaled = coordinates_calculator.scale(first_panel_rotated)
|
||||
for row_index2, row2 in enumerate(rows):
|
||||
if row_index2 <= row_index:
|
||||
continue
|
||||
|
||||
second_panel = Coordinate(float(row2[11]), float(row2[12]), float(row2[13]))
|
||||
second_panel_rotated = coordinates_calculator.rotate(second_panel)
|
||||
second_panel_scaled = coordinates_calculator.scale(second_panel_rotated)
|
||||
|
||||
x_diff = round(abs(first_panel_scaled.x - second_panel_scaled.x),3)
|
||||
y_diff = round(abs(first_panel_scaled.y - second_panel_scaled.y),3)
|
||||
|
||||
if (x_diff < spacing_coordinates_scaled.x) and (y_diff < spacing_coordinates_scaled.y):
|
||||
return FileValidationMessage.PanelsTooClose
|
||||
|
||||
return None
|
||||
|
||||
except Exception as inst:
|
||||
print("ERROR !!! ")
|
||||
print(inst)
|
||||
return FileValidationMessage.Generic
|
||||
|
||||
# Helpers
|
||||
|
||||
def run_validation_chain(self, headers, data, chain):
|
||||
|
||||
Reference in New Issue
Block a user