Example #1
0
def claim_verdicts_from_airtable(verdicts_to_sync=None,
                                 max_verdicts=None,
                                 sync_async=False):
    if verdicts_to_sync is None:
        query = Verdict.query.filter(Verdict.scienceFeedbackUrl != None)
        if max_verdicts is not None:
            query = query.limit(max_verdicts)

        verdicts = query.all()
    else:
        verdicts = verdicts_to_sync

    if max_verdicts is not None:
        max_verdicts = len(verdicts)

    urls = [verdict.scienceFeedbackUrl for verdict in verdicts][:max_verdicts]
    if sync_async:
        claim_reviews = map_asynchronous(claim_review_from_url, urls)
    else:
        claim_reviews = [claim_review_from_url(url) for url in urls]

    for (index, verdict) in enumerate(verdicts):
        claim_review = claim_reviews[index]
        if not claim_review:
            continue

        for conclusion in claim_review['conclusions']:
            try:
                tag = Tag.create_or_modify({
                    '__SEARCH_BY__': ['label', 'type'],
                    'label': conclusion,
                    'type': TagType.CONCLUSION
                })
                if tag.id is None:
                    logger.info('Saving tag {}'.format(as_dict(tag)))
                    ApiHandler.save(tag)

                verdict_tag = VerdictTag.create_or_modify({
                    '__SEARCH_BY__': ['tagId', 'verdictId'],
                    'tagId':
                    humanize(tag.id),
                    'verdictId':
                    humanize(verdict.id)
                })
                verdict.verdictTags = verdict.verdictTags + [verdict_tag]

            except IntegrityError as e:
                logger.error('IntegrityError: {}, Conclusion: {}'.format(
                    e, conclusion))
            except InvalidRequestError as e:
                logger.error('InvalidRequestError: {}, Conclusion: {}'.format(
                    e, conclusion))
            except NotNullViolation as violation:
                logger.error('NotNullViolation: {}, Conclusion: {}'.format(
                    violation, conclusion))

    return verdicts
def create_tags():
    logger.info('create_tags')

    tags = []

    for tag in TAGS:
        tags.append(Tag.create_or_modify(tag))

    ApiHandler.save(*tags)

    logger.info('created {} tags'.format(len(tags)))
Example #3
0
def sync():
    logger.info('sync tags data...')
    tags = []
    for tag_dict in TAGS:
        tag = Tag.create_or_modify({
            '__SEARCH_BY__': ['label', 'type'],
            **tag_dict
        })
        tags.append(tag)
    ApiHandler.save(*tags)
    logger.info('sync tags data...Done.')