def add_pmids(file_name, file_pmids, src_id, uname):
    """ add pmids """

    try:
        if len(file_pmids) > 0:
            existing = DBSession.query(Filedbentity).filter(
                Filedbentity.display_name == file_name).one_or_none()
            pmid_list = file_pmids
            if existing:
                for pmid in pmid_list:
                    pmid = int(pmid.strip())
                    existing_ref_file = DBSession.query(ReferenceFile).filter(
                        ReferenceFile.file_id ==
                        existing.dbentity_id).one_or_none()
                    ref = DBSession.query(Referencedbentity).filter(
                        Referencedbentity.pmid == pmid).one_or_none()
                    if ref and not existing_ref_file:
                        new_ref_file = ReferenceFile(
                            created_by=uname,
                            file_id=existing.dbentity_id,
                            reference_id=ref.dbentity_id,
                            source_id=src_id)
                        DBSession.add(new_ref_file)

    except Exception as e:
        logging.error("Exception occurred", exc_info=True)
def add_path_entries(file_name, file_path, src_id, uname):
    """ add paths to file_path table """

    try:
        existing = DBSession.query(Filedbentity).filter(
            Filedbentity.display_name == file_name).one_or_none()
        if not existing:
            logging.error('error with ' + file_name)
        path = DBSession.query(Path).filter_by(path=file_path).one_or_none()

        if path is None:
            logging.warning('Could not find path ')
        else:
            if existing:
                existing_filepath = DBSession.query(FilePath).filter(
                    and_(FilePath.file_id == existing.dbentity_id,
                         FilePath.path_id == path.path_id)).one_or_none()

                if not existing_filepath:
                    new_filepath = FilePath(file_id=existing.dbentity_id,
                                            path_id=path.path_id,
                                            source_id=src_id,
                                            created_by=uname)
                    DBSession.add(new_filepath)

    except Exception as e:
        logging.error("Exception occurred", exc_info=True)
Beispiel #3
0
def main():
    """"""
    _ = lambda text: text
    """-----------------User-----------------"""
    Permission.create('start_menu_access', _('Access to "Start" menu'))
    """-----------------Admin-----------------"""
    # menus
    Permission.create('admin_menu_access', _('Access to "Admin" menu'))
    Permission.create('distribution_menu_access',
                      _('Access to "Distribution" admin menu'))

    Permission.create('settings_menu_access',
                      _('Access to "Settings" admin menu'))

    # permissions menu
    Permission.create(Permission.view_permission,
                      _('Access to "Permissions" menu'))
    Permission.create(Permission.add_permission, _('Allow add permission'))
    Permission.create(Permission.delete_permission,
                      _('Allow remove permission'))

    Permission.create('superuser', _('Superuser'))

    DBSession.commit()

    users = DBSession.query(User).filter(
        User.chat_id.in_(SUPERUSER_ACCOUNTS)).all()
    permission = DBSession.query(Permission).get('superuser')
    for user in users:
        if not user.has_permission(permission.code):
            user.permissions.append(permission)
        DBSession.add(user)
    DBSession.commit()
Beispiel #4
0
def main():
    users = DBSession.query(User).filter(User.is_active == True).all()

    for user in users:
        user.init_permissions()
        DBSession.add(user)
    DBSession.commit()
Beispiel #5
0
def stop(bot, update, user_data):
    _ = user_data['_'] if '_' in user_data else gettext
    user = DBSession.query(User).filter(
                User.chat_id == user_data['user'].chat_id).first()
    user.active = False
    DBSession.add(user)
    DBSession.commit()
    bot.send_message(chat_id=user.chat_id,
                     text='Вы удалены из бота.')
Beispiel #6
0
def insert_abstract(pmid, reference_id, record, source_id, journal_abbrev,
                    journal_title, issn_print, created_by):
    """ Add abstract to Referencedocument table

    This method does not return anything, just does the necessary CRUD operations
    
    Parameters
    ----------
    pmid: int
    reference_id: int
    source_id: int
    journal_abbrev: str
    journal_title: str
    issn_print: str
    created_by: str

    Return
    ------
    empty
        does not return anything


    """

    text = record.get('AB', '')

    if text == '':
        return
    locus_names_ids = DBSession.query(Locusdbentity.display_name,
                                      Locusdbentity.sgdid).all()
    html = link_gene_names(text, locus_names_ids)
    x = Referencedocument(document_type='Abstract',
                          source_id=source_id,
                          reference_id=reference_id,
                          text=text,
                          html=html,
                          created_by=created_by)
    DBSession.add(x)

    entries = create_bibentry(pmid, record, journal_abbrev, journal_title,
                              issn_print)
    y = Referencedocument(document_type='Medline',
                          source_id=source_id,
                          reference_id=reference_id,
                          text='\n'.join([
                              key + ' - ' + str(value)
                              for key, value in entries if value is not None
                          ]),
                          html='\n'.join([
                              key + ' - ' + str(value)
                              for key, value in entries if value is not None
                          ]),
                          created_by=created_by)
    DBSession.add(y)
    DBSession.flush()
    DBSession.refresh(x)
