예제 #1
0
 def test_add_staging_providers(self):
     populate_main('stage')
     providers = PreprintProvider.find()
     assert_equal(PreprintProvider.find().count(),
                  len(STAGING_PREPRINT_PROVIDERS))
     ids = [provider._id for provider in providers]
     for id in STAGING_PREPRINT_PROVIDERS:
         assert_in(id, ids)
def update_or_create(provider_data):
    provider = PreprintProvider.load(provider_data['_id'])
    if provider:
        for key, val in provider_data.iteritems():
            setattr(provider, key, val)
        changed_fields = provider.save()
        if changed_fields:
            print('Updated {}: {}'.format(provider.name, changed_fields))
        return provider, False
    else:
        new_provider = PreprintProvider(**provider_data)
        new_provider.save()
        provider = PreprintProvider.load(new_provider._id)
        print('Added new preprint provider: {}'.format(provider._id))
        return new_provider, True
예제 #3
0
 def get_default_odm_query(self):
     provider = PreprintProvider.find_one(Q('_id', 'eq', self.kwargs['provider_id']))
     return (
         Q('preprint_file', 'ne', None) &
         Q('is_deleted', 'ne', True) &
         Q('is_public', 'eq', True) &
         Q('preprint_providers', 'eq', provider)
     )
예제 #4
0
 def get_default_odm_query(self):
     # TODO: this will return unpublished preprints so that users
     # can find and resume the publishing workflow, but filtering
     # public preprints should filter for `is_published`
     provider = PreprintProvider.find_one(Q('_id', 'eq', self.kwargs['provider_id']))
     return (
         Q('provider', 'eq', provider)
     )
예제 #5
0
 def test_add_default_providers(self):
     populate_main(None)
     providers = PreprintProvider.find()
     assert_equal(providers.count(), len(PROD_PREPRINT_PROVIDERS))
     ids = [provider._id for provider in providers]
     for id in PROD_PREPRINT_PROVIDERS:
         assert_in(id, ids)
     for id in set(STAGING_PREPRINT_PROVIDERS) - set(
             PROD_PREPRINT_PROVIDERS):
         assert_not_in(id, ids)
예제 #6
0
 def get_queryset(self):
     parent = self.request.query_params.get('filter[parents]', None)
     provider = PreprintProvider.load(self.kwargs['provider_id'])
     if parent:
         if parent == 'null':
             return provider.top_level_subjects
         #  Calculate this here to only have to do it once.
         allowed_parents = [id_ for sublist in provider.subjects_acceptable for id_ in sublist[0]]
         allows_children = [subs[0][-1] for subs in provider.subjects_acceptable if subs[1]]
         return [sub for sub in Subject.find(Q('parents', 'eq', parent)) if provider.subjects_acceptable == [] or self.is_valid_subject(allows_children=allows_children, allowed_parents=allowed_parents, sub=sub)]
     return provider.all_subjects
def update_or_create(provider_data):
    provider = PreprintProvider.load(provider_data['_id'])
    if provider:
        provider_data['subjects_acceptable'] = map(
            lambda rule: (map(get_subject_id, rule[0]), rule[1]),
            provider_data['subjects_acceptable']
        )
        provider_data['licenses_acceptable'] = [get_license(name) for name in provider_data['licenses_acceptable']]
        for key, val in provider_data.iteritems():
            setattr(provider, key, val)
        changed_fields = provider.save()
        if changed_fields:
            print('Updated {}: {}'.format(provider.name, changed_fields))
        return provider, False
    else:
        new_provider = PreprintProvider(**provider_data)
        new_provider.save()
        provider = PreprintProvider.load(new_provider._id)
        print('Added new preprint provider: {}'.format(provider._id))
        return new_provider, True
예제 #8
0
    def get_providers_to_add_remove(self, providers, new_providers):
        diff = relationship_diff(
            current_items={provider._id: provider for provider in providers},
            new_items={provider['_id']: provider for provider in new_providers}
        )

        providers_to_add = []
        for provider_id in diff['add']:
            provider = PreprintProvider.load(provider_id)
            if not provider:
                raise exceptions.NotFound(detail='PreprintProvider with id "{}" was not found'.format(provider_id))
            providers_to_add.append(provider)

        return providers_to_add, diff['remove'].values()
예제 #9
0
def update_or_create(provider_data):
    provider = PreprintProvider.load(provider_data['_id'])
    if provider:
        for key, val in provider_data.iteritems():
            setattr(provider, key, val)
        changed_fields = provider.save()
        if changed_fields:
            print('Updated {}: {}'.format(provider.name, changed_fields))
        return provider, False
    else:
        new_provider = PreprintProvider(**provider_data)
        new_provider.save()
        provider = PreprintProvider.load(new_provider._id)
        print('Added new preprint provider: {}'.format(provider._id))
        return new_provider, True
