diff --git a/pylintrc b/pylintrc index 8a12125d4b71d3df5f7866277c41ee15401a4a93..625f83ce950841f7a239538123ef7b5812fc5c5f 100644 --- a/pylintrc +++ b/pylintrc @@ -2,8 +2,18 @@ [FORMAT] # Good variable names which should always be accepted, separated by a comma -good-names=ii,rt - +good-names=ii,rt,df [TYPECHECK] -ignored-modules=etree +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis +ignored-modules=etree,h5py,labfolder + +[MASTER] +# TODO: The max_inferred size is necessary for https://github.com/PyCQA/pylint/issues/4577, +# otherwise pandas.read_csv's return value would be inferred as TextFileReader. +init-hook= + import sys; sys.path.extend(["src/caosadvancedtools"]); + import astroid; astroid.context.InferenceContext.max_inferred = 500; + diff --git a/src/caosadvancedtools/cfood.py b/src/caosadvancedtools/cfood.py index 3c2d5408ef4d857f62ce4e908f90c4ffccef4d19..f060bed5c20e727a3a735cfa6bd8060ef132104f 100644 --- a/src/caosadvancedtools/cfood.py +++ b/src/caosadvancedtools/cfood.py @@ -841,8 +841,14 @@ class CMeal(object): matching_groups = [] def __init__(self): + self.item = None + self.match = None self.__class__.existing_instances.append(self) + @staticmethod + def get_re(): + raise NotImplementedError("Subclasses must implement this function.") + @classmethod def all_groups_equal(cls, m1, m2): equal = True @@ -878,5 +884,5 @@ class CMeal(object): if match is None: return False - else: - return self.all_groups_equal(match, self.match) + + return self.all_groups_equal(match, self.match) diff --git a/src/caosadvancedtools/cfoods/h5.py b/src/caosadvancedtools/cfoods/h5.py index 6c68edd3668fec957126aa3234a830aab98fcd25..cbf9d0baefa435b71eeaeefe63a9b018faabe7ea 100644 --- a/src/caosadvancedtools/cfoods/h5.py +++ b/src/caosadvancedtools/cfoods/h5.py @@ -124,6 +124,7 @@ class H5CFood(AbstractFileCFood): """CFood which consumes HDF5 files.""" super().__init__(*args, **kwargs) self.h5file = None + self.identifiable_root = None self.root_name = "root" self.hdf5Container = db.Container() self.em = EntityMapping() diff --git a/src/caosadvancedtools/converter/labfolder_api.py b/src/caosadvancedtools/converter/labfolder_api.py index a29d965b1598285105a06871ee1017adfdf4e222..cf57c0155a3b3970834abb2fc1058215ef7ecba8 100644 --- a/src/caosadvancedtools/converter/labfolder_api.py +++ b/src/caosadvancedtools/converter/labfolder_api.py @@ -28,7 +28,7 @@ import time import html2text import caosdb as db -from labfolder.connection import configure_connection +from labfolder.connection import configure_connection # pylint: disable=import-error class Importer(object): diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index b290b1b773fc1b41180c6e52e6c28b21ef2ee92e..48fc1e722c4ce9e888b8b80dbb5f29595c2f6b26 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -566,9 +566,9 @@ class Parser(object): db.BOOLEAN]: if is_list: - value.datatype = db.LIST(db.__getattribute__(dtype)) + value.datatype = db.LIST(db.__getattribute__(dtype)) # pylint: disable=no-member else: - value.datatype = db.__getattribute__(dtype) + value.datatype = db.__getattribute__(dtype) # pylint: disable=no-member continue diff --git a/src/caosadvancedtools/scifolder/simulation_cfood.py b/src/caosadvancedtools/scifolder/simulation_cfood.py index ae129e6a69ce25c6698b98124e81f8bc2921b472..c8f23f1485d7a1f64dcd940552051d2e1ec5bb07 100644 --- a/src/caosadvancedtools/scifolder/simulation_cfood.py +++ b/src/caosadvancedtools/scifolder/simulation_cfood.py @@ -88,22 +88,22 @@ class SimulationCFood(AbstractFileCFood, WithREADME): self.to_be_updated, datatype=db.LIST(db.REFERENCE)) - if SOURCES.key in self.header: + if SOURCES.key in self.header: # pylint: disable=unsupported-membership-test reference_records_corresponding_to_files( record=self.simulation, recordtypes=["Experiment", "Publication", "Simulation", "Analysis"], - globs=get_glob(self.header[SOURCES.key]), + globs=get_glob(self.header[SOURCES.key]), # pylint: disable=unsubscriptable-object property_name=dm.sources, path=self.crawled_path, to_be_updated=self.to_be_updated) self.reference_files_from_header(record=self.simulation) - if REVISIONOF.key in self.header: + if REVISIONOF.key in self.header: # pylint: disable=unsupported-membership-test reference_records_corresponding_to_files( record=self.simulation, - recordtypes=[dm.Software], + recordtypes=[dm.Software], # pylint: disable=no-member property_name=dm.revisionOf, - globs=get_glob(self.header[dm.revisionOf]), + globs=get_glob(self.header[dm.revisionOf]), # pylint: disable=unsubscriptable-object path=self.crawled_path, to_be_updated=self.to_be_updated) diff --git a/src/caosadvancedtools/scifolder/withreadme.py b/src/caosadvancedtools/scifolder/withreadme.py index 8a63e1f6d90ed4e78d01f76393cc72982cdc79d4..e1968ba49799827467c7ef93a7070b7f090010fb 100644 --- a/src/caosadvancedtools/scifolder/withreadme.py +++ b/src/caosadvancedtools/scifolder/withreadme.py @@ -121,12 +121,12 @@ class WithREADME(object): @property def header(self): if self._header is None: - if self.crawled_path.lower().endswith(".md"): + if self.crawled_path.lower().endswith(".md"): # pylint: disable=no-member self._header = get_md_header( - fileguide.access(self.crawled_path)) - elif self.crawled_path.lower().endswith(".xlsx"): + fileguide.access(self.crawled_path)) # pylint: disable=no-member + elif self.crawled_path.lower().endswith(".xlsx"): # pylint: disable=no-member self._header = get_xls_header( - fileguide.access(self.crawled_path)) + fileguide.access(self.crawled_path)) # pylint: disable=no-member else: raise RuntimeError("Readme format not recognized.") self.convert_win_paths() @@ -145,7 +145,7 @@ class WithREADME(object): globs = get_glob(self.header[field.key]) files = get_files_referenced_by_field( - globs, prefix=os.path.dirname(self.crawled_path)) + globs, prefix=os.path.dirname(self.crawled_path)) # pylint: disable=no-member description = [get_description(val) for val in self.header[field.key]] @@ -160,7 +160,7 @@ class WithREADME(object): LOGGER.warn("ATTENTION: the field {} does not reference any " "known files".format(field.key)) - self.attached_filenames.extend(flat_list) + self.attached_filenames.extend(flat_list) # pylint: disable=no-member def convert_path(self, el): """ converts the path in el to unix type @@ -185,7 +185,7 @@ class WithREADME(object): return win_path_converter(el) def convert_win_paths(self): - for field in self.win_paths: + for field in self.win_paths: # pylint: disable=no-member if field in self.header: if isinstance(self.header[field], list): @@ -245,7 +245,7 @@ class WithREADME(object): references[ref_type], record, ref_type, - to_be_updated=self.to_be_updated, + to_be_updated=self.to_be_updated, # pylint: disable=no-member ) def reference_included_records(self, record, fields, to_be_updated): @@ -255,16 +255,16 @@ class WithREADME(object): for field in fields: - if field.key not in self.header: + if field.key not in self.header: # pylint: disable=no-member continue included = [] - for item in self.header[field.key]: + for item in self.header[field.key]: # pylint: disable=no-member if INCLUDE.key in item: try: included.extend( get_entity_ids_from_include_file( - os.path.dirname(self.crawled_path), + os.path.dirname(self.crawled_path), # pylint: disable=no-member item[INCLUDE.key])) except ValueError: al = logging.getLogger("caosadvancedtools") diff --git a/src/caosadvancedtools/serverside/generic_analysis.py b/src/caosadvancedtools/serverside/generic_analysis.py index 66bec8a77e55709434b4285699e2cc2f8f804894..85d0c860df75fce205c5eaad77731fc04eee9e40 100644 --- a/src/caosadvancedtools/serverside/generic_analysis.py +++ b/src/caosadvancedtools/serverside/generic_analysis.py @@ -210,5 +210,4 @@ def main(): if __name__ == "__main__": - args = _parse_arguments() - sys.exit(main(args)) + sys.exit(main()) diff --git a/src/caosadvancedtools/serverside/helper.py b/src/caosadvancedtools/serverside/helper.py index 33deb8cc655b8191a14b6c5ff420ab2e64072bbb..ba75739e0fdc0a83f235db6920471afb196f4246 100644 --- a/src/caosadvancedtools/serverside/helper.py +++ b/src/caosadvancedtools/serverside/helper.py @@ -394,7 +394,7 @@ def send_mail(from_addr, to, subject, body, cc=None, bcc=None, err_msg = ("No sendmail executable configured. " "Please configure `Misc.sendmail` " "in your pycaosdb.ini.") - raise db.ConfigurationException(err_msg) + raise db.ConfigurationError(err_msg) sendmail = caosdb_config["Misc"]["sendmail"] # construct sendmail command