Beispiel #7
0
def insert_pubtypes(pmid, reference_id, pubtypes, source_id, created_by):
    for type in pubtypes:
        x = Referencetype(display_name=type,
                          obj_url='/referencetype/' + type.replace(' ', '_'),
                          source_id=source_id,
                          reference_id=reference_id,
                          created_by=created_by)
        DBSession.add(x)
    DBSession.flush()
    DBSession.refresh(x)
Beispiel #8
0
def get_journal_id(record, created_by):
    journal_abbr = record.get('TA', '')
    journal_full_name = record.get('JT', '')

    # 1469-221X (Print) 1469-221X (Linking)
    # 1573-6881 (Electronic) 0145-479X (Linking)
    issn_list = record.get('IS', '').split(') ')
    issn_print = ''
    issn_electronic = ''
    for issn in issn_list:
        if "Print" in issn or "Linking" in issn:
            issn_print = issn.split(' ')[0]
        if "Electronic" in issn:
            issn_electronic = issn.split(' ')[0]
    if issn_print:
        journals = DBSession.query(Journal).filter_by(
            issn_print=issn_print).all()
        if len(journals) > 0:
            return journals[0].journal_id, journals[
                0].med_abbr, journal_full_name, issn_print

    if journal_abbr == '':
        return None, '', '', ''

    if journal_abbr:
        journals = DBSession.query(Journal).filter_by(
            med_abbr=journal_abbr).all()
        if len(journals) > 0:
            return journals[0].journal_id, journals[
                0].med_abbr, journal_full_name, issn_print

    source_id = 824  # 'PubMed'
    shortened_full_name = (
        journal_full_name[:197] +
        '...') if len(journal_full_name) > 200 else journal_full_name
    format_name = journal_full_name.replace(' ', '_') + journal_abbr.replace(
        ' ', '_')

    j = Journal(issn_print=issn_print,
                issn_electronic=issn_electronic,
                display_name=shortened_full_name,
                format_name=(format_name[:97] +
                             '...') if len(format_name) > 100 else format_name,
                title=shortened_full_name,
                med_abbr=journal_abbr,
                source_id=source_id,
                obj_url='/journal/' + format_name,
                created_by=created_by)
    DBSession.add(j)
    DBSession.flush()
    DBSession.refresh(j)

    return j.journal_id, j.med_abbr, journal_full_name, issn_print
Beispiel #9
0
def stop(update, context):
    # if user never have a conversation with bot and sending /stop he has empty user_data
    if context.user_data:
        _ = context.user_data['user'].translator
        user = DBSession.query(User).filter(
            User.chat_id == context.user_data['user'].chat_id).first()
        user.active = False
        user.chat_room_id = None
        DBSession.add(user)
        DBSession.commit()
        context.bot.send_message(chat_id=user.chat_id,
                                 text=_("You are deleted from this bot."))
Beispiel #10
0
def insert_authors(reference_id, authors, source_id, created_by):
    if len(authors) == 0:
        return

    i = 0
    for author in authors:
        i = i + 1
        x = Referenceauthor(display_name=author,
                            obj_url='/author/' + author.replace(' ', '_'),
                            source_id=source_id,
                            reference_id=reference_id,
                            author_order=i,
                            author_type='Author',
                            created_by=created_by)
        DBSession.add(x)
    DBSession.flush()
    DBSession.refresh(x)
