def test_parse_point2obj(self): parser = Sps21Parser() record = 'S 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' obj = parser.parse_point2obj(record) self.assertEqual('S', obj.type) self.assertEqual(21528.00, obj.line) self.assertEqual(27830.00, obj.point) self.assertEqual(1, obj.point_idx) self.assertEqual('P1', obj.point_code) self.assertEqual(None, obj.static_cor) self.assertEqual(None, obj.point_depth) self.assertEqual(None, obj.datum) self.assertEqual(0, obj.uphole_time) self.assertEqual(None, obj.water_depth) self.assertEqual(756755.8, obj.easting) self.assertEqual(2561875.5, obj.northing) self.assertEqual(138.1, obj.elevation) self.assertEqual(265, obj.day_of_year) self.assertEqual('120558', obj.time) record = 'H 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' obj = parser.parse_point2obj(record) self.assertIsNone(obj)
def test_get_fields(self): parser = Sps21Parser() fields = parser.get_fields_point() self.assertEqual(15, len(fields)) self.assertEqual(['RECORD_ID', 'LINE', 'POINT', 'POINT_IDX', 'POINT_CODE', 'STATIC_COR', 'POINT_DEPTH', 'DATUM', 'UPHOLE_TIME', 'WATER_DEPTH', 'EASTING', 'NORTHING', 'ELEVATION', 'DAY_OF_YEAR', 'TIME'], fields)
def test_csv_point(self): parser = Sps21Parser() data = parser.get_fields_point() csv = parser.csv_from_array(data) self.assertEqual( 'RECORD_ID,LINE,POINT,POINT_IDX,POINT_CODE,STATIC_COR,POINT_DEPTH,DATUM,UPHOLE_TIME,WATER_DEPTH,EASTING,NORTHING,ELEVATION,DAY_OF_YEAR,TIME', csv )
def test_parsing_empty_string(self): parser = Sps21Parser() record = '' data = parser.parse_point(record) self.assertIsNone(data) data = parser.parse_relation(record) self.assertIsNone(data)
def test_csv_relation(self): parser = Sps21Parser() data = parser.get_fields_relation() csv = parser.csv_from_array(data) self.assertEqual( 'RECORD_ID,TAPE_NUMBER,RECORD_NUMBER,RECORD_INCREMENT,INSTRUMENT_CODE,S_LINE,POINT,POINT_IDX,FROM_CHANNEL,TO_CHANNEL,CHANNEL_INCREMENT,R_LINE,FROM_RECEIVER,TO_RECEIVER,RECEIVER_IDX', csv )
def test_format_point(self): parser = Sps21Parser() record = 'S 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' point = Point(parser.parse_point(record)) formatted = parser.format_point(point) self.assertEqual(record, formatted) record = 'S 21528.00 27830.00 1P1 756755.8 2561875.5 138.1265120558' expected = 'S 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' point = Point(parser.parse_point(record)) formatted = parser.format_point(point) self.assertEqual(expected, formatted)
def process(self, sps_file, fast): engine = create_engine('sqlite:///' + self.db_file) session = sessionmaker() session.configure(bind=engine) Base.metadata.create_all(engine) s = session() parser = Sps21Parser() with open(sps_file) as sps: line = sps.readline() sps_counter = 0 while line: sps_data = parser.parse_point(line) if sps_data is not None: line = str(int(sps_data[1])) point = str(int(sps_data[2])) line_point = line + point easting = sps_data[10] northing = sps_data[11] p = Plan(lp=line_point, easting=easting, northing=northing) try: s.add(p) if fast is False: s.commit() except: pass sps_counter += 1 self.ui.progressBar.setValue(sps_counter) line = sps.readline() if fast is True: try: s.commit() except: self.warning_process() sps.close() return sps_counter
def test_parse_point(self): parser = Sps21Parser() record = 'S 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' data = parser.parse_point(record) self.assertEqual('S', data[0]) self.assertEqual(21528.00, data[1]) self.assertEqual(27830.00, data[2]) self.assertEqual(1, data[3]) self.assertEqual('P1', data[4]) self.assertEqual(None, data[5]) self.assertEqual(None, data[6]) self.assertEqual(None, data[7]) self.assertEqual(0, data[8]) self.assertEqual(None, data[9]) self.assertEqual(756755.8, data[10]) self.assertEqual(2561875.5, data[11]) self.assertEqual(138.1, data[12]) self.assertEqual(265, data[13]) self.assertEqual('120558', data[14])
def test_parse_relation(self): parser = Sps21Parser() record = 'X 1001 8287311 19248.00 27516.001 1 4351 27023.00 18875.00 19743.001' data = parser.parse_relation(record) self.assertEqual('X', data[0]) self.assertEqual('1001', data[1]) self.assertEqual(82873, data[2]) self.assertEqual(1, data[3]) self.assertEqual('1', data[4]) self.assertEqual(19248.00, data[5]) self.assertEqual(27516.00, data[6]) self.assertEqual(1, data[7]) self.assertEqual(1, data[8]) self.assertEqual(435, data[9]) self.assertEqual(1, data[10]) self.assertEqual(27023.00, data[11]) self.assertEqual(18875.00, data[12]) self.assertEqual(19743.00, data[13]) self.assertEqual(1, data[14])
def main(): parser = Sps21Parser() filename = 'data/data.S' with open(filename) as sps: line = sps.readline() while line: parsed = parser.parse_point(line) if parsed is not None: point = Point(parsed) print(point.line, point.point) line = sps.readline() filename = 'data/data.X' with open(filename) as sps: line = sps.readline() while line: parsed = parser.parse_relation(line) if parsed is not None: relation = Relation(parsed) print(relation.type, relation.line, relation.ffid) line = sps.readline()
def test_parse_relation(self): parser = Sps21Parser() record = 'X 1001 8287311 19248.00 27516.001 1 4351 27023.00 18875.00 19743.001' data = parser.parse_relation(record) self.assertEqual('X', data[0]) self.assertEqual('1001', data[1]) self.assertEqual(82873, data[2]) self.assertEqual(1, data[3]) self.assertEqual('1', data[4]) self.assertEqual(19248.00, data[5]) self.assertEqual(27516.00, data[6]) self.assertEqual(1, data[7]) self.assertEqual(1, data[8]) self.assertEqual(435, data[9]) self.assertEqual(1, data[10]) self.assertEqual(27023.00, data[11]) self.assertEqual(18875.00, data[12]) self.assertEqual(19743.00, data[13]) self.assertEqual(1, data[14]) relation = Relation(data) self.assertEqual('X', relation.type) self.assertEqual('1001', relation.tape) self.assertEqual(82873, relation.ffid) self.assertEqual(1, relation.ffid_increment) self.assertEqual('1', relation.instrument) self.assertEqual(19248.00, relation.line) self.assertEqual(27516.00, relation.point) self.assertEqual(1, relation.point_idx) self.assertEqual(1, relation.from_channel) self.assertEqual(435, relation.to_channel) self.assertEqual(1, relation.channel_increment) self.assertEqual(27023.00, relation.rcv_line) self.assertEqual(18875.00, relation.from_rcv) self.assertEqual(19743.00, relation.to_rcv) self.assertEqual(1, relation.rcv_idx)
def check(self, limit_x, limit_y): connection = db.create_connection(self.db_file) parser = Sps21Parser() check_file = self.sps_file + CHECK_EXT not_in_db_file = self.sps_file + NOT_IN_DB_EXT common.csv_file_create(check_file, CHECK_CSV_HEADER) common.csv_file_create(not_in_db_file, NOT_IN_DB_CSV_HEADER) with open(self.sps_file) as sps: line = sps.readline() sps_counter = 0 not_in_db_counter = 0 offset_counter_x = 0 offset_counter_y = 0 while line: stats = parser.parse_point(line) if stats is not None: point = Point(stats) stats = db.get_record_for_point(connection, point) if stats is None: sps_counter += 1 not_in_db_counter += 1 record = "%.2f,%.2f,%.1f,%.1f" \ % ( point.line, point.point, point.easting, point.northing) common.csv_file_record_add(not_in_db_file, record) line = sps.readline() continue de = point.easting - stats[0] dn = point.northing - stats[1] error_easting = 0 if abs(de) > limit_x: offset_counter_x += 1 error_easting = 1 error_northing = 0 if abs(dn) > limit_y: offset_counter_y += 1 error_northing = 1 record = "%.2f,%.2f,%.1f,%.1f,%.1f,%.1f,%d,%d" \ % ( point.line, point.point, point.easting, point.northing, de, dn, error_easting, error_northing) common.csv_file_record_add(check_file, record) sps_counter += 1 self.ui.progressBar.setValue(sps_counter) line = sps.readline() sps.close() stats = { 'PC': sps_counter, 'NDB': not_in_db_counter, 'OCX': offset_counter_x, 'OCY': offset_counter_y } connection.close() return stats
def test_format_not_implemented(self): parser = Sps21Parser() with self.assertRaises(Exception): parser.format([])
def test_parse_not_implemented(self): parser = Sps21Parser() record = 'X 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' with self.assertRaises(Exception): parser.parse(record)
def test_parse_wrong_record_point(self): parser = Sps21Parser() record = 'B 21528.00 27830.00 1P1 0 756755.8 2561875.5 138.1265120558' data = parser.parse_point(record) self.assertIsNone(data)
def test_parse_wrong_record_relation(self): parser = Sps21Parser() record = 'B 1001 8287311 19248.00 27516.001 1 4351 27023.00 18875.00 19743.001' data = parser.parse_relation(record) self.assertIsNone(data)