syncing master

This commit is contained in:
Senad Uka
2017-11-21 17:11:29 +01:00
parent 0eee92660a
commit b4e45199b7
47 changed files with 5666 additions and 263 deletions

View File

@@ -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):