Beispiel #11
0
def insert_urls(pmid, reference_id, doi_url, pmc_url, source_id, created_by):
    x = ReferenceUrl(display_name='PubMed',
                     obj_url=pubmed_root + str(pmid),
                     reference_id=reference_id,
                     url_type='PubMed',
                     source_id=source_id,
                     created_by=created_by)
    DBSession.add(x)
    if doi_url:
        x = ReferenceUrl(display_name='DOI full text',
                         obj_url=doi_url,
                         reference_id=reference_id,
                         url_type='DOI full text',
                         source_id=source_id,
                         created_by=created_by)
        DBSession.add(x)
    if pmc_url:
        x = ReferenceUrl(display_name='PMC full text',
                         obj_url=pmc_url,
                         reference_id=reference_id,
                         url_type='PMC full text',
                         source_id=source_id,
                         created_by=created_by)
        DBSession.add(x)
    DBSession.flush()
    DBSession.refresh(x)
Beispiel #12
0
def users_from_chat(bot=None, job=None):

    data = get_settings_file(SETTINGS_FILE)
    day, month, year = data['transition'].split('.')
    transition = date(int(year), int(month), int(day))

    with client:
        entity = client.get_entity(data['chat_link'])
        users_in_chat = client.get_participants(entity)
        for user_chat in users_in_chat:
            user = DBSession.query(User).filter(User.chat_id == user_chat.id).first()
            if user is None:
                user = User()
                user.chat_id = user_chat.id
                user.name = user_chat.first_name
                user.username = user_chat.username
                user.active = True
                user.join_date = date.today()
                user.expiration_date = transition

                DBSession.add(user)
                DBSession.commit()
                logger.info(f"Added {user.username}")
            else: pass
Beispiel #13
0
def insert_relations(pmid, reference_id, record, created_by):
    tag_to_type = {
        "CON": "Comment",
        "CIN": "Comment",
        "EIN": "Erratum",
        "EFR": "Erratum",
        "CRI": "Corrected and Republished",
        "CRF": "Corrected and Republished",
        "PRIN": "Partial retraction",
        "PROF": "Partial retraction",
        "RPI": "Republished",
        "RPF": "Republished",
        "RIN": "Retraction",
        "ROF": "Retraction",
        "UIN": "Update",
        "UOF": "Update",
        "SPIN": "Summary for patients",
        "ORI": "Original report"
    }

    inText = None
    onText = None
    rtype = None
    for tag in [
            'CIN', 'EIN', 'CRI', 'PRIN', 'RPI', 'RIN', 'UIN', 'SPIN', 'ORI'
    ]:
        if record.get(tag):
            inText = record[tag]
            rtype = tag_to_type[tag]
            break

    for tag in ['CON', 'EFR', 'CRF', 'PROF', 'RPF', 'ROF', 'UOF']:
        if record.get(tag):
            onText = record[tag]
            rtype = tag_to_type[tag]
            break

    if inText is None and onText is None:
        return

    source_id = 834  # 'SGD'

    parent_reference_id = None
    child_reference_id = None

    if type(inText) == list:
        inText = inText[0]
    if inText is not None and "PMID:" in inText:
        print(inText)
        parent_reference_id = reference_id
        child_pmid = inText.split("PMID: ")[1].strip()
        print(child_pmid)
        child_reference_id = get_reference_id(int(child_pmid))
        print('is there a child?')
        print((child_pmid, child_reference_id))
        if child_reference_id is not None:
            x = ReferenceRelation(parent_id=parent_reference_id,
                                  child_id=child_reference_id,
                                  source_id=source_id,
                                  correction_type=rtype,
                                  created_by=created_by)
            DBSession.add(x)

    if type(onText) == list:
        onText = onText[0]
    if onText is not None and "PMID:" in onText:
        child_reference_id = reference_id
        parent_pmid = onText.split("PMID: ")[1].strip()
        parent_reference_id = get_reference_id(int(parent_pmid))
        print('is there a parent?')
        print((parent_pmid, parent_reference_id))
        if parent_reference_id is not None:
            x = ReferenceRelation(parent_id=parent_reference_id,
                                  child_id=child_reference_id,
                                  source_id=source_id,
                                  correction_type=rtype,
                                  created_by=created_by)
            DBSession.add(x)

    DBSession.flush()
    DBSession.refresh(x)
