Esempio n. 1
0
    def add_records(self, records):
        """ Recursively add records to database """

        roots = []
        nodes = defaultdict(list)
        seen = set()
        for record in records:
            parents = record.pop("parents")
            record = utils.tidy_nans(record)
            node = self.table(**record)
            seen.add(node.name)
            if len(parents) == 0:
                roots.append(node)
            else:
                for parent in parents:
                    nodes[parent].append(node)

        for n in nodes.keys():
            assert (n in seen), f"{n} not in nodes"

        def recurse(node, memo):
            for child in memo[node.name]:
                node.children.append(recurse(child, memo))
            return node

        trees = [recurse(p, nodes) for p in roots]

        with self.get_session() as session:
            session.add_all(trees)
        return
Esempio n. 2
0
    def add_records(self, records):
        """ Recursively add records to database """

        logger.info("Processing taxon file.")

        root = None
        nodes = defaultdict(list)
        for record in records:
            record = utils.tidy_nans(record)
            node = self.table(**record)
            if node.taxid == 1:
                root = node
            else:
                nodes[node.parent_taxid].append(node)

        logger.info("Constructing tree.")

        def recurse(node, memo):
            for child in memo[node.taxid]:
                node.children.append(recurse(child, memo))
            return node

        tree = recurse(root, nodes)

        logger.info("Adding to database.")
        with self.get_session() as session:
            session.add(tree)
        return
Esempio n. 3
0
    def add_records(self, records):
        """ Recursively add records to database """

        logger.info("Processing taxon file.")

        roots = []
        nodes = defaultdict(list)
        for record in records:
            parents = record.pop("parents")
            record = utils.tidy_nans(record)
            node = self.table(**record)
            if pd.isna(parents) or len(parents) == 0:
                roots.append(node)
            else:
                for parent in parents:
                    nodes[parent].append(node)

        def recurse(node, memo):
            for child in memo[node.id]:
                node.children.append(recurse(child, memo))
            return node

        tree = [recurse(root, nodes) for root in roots]

        with self.get_session() as session:
            session.add_all(tree)
        return
Esempio n. 4
0
    def add_table(self, table):
        records = []

        for i, loc in table.iterrows():
            this_loc = self._from_series(loc)
            this_loc = utils.tidy_nans(this_loc)
            records.append(this_loc)

        self.add_records(records)
        return
Esempio n. 5
0
    def add_records(self, records):
        """ Recursively add records to database """

        with self.get_session() as session:
            for record in records:
                record = utils.tidy_nans(record)
                sample_id = record.pop("sample_id")
                contributor_name = record.pop("contributor_name")

                sample = session.query(
                    db.Sample).filter(db.Sample.id == sample_id).one()
                contributor = session.query(db.Contributor).filter(
                    db.Contributor.name == contributor_name).one()

                record["contributor"] = contributor
                record["sample"] = sample
                record = self.table(**record)
                session.add(record)
        return
Esempio n. 6
0
    def add_records(self, records):
        """ Recursively add records to database """

        with self.get_session() as session:
            for record in records:
                taxid = record.pop("taxid")
                sample_id = record.pop("sample_id")

                record = utils.tidy_nans(record)
                sample = session.query(
                    db.Sample).filter(db.Sample.id == sample_id).one()
                taxon = session.query(
                    db.Taxon).filter(db.Taxon.taxid == taxid).one()

                record["taxon"] = taxon
                record["sample"] = sample
                record = self.table(**record)
                session.add(record)
        return
Esempio n. 7
0
    def add_records(self, records):
        """ Recursively add records to database """

        with self.get_session() as session:
            for record in records:
                record = utils.tidy_nans(record)
                pesticide_name = record.pop("pesticide_name")
                sample_id = record.pop("sample_id")

                print(pesticide_name, sample_id)
                sample = session.query(db.Sample).filter(
                    db.Sample.id == sample_id).one()
                pesticide = session.query(db.Pesticide).filter(
                    db.Pesticide.name == pesticide_name).one()

                record["pesticide"] = pesticide
                record["sample"] = sample
                record = self.table(**record)
                session.add(record)
        return