diff --git a/test/test_spectrallibraries.py b/test/test_spectrallibraries.py index 8861e68d979434d8f0c00321b9c856223aa6582f..9863e04e177a21344b4bcd513f2d5f3a6f721a5f 100644 --- a/test/test_spectrallibraries.py +++ b/test/test_spectrallibraries.py @@ -233,14 +233,16 @@ class TestInit(unittest.TestCase): try: writtenFiles = sl1.exportProfiles(pathCSV) + self.assertIsInstance(writtenFiles, list) + for f in writtenFiles: + try: + sl1 = SpectralLibrary.readFrom(f) + except Exception as ex: + self.fail('Unable to read CSV. {}'.format(ex)) + except Exception as ex: self.fail('Unable to write CSV. {}'.format(ex)) - for f in writtenFiles: - try: - sl1 = SpectralLibrary.readFrom(f) - except Exception as ex: - self.fail('Unable to read CSV. {}'.format(ex)) @@ -252,15 +254,32 @@ class TestInit(unittest.TestCase): def test_mergeSpeclibs(self): sp = SpectralProfile() - sp.setMetadata('newfield', 'foo', addMissingFields=True) - sl1 = SpectralLibrary() - sl1.startEditing() - sl1.addAttribute(SpectralProfile.createQgsField('newField', '')) - sl1.commitChanges() - sl1.addProfiles(sp) + fieldName = 'newField' + sp.setMetadata(fieldName, 'foo', addMissingFields=True) + sl = SpectralLibrary() + + sl.startEditing() + sl.addAttribute(SpectralProfile.createQgsField(fieldName, '')) + sl.commitChanges() + self.assertIn(fieldName, sl.fieldNames()) + + sl = SpectralLibrary() + sl.addProfiles(sp) + + + sl = SpectralLibrary() + self.assertTrue(fieldName not in sl.fieldNames()) + sl.addProfiles(sp, addMissingFields=False) + self.assertTrue(fieldName not in sl.fieldNames()) - sl2 = SpectralLibrary() + sl = SpectralLibrary() + self.assertTrue(fieldName not in sl.fieldNames()) + sl.addProfiles(sp, addMissingFields=True) + self.assertTrue(fieldName in sl.fieldNames()) + p = sl[0] + self.assertIsInstance(p, SpectralProfile) + self.assertEqual(p.metadata(fieldName), sp.metadata(fieldName)) def test_filterModel(self): w = QFrame() diff --git a/timeseriesviewer/spectrallibraries.py b/timeseriesviewer/spectrallibraries.py index 57c0c3c6b98b562646d68558780b1cee8dd9ab34..8986c11e08ca204c56656eee702cc0fb6ba68b00 100644 --- a/timeseriesviewer/spectrallibraries.py +++ b/timeseriesviewer/spectrallibraries.py @@ -747,9 +747,9 @@ class AbstractSpectralLibraryIO(object): @staticmethod def write(speclib, path): - """Writes the SpectralLibrary to path, returns a list of written files""" + """Writes the SpectralLibrary to path and returns a list of written files that can be used to open the Speclibs with readFrom""" assert isinstance(speclib, SpectralLibrary) - return None + return [] class CSVSpectralLibraryIO(AbstractSpectralLibraryIO): @@ -757,6 +757,7 @@ class CSVSpectralLibraryIO(AbstractSpectralLibraryIO): @staticmethod def write(speclib, path, separator='\t'): + writtenFiles = [] assert isinstance(speclib, SpectralLibrary) lines = ['Spectral Library {}'.format(speclib.name())] @@ -769,6 +770,10 @@ class CSVSpectralLibraryIO(AbstractSpectralLibraryIO): file.write(line+'\n') file.flush() file.close() + writtenFiles.append(path) + + return writtenFiles + @staticmethod def asTextLines(speclib, separator='\t'): @@ -1256,11 +1261,13 @@ class SpectralLibrary(QgsVectorLayer): missingFields.append(field) if len(missingFields) > 0: self.startEditing() - self.dataProvider().addAttributes() + b = self.dataProvider().addAttributes(missingFields) # for field in missingFields: # assert isinstance(field, QgsField) - - self.commitChanges() + if b: + self.commitChanges() + else: + self.commitErrors() s = "" def addSpeclib(self, speclib, addMissingFields=True): @@ -1284,7 +1291,7 @@ class SpectralLibrary(QgsVectorLayer): assert isinstance(p, SpectralProfile) if addMissingFields: - self.addMissingFields(profiles[0]) + self.addMissingFields(profiles[0].fields()) inEditMode = self.isEditable() if not inEditMode: