def read(self, filename=None, read_detection_catalog=True):
        """
        Read a Party from a file.

        :type filename: str
        :param filename:
            File to read from - can be a list of files, and can contain
            wildcards.
        :type read_detection_catalog: bool
        :param read_detection_catalog:
            Whether to read the detection catalog or not, if False, catalog
            will be regenerated - for large catalogs this can be faster.

        .. rubric:: Example

        >>> Party().read()
        Party of 4 Families.
        """
        tribe = Tribe()
        families = []
        if filename is None:
            # If there is no filename given, then read the example.
            filename = os.path.join(os.path.dirname(__file__),
                                    '..', 'tests', 'test_data',
                                    'test_party.tgz')
        if isinstance(filename, list):
            filenames = []
            for _filename in filename:
                # Expand wildcards
                filenames.extend(glob.glob(_filename))
        else:
            # Expand wildcards
            filenames = glob.glob(filename)
        for _filename in filenames:
            with tarfile.open(_filename, "r:*") as arc:
                temp_dir = tempfile.mkdtemp()
                arc.extractall(path=temp_dir, members=_safemembers(arc))
            # Read in the detections first, this way, if we read from multiple
            # files then we can just read in extra templates as needed.
            # Read in families here!
            party_dir = glob.glob(temp_dir + os.sep + '*')[0]
            tribe._read_from_folder(dirname=party_dir)
            det_cat_file = glob.glob(os.path.join(party_dir, "catalog.*"))
            if len(det_cat_file) != 0 and read_detection_catalog:
                try:
                    all_cat = read_events(det_cat_file[0])
                except TypeError as e:
                    print(e)
                    pass
            else:
                all_cat = Catalog()
            for family_file in glob.glob(join(party_dir, '*_detections.csv')):
                template = [
                    t for t in tribe if _templates_match(t, family_file)]
                family = Family(template=template[0] or Template())
                new_family = True
                if family.template.name in [f.template.name for f in families]:
                    family = [
                        f for f in families if
                        f.template.name == family.template.name][0]
                    new_family = False
                family.detections = _read_family(
                    fname=family_file, all_cat=all_cat, template=template[0])
                if new_family:
                    families.append(family)
            shutil.rmtree(temp_dir)
        self.families = families
        return self
def read ( self , filename = None , read_detection_catalog = True ) : tribe = Tribe ( ) families = [ ] if filename is None : filename = os . path . join ( os . path . dirname ( __file__ ) , '..' , 'tests' , 'test_data' , 'test_party.tgz' ) if isinstance ( filename , list ) : filenames = [ ] for _filename in filename : filenames . extend ( glob . glob ( _filename ) ) else : filenames = glob . glob ( filename ) for _filename in filenames : with tarfile . open ( _filename , "r:*" ) as arc : temp_dir = tempfile . mkdtemp ( ) arc . extractall ( path = temp_dir , members = _safemembers ( arc ) ) party_dir = glob . glob ( temp_dir + os . sep + '*' ) [ 0 ] tribe . _read_from_folder ( dirname = party_dir ) det_cat_file = glob . glob ( os . path . join ( party_dir , "catalog.*" ) ) if len ( det_cat_file ) != 0 and read_detection_catalog : try : all_cat = read_events ( det_cat_file [ 0 ] ) except TypeError as e : print ( e ) pass else : all_cat = Catalog ( ) for family_file in glob . glob ( join ( party_dir , '*_detections.csv' ) ) : template = [ t for t in tribe if _templates_match ( t , family_file ) ] family = Family ( template = template [ 0 ] or Template ( ) ) new_family = True if family . template . name in [ f . template . name for f in families ] : family = [ f for f in families if f . template . name == family . template . name ] [ 0 ] new_family = False family . detections = _read_family ( fname = family_file , all_cat = all_cat , template = template [ 0 ] ) if new_family : families . append ( family ) shutil . rmtree ( temp_dir ) self . families = families return self
Read a Party from a file.

        :type filename: str
        :param filename:
            File to read from - can be a list of files, and can contain
            wildcards.
        :type read_detection_catalog: bool
        :param read_detection_catalog:
            Whether to read the detection catalog or not, if False, catalog
            will be regenerated - for large catalogs this can be faster.

        .. rubric:: Example

        >>> Party().read()
        Party of 4 Families.