Ejemplo n.º 1
0
def fetch_rois_from_metadata(**kwargs):
    '''
    DESCRIPTION MISSING
    '''
    if 'client' not in kwargs.keys():
        kwargs['client'] = Client(conf.neuprint_URL, conf.dataset_version,
                                  conf.api_token)

    metadata = fetch_meta(client=kwargs['client'])
    #print(metadata.keys())
    g = fetch_roi_hierarchy(mark_primary=False,
                            include_subprimary=True,
                            format='nx',
                            client=kwargs['client'])

    nonhierarchy_rois = metadata['nonHierarchicalROIs']
    primary_rois = metadata['primaryRois']

    all_rois = list(g.nodes)

    toplevel_rois = []
    for i, s in enumerate(g.successors('hemibrain')):
        toplevel_rois += [s]

    return all_rois, primary_rois, nonhierarchy_rois, toplevel_rois
def setup_dataset(dataset, published):
    """ Insert or update a data set in Mongo
        Keyword arguments:
          dataset: data set
          published: True=public, False=private
        Returns:
          last_uid: last UID assigned
          action: what to do with bodies in this data set (ignore, insert, or update)
    """
    LOGGER.info("Initializing Client for %s %s", ARG.SERVER, dataset)
    npc = Client(ARG.SERVER, dataset=dataset)
    set_default_client(npc)
    result = fetch_meta(client=npc)
    if ':' in dataset:
        name, version = dataset.split(':')
        version = version.replace('v', '')
    else:
        name = dataset
        version = ''
    coll = DBM.emDataSet
    check = coll.find_one({
        "name": name,
        "version": version,
        "published": published
    })
    action = 'ignore'
    if not check:
        if result['dataset'] not in GENDER:
            LOGGER.error("%s does not have a gender defined",
                         result['dataset'])
            sys.exit(-1)
        payload = {
            "class": "org.janelia.model.domain.flyem.EMDataSet",
            "ownerKey": "group:flyem",
            "readers": ["group:flyem"],
            "writers": ["group:flyem"],
            "name": result['dataset'],
            "version": version,
            "gender": GENDER[result['dataset']],
            "creationDate": to_datetime(result['lastDatabaseEdit']),
            "updatedDate": to_datetime(result['lastDatabaseEdit']),
            "active": True,
            "published": published
        }
        if published:
            payload['readers'] = ["group:flyem", "group:workstation_users"]
        last_uid = generate_uid()
        payload['_id'] = last_uid
        LOGGER.debug(payload)
        if ARG.WRITE:
            post_id = coll.insert_one(payload).inserted_id
        else:
            post_id = last_uid
        if post_id != last_uid:
            LOGGER.critical("Could not insert to Mongo with requested _id")
            sys.exit(-1)
        LOGGER.info("Inserted data set %s (UID: %s, datetime: %s)", dataset,
                    post_id, result['lastDatabaseEdit'])
        action = 'insert'
    else:
        LOGGER.info("%s already exists in Mongo (UID: %s)", dataset,
                    check['_id'])
        last_uid = check['_id']
        neuprint_dt = to_datetime(result['lastDatabaseEdit'])
        if neuprint_dt > check['updatedDate'] or ARG.FORCE:
            LOGGER.warning("Update required for %s (last changed %s)", dataset,
                           result['lastDatabaseEdit'])
            payload = {"updatedDate": datetime.now(), "active": True}
            if ARG.WRITE:
                coll.update_one({"_id": check['_id']}, {"$set": payload})
            action = 'update'
        else:
            LOGGER.info("No update required for %s (last changed %s)", dataset,
                        check['updatedDate'])
    return last_uid, action
Ejemplo n.º 3
0
def test_fetch_meta(client):
    meta = fetch_meta()
    assert isinstance(meta, dict)