Source code for caesar_external.extractor



"""
Get classifications from Panoptes
"""

from caesar_external.utils.caesar_utils import Client
from caesar_external.data import Config
import panoptes_client as pan
import logging

logger = logging.getLogger(__name__)


[docs]class Extractor:
[docs] @classmethod def last_id(cls, next_id=None): if next_id is None: return Config.instance().last_id Config.instance().last_id = next_id
[docs] @classmethod def get_classifications(cls, last_id): logger.debug('Getting classifications') project = Config.instance().project for c in Client.extract(project, last_id): cl = { 'id': int(c.id), 'subject': int(c.links.subjects[0].id), 'project': int(c.links.project.id), 'workflow': int(c.raw['links']['workflow']), 'annotations': c.annotations, } if cl['workflow'] != Config.instance().workflow: continue if 'user' in c.raw['links']: cl.update({'user': c.raw['links']['user']}) else: session = c.raw['metadata']['session'][:10] cl.update({'user': 'not-logged-in-%s' % session}) yield cl
[docs] @classmethod def next(cls): cl = None for cl in cls.get_classifications(cls.last_id()): yield cl if cl: cls.last_id(cl['id'])