예제 #10
0
def update_or_create(provider_data):
    provider = PreprintProvider.load(provider_data['_id'])
    if provider:
        provider_data['subjects_acceptable'] = map(
            lambda rule: (map(get_subject_id, rule[0]), rule[1]),
            provider_data['subjects_acceptable'])
        provider_data['licenses_acceptable'] = [
            get_license(name) for name in provider_data['licenses_acceptable']
        ]
        for key, val in provider_data.iteritems():
            setattr(provider, key, val)
        changed_fields = provider.save()
        if changed_fields:
            print('Updated {}: {}'.format(provider.name, changed_fields))
        return provider, False
    else:
        new_provider = PreprintProvider(**provider_data)
        new_provider.save()
        provider = PreprintProvider.load(new_provider._id)
        print('Added new preprint provider: {}'.format(provider._id))
        return new_provider, True
예제 #11
0
 def get_queryset(self):
     return PreprintProvider.find(self.get_query_from_request())
예제 #12
0
 def get_queryset(self):
     provider = PreprintProvider.load(self.kwargs['provider_id'])
     return provider.licenses_acceptable if len(provider.licenses_acceptable) else super(PreprintProviderLicenseList, self).get_queryset()
예제 #13
0
def main():
    provider = PreprintProvider.find()[0]
    provider.subjects_acceptable = create_subject_rules()
    provider.save()
def main():
    provider = PreprintProvider.find()[0]
    provider.subjects_acceptable = create_subject_rules()
    provider.save()
예제 #15
0
 def get_object(self):
     return PreprintProvider.load(self.kwargs['provider_id'])
예제 #16
0
 def get_object(self, node_id):
     return PreprintProvider.load(node_id)
예제 #17
0
 def get_object(self, node_id):
     return PreprintProvider.load(node_id)
예제 #18
0
def get_campaigns():

    global CAMPAIGNS
    global CAMPAIGNS_LAST_REFRESHED

    logger = logging.getLogger(__name__)

    if not CAMPAIGNS or throttle_period_expired(CAMPAIGNS_LAST_REFRESHED, CAMPAIGN_REFRESH_THRESHOLD):

        # Native campaigns: PREREG and ERPC
        CAMPAIGNS = {
            'prereg': {
                'system_tag': 'prereg_challenge_campaign',
                'redirect_url': furl.furl(DOMAIN).add(path='prereg/').url,
                'confirmation_email_template': mails.CONFIRM_EMAIL_PREREG,
                'login_type': 'native',
            },
            'erpc': {
                'system_tag': 'erp_challenge_campaign',
                'redirect_url': furl.furl(DOMAIN).add(path='erpc/').url,
                'confirmation_email_template': mails.CONFIRM_EMAIL_ERPC,
                'login_type': 'native',
            },
        }

        # Institution Login
        CAMPAIGNS.update({
            'institution': {
                'system_tag': 'institution_campaign',
                'redirect_url': '',
                'login_type': 'institution',
            },
        })

        # Proxy campaigns: Preprints, both OSF and branded ones
        try:
            preprint_providers = PreprintProvider.find(Q('_id', 'ne', None))
            for provider in preprint_providers:
                if provider._id == 'osf':
                    template = 'osf'
                    name = 'OSF'
                    url_path = 'preprints/'
                else:
                    template = 'branded'
                    name = provider.name
                    url_path = 'preprints/{}'.format(provider._id)
                campaign = '{}-preprints'.format(provider._id)
                system_tag = '{}_preprints'.format(provider._id)
                CAMPAIGNS.update({
                    campaign: {
                        'system_tag': system_tag,
                        'redirect_url': furl.furl(DOMAIN).add(path=url_path).url,
                        'confirmation_email_template': mails.CONFIRM_EMAIL_PREPRINTS(template, name),
                        'login_type': 'proxy',
                        'provider': name,
                    }
                })
        except (NoResultsFound or QueryException or ImproperConfigurationError) as e:
            logger.warn('An error has occurred during campaign initialization: {}', e)

        CAMPAIGNS_LAST_REFRESHED = datetime.utcnow()

    return CAMPAIGNS
예제 #19
0
 def get_default_odm_query(self):
     provider = PreprintProvider.find_one(
         Q('_id', 'eq', self.kwargs['provider_id']))
     return (Q('preprint_file', 'ne', None) & Q('is_deleted', 'ne', True)
             & Q('is_public', 'eq', True)
             & Q('preprint_providers', 'eq', provider))
예제 #20
0
 def tearDown(self):
     PreprintProvider.remove()