Beispiel #14
0
def insert_referencedbentity(pmid,
                             source_id,
                             record,
                             created_by,
                             method_obtained="Curator triage"):
    """ Inserts referencedbentity object into table referencedbentity
    
    Parameters
    ----------
    pmid: int
    source_id: int
    record: dict
    created_oby: str
    method_obtained: str, optional

    Returns
    --------
    list

    """

    pubstatus, date_revised = get_pubstatus_date_revised(record)
    journal_id, journal, journal_title, issn_print = get_journal_id(
        record, created_by)
    pubdate = record.get('DP', None)
    year = pubdate.split(' ')[0]
    title = record.get('TI', None)
    authors = record.get('AU', [])
    volume = record.get('VI', None)
    issue = record.get('IP', None)
    pages = record.get('PG', None)
    citation = set_cite(title, authors, year, journal, volume, issue, pages)
    doi, doi_url = get_doi(record)
    pmcid = record.get('PMC', None)
    pmc_url = pmc_root + pmcid + '/' if pmcid else None

    publication_status = status
    fulltext_status = pdf_status
    if pubstatus == 'aheadofprint':
        publication_status = epub_status
        fulltext_status = epub_pdf_status

    if year:
        year = int(year)
    if journal_id:
        journal_id = int(journal_id)

    x = Referencedbentity(display_name=citation.split(')')[0] + ')',
                          source_id=source_id,
                          subclass='REFERENCE',
                          dbentity_status='Active',
                          method_obtained=method_obtained,
                          publication_status=publication_status,
                          fulltext_status=fulltext_status,
                          citation=citation,
                          year=year,
                          pmid=int(pmid),
                          pmcid=pmcid,
                          date_published=pubdate,
                          date_revised=date_revised,
                          issue=issue,
                          page=pages,
                          volume=volume,
                          title=title,
                          doi=doi,
                          journal_id=journal_id,
                          created_by=created_by)

    DBSession.add(x)
    DBSession.flush()
    DBSession.refresh(x)
    dbentity_id = x.dbentity_id
    ## insert into REFERENCEDOCUMENT
    insert_abstract(pmid, dbentity_id, record, source_id, journal,
                    journal_title, issn_print, created_by)

    return [dbentity_id, authors, doi_url, pmc_url, x.sgdid, x]
Beispiel #15
0
def insert_author_response(request):

    try:
        sgd = DBSession.query(Source).filter_by(display_name='Direct submission').one_or_none()
        source_id = sgd.source_id
        created_by = 'OTTO'

        email = request.params.get('email')
        if email == '':
            return HTTPBadRequest(body=json.dumps({'error': "Please enter your email address."}), content_type='text/json')
        is_email_valid = validate_email(email, verify=False)
        if not is_email_valid:
            msg = email + ' is not a valid email.'
            return HTTPBadRequest(body=json.dumps({'error': msg}), content_type='text/json')

        pmid = request.params.get('pmid')
        pmid = pmid.replace('PMID:', '').replace('Pubmed ID:', '').strip()
        if pmid == '':
            return HTTPBadRequest(body=json.dumps({'error': "Please enter Pubmed ID for your paper."}), content_type='text/json')
        if pmid.isdigit():
            pmid = int(pmid)
        else:
            return HTTPBadRequest(body=json.dumps({'error': "Please enter a number for Pubmed ID."}), content_type='text/json')

        x = DBSession.query(Authorresponse).filter_by(author_email=email, pmid=int(pmid)).one_or_none()
        if x is not None:
            return HTTPBadRequest(body=json.dumps({'error': "You have already subomitted info for PMID:" + str(pmid)+"."}), content_type='text/json')

        has_novel_research = '0'
        if request.params.get('has_novel_research'):
            has_novel_research = '1'
        has_large_scale_data = '0'
        if request.params.get('has_large_scale_data'):
            has_large_scale_data = '1'

        research_results = request.params.get('research_result')
        dataset_description = request.params.get('dataset_desc')
        gene_list = request.params.get('genes')
        other_description = request.params.get('other_desc')

        x = Authorresponse(source_id = source_id,
                           pmid = pmid,
                           author_email = email,
                           has_novel_research = has_novel_research,
                           has_large_scale_data = has_large_scale_data,
                           has_fast_track_tag = '0',
                           curator_checked_datasets = '0',
                           curator_checked_genelist = '0',
                           no_action_required = '0',
                           research_results = research_results,
                           gene_list = gene_list,
                           dataset_description = dataset_description,
                           other_description = other_description,
                           created_by = created_by)

        DBSession.add(x)
        transaction.commit()
        return {'curation_id': 0}
    except Exception as e:
        transaction.abort()
        return HTTPBadRequest(body=json.dumps({'error': "ERROR: " + str(e)}), content_type='text/json')