From 51d49f4bccffa89c352f9f5ca7b2dbb7168e94ca Mon Sep 17 00:00:00 2001 From: GotPPay Date: Fri, 10 Nov 2017 01:04:51 +0100 Subject: [PATCH 1/3] proximity validator --- helix/constants/file_validation_error.py | 1 + .../dual_tilt_128_cell_constants.py | 1 + .../dual_tilt_96_cell_constants.py | 1 + .../dual_tilt_pseries_constants.py | 1 + .../single_tilt_128_cell_constants.py | 1 + .../single_tilt_96_cell_constants.py | 1 + .../single_tilt_pseries_constants.py | 1 + helix/validators/csv_input_validator.py | 26 +++++++++++++++++++ 8 files changed, 33 insertions(+) diff --git a/helix/constants/file_validation_error.py b/helix/constants/file_validation_error.py index 3c042fb..339ff95 100644 --- a/helix/constants/file_validation_error.py +++ b/helix/constants/file_validation_error.py @@ -15,6 +15,7 @@ class FileValidationMessage(Enum): ExpectedTxtFile = 'Invalid file uploaded. Please upload a valid .txt file.' ExpectedDxfFile = 'Invalid file uploaded. Please upload a valid .dxf file.' OldDxfFormat = 'Invalid Aurora format uploaded. Please upload a new format.' + PanelsTooClose = 'It appears that the panel coordinates are too close together. Please ensure that panel spacing is correct and that you have selected the correct configuration.' @classmethod def invalid_wind_zones(cls, system_type): diff --git a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py index 1fd0931..616f75a 100644 --- a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt128CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py index 3a3d15a..a1273db 100644 --- a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt96CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 62.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1) diff --git a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py index 542aac0..647001f 100644 --- a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py @@ -5,6 +5,7 @@ from helix.constants.panel_type import PanelType class DualTiltPSeriesConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 8.8503937 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py index 613eb31..2815154 100644 --- a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py @@ -8,6 +8,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt128CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 60.0) # inches presenter_spacing = (1.5, 1) panel_area = 23.29 diff --git a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py index 5e69666..de639fd 100644 --- a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py @@ -7,6 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt96CellConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (62.0, 60.0) # inches presenter_spacing = (1, 1) panel_area = 17.58 diff --git a/helix/constants/module_type_constants/single_tilt_pseries_constants.py b/helix/constants/module_type_constants/single_tilt_pseries_constants.py index 43d316f..0e50141 100644 --- a/helix/constants/module_type_constants/single_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/single_tilt_pseries_constants.py @@ -7,6 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTiltPSeriesConstants(object): + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 61.8755) # inches presenter_spacing = (1.5, 1) panel_area = 22.22 diff --git a/helix/validators/csv_input_validator.py b/helix/validators/csv_input_validator.py index 8e927de..f4915f6 100644 --- a/helix/validators/csv_input_validator.py +++ b/helix/validators/csv_input_validator.py @@ -16,6 +16,32 @@ class CsvInputValidator(object): if len(rows) == 0: return FileValidationError(FileValidationMessage.InvalidRowCount, 0) + #check for spacing + try: + min_spacing = self.user_values.module_system_constants().panel_spacing + tolerance = self.user_values.module_system_constants().tolerance + 1 + min_spacing = (min_spacing[0]*tolerance, min_spacing[1]*tolerance) + + for row_index, row in enumerate(rows): + for row_index2, row2 in enumerate(rows): + if row_index2 <= row_index: + continue + + x1_pos = float(row[11]) + y1_pos = float(row[12]) + + x2_pos = float(row2[11]) + y2_pos = float(row2[12]) + + x_diff = abs(x1_pos-x2_pos) + y_diff = abs(y1_pos-y2_pos) + + if (x_diff < min_spacing[0]) and (y_diff < min_spacing[1]): + return FileValidationError(FileValidationMessage.PanelsTooClose,None) + + except: + pass + for row_index, row in enumerate(rows): chain = [ CsvInputValidator.validate_for_csv, -- 2.47.3 From 1eb55606f332945d825d560622b8ca9150bcb285 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Fri, 10 Nov 2017 15:49:50 +0100 Subject: [PATCH 2/3] code refactor --- .../dual_tilt_128_cell_constants.py | 2 +- .../dual_tilt_96_cell_constants.py | 2 +- .../dual_tilt_pseries_constants.py | 2 +- .../single_tilt_128_cell_constants.py | 2 +- .../single_tilt_96_cell_constants.py | 2 +- .../single_tilt_pseries_constants.py | 2 +- helix/validators/csv_input_validator.py | 55 ++++++++++--------- 7 files changed, 34 insertions(+), 33 deletions(-) diff --git a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py index 616f75a..ac2b672 100644 --- a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt128CellConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py index a1273db..49b333c 100644 --- a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt96CellConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 62.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1) diff --git a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py index 647001f..838b501 100644 --- a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTiltPSeriesConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 8.8503937 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py index 2815154..8411abb 100644 --- a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py @@ -8,7 +8,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt128CellConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 60.0) # inches presenter_spacing = (1.5, 1) panel_area = 23.29 diff --git a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py index de639fd..70a0f35 100644 --- a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py @@ -7,7 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt96CellConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (62.0, 60.0) # inches presenter_spacing = (1, 1) panel_area = 17.58 diff --git a/helix/constants/module_type_constants/single_tilt_pseries_constants.py b/helix/constants/module_type_constants/single_tilt_pseries_constants.py index 0e50141..c2649e9 100644 --- a/helix/constants/module_type_constants/single_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/single_tilt_pseries_constants.py @@ -7,7 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTiltPSeriesConstants(object): - tolerance = 0.1 #require 10% additional space for panel spacing + scaling_factor = 1.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 61.8755) # inches presenter_spacing = (1.5, 1) panel_area = 22.22 diff --git a/helix/validators/csv_input_validator.py b/helix/validators/csv_input_validator.py index f4915f6..0c1ce07 100644 --- a/helix/validators/csv_input_validator.py +++ b/helix/validators/csv_input_validator.py @@ -14,33 +14,7 @@ class CsvInputValidator(object): if len(headers) < 5: return FileValidationError(FileValidationMessage.InvalidHeaders, 0) if len(rows) == 0: - return FileValidationError(FileValidationMessage.InvalidRowCount, 0) - - #check for spacing - try: - min_spacing = self.user_values.module_system_constants().panel_spacing - tolerance = self.user_values.module_system_constants().tolerance + 1 - min_spacing = (min_spacing[0]*tolerance, min_spacing[1]*tolerance) - - for row_index, row in enumerate(rows): - for row_index2, row2 in enumerate(rows): - if row_index2 <= row_index: - continue - - x1_pos = float(row[11]) - y1_pos = float(row[12]) - - x2_pos = float(row2[11]) - y2_pos = float(row2[12]) - - x_diff = abs(x1_pos-x2_pos) - y_diff = abs(y1_pos-y2_pos) - - if (x_diff < min_spacing[0]) and (y_diff < min_spacing[1]): - return FileValidationError(FileValidationMessage.PanelsTooClose,None) - - except: - pass + return FileValidationError(FileValidationMessage.InvalidRowCount, 0) for row_index, row in enumerate(rows): chain = [ @@ -54,6 +28,7 @@ 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: @@ -101,6 +76,32 @@ 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: + min_spacing = self.user_values.module_system_constants().panel_spacing + scaling_factor = self.user_values.module_system_constants().scaling_factor + min_spacing = (min_spacing[0]*scaling_factor, min_spacing[1]*scaling_factor) + + for row_index, row in enumerate(rows): + for row_index2, row2 in enumerate(rows): + if row_index2 <= row_index: + continue + + x1_pos = float(row[11]) + y1_pos = float(row[12]) + + x2_pos = float(row2[11]) + y2_pos = float(row2[12]) + + x_diff = abs(x1_pos-x2_pos) + y_diff = abs(y1_pos-y2_pos) + + if (x_diff < min_spacing[0]) and (y_diff < min_spacing[1]): + return FileValidationMessage.PanelsTooClose + + except: + return FileValidationMessage.Generic + # Helpers def run_validation_chain(self, headers, data, chain): -- 2.47.3 From a5fdc996b6f210911ae5e643255ff2dc1a004507 Mon Sep 17 00:00:00 2001 From: GotPPay Date: Fri, 10 Nov 2017 16:02:56 +0100 Subject: [PATCH 3/3] code refactoring --- .../module_type_constants/dual_tilt_128_cell_constants.py | 2 +- .../module_type_constants/dual_tilt_96_cell_constants.py | 2 +- .../module_type_constants/dual_tilt_pseries_constants.py | 2 +- .../module_type_constants/single_tilt_128_cell_constants.py | 2 +- .../module_type_constants/single_tilt_96_cell_constants.py | 2 +- .../module_type_constants/single_tilt_pseries_constants.py | 2 +- helix/validators/csv_input_validator.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py index ac2b672..616f75a 100644 --- a/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_128_cell_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt128CellConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py index 49b333c..a1273db 100644 --- a/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_96_cell_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTilt96CellConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 62.0) # inches spacing_size_inches = 5.12 # This is inches presenter_spacing = (1.5, 1) diff --git a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py index 838b501..647001f 100644 --- a/helix/constants/module_type_constants/dual_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/dual_tilt_pseries_constants.py @@ -5,7 +5,7 @@ from helix.constants.panel_type import PanelType class DualTiltPSeriesConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (88.24, 82.0) # inches spacing_size_inches = 8.8503937 # This is inches presenter_spacing = (1.5, 1.5) diff --git a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py index 8411abb..2815154 100644 --- a/helix/constants/module_type_constants/single_tilt_128_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_128_cell_constants.py @@ -8,7 +8,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt128CellConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 60.0) # inches presenter_spacing = (1.5, 1) panel_area = 23.29 diff --git a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py index 70a0f35..de639fd 100644 --- a/helix/constants/module_type_constants/single_tilt_96_cell_constants.py +++ b/helix/constants/module_type_constants/single_tilt_96_cell_constants.py @@ -7,7 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTilt96CellConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (62.0, 60.0) # inches presenter_spacing = (1, 1) panel_area = 17.58 diff --git a/helix/constants/module_type_constants/single_tilt_pseries_constants.py b/helix/constants/module_type_constants/single_tilt_pseries_constants.py index c2649e9..0e50141 100644 --- a/helix/constants/module_type_constants/single_tilt_pseries_constants.py +++ b/helix/constants/module_type_constants/single_tilt_pseries_constants.py @@ -7,7 +7,7 @@ from helix.constants.system_type_constants.single_tilt_constants import SingleTi class SingleTiltPSeriesConstants(object): - scaling_factor = 1.1 #require 10% additional space for panel spacing + tolerance = 0.1 #require 10% additional space for panel spacing panel_spacing = (82.0, 61.8755) # inches presenter_spacing = (1.5, 1) panel_area = 22.22 diff --git a/helix/validators/csv_input_validator.py b/helix/validators/csv_input_validator.py index 0c1ce07..d53217e 100644 --- a/helix/validators/csv_input_validator.py +++ b/helix/validators/csv_input_validator.py @@ -79,7 +79,7 @@ class CsvInputValidator(object): def validate_for_spacing(self, headers, rows): try: min_spacing = self.user_values.module_system_constants().panel_spacing - scaling_factor = self.user_values.module_system_constants().scaling_factor + scaling_factor = self.user_values.module_system_constants().tolerance + 1 min_spacing = (min_spacing[0]*scaling_factor, min_spacing[1]*scaling_factor) for row_index, row in enumerate(rows): -- 2.47.3