示例#1
0
    def test_get_active_characteristics_filters_by_period(self):
        self.setup_test_data()
        period_1 = ReportingPeriod.get(ReportingPeriod.title == 'Period 1')
        clinic_a = Clinic.get(Clinic.name == 'Clinic A')
        period2 = ReportingPeriod(
            title='Period 2',
            start_date=datetime.datetime(2014, 1, 1),
            end_date=datetime.datetime(2014, 1, 1))

        DBSession.add(period2)
        DBSession.flush()
        clinic_char1 = ClinicCharacteristics(
            clinic_id=clinic_a.id,
            characteristic_id='one',
            period_id=period_1.id)

        clinic_char2 = ClinicCharacteristics(
            clinic_id=clinic_a.id,
            characteristic_id='one',
            period_id=period2.id)

        DBSession.add_all([clinic_char1, clinic_char2])

        characteristics = clinic_a.get_active_characteristics(period_1)

        self.assertEqual(len(characteristics), 1)
示例#2
0
def oauth_callback(request):
    # check if we have `error` in our params, meaning user canceled
    if 'error' in request.GET:
        # redirect to login page with an alert
        request.session.flash(u"You must select authorize to continue",
                              'error')
        return HTTPFound(request.route_url('auth', action='login'))

    # TODO: validate the `oauth_state` session
    base_url = request.registry.settings['oauth_base_url']
    state = request.GET.get('state')
    client_id = request.registry.settings['oauth_client_id']
    client_secret = request.registry.settings['oauth_secret']
    token_url = "{base_url}{path}".format(
        base_url=base_url, path=request.registry.settings['oauth_token_path'])
    redirect_uri = request.route_url('auth', action='callback')

    session = OAuth2Session(client_id, state=state, redirect_uri=redirect_uri)
    code = request.GET.get('code')
    token = session.fetch_token(token_url,
                                client_secret=client_secret,
                                code=code)

    # retrieve username and store in db if it doesnt exist yet
    user_api_url = "{base_url}{path}".format(
        base_url=base_url,
        path=request.registry.settings['oauth_user_api_path'])
    response = session.request('GET', user_api_url)
    try:
        user_data = json.loads(response.text)
    except ValueError:
        # couldn't decode json
        pass
    else:
        refresh_token = token['refresh_token']
        try:
            ona_user = OnaUser.get_or_create_from_api_data(
                user_data, refresh_token)
        except ValueError:
            pass
        else:
            request.session['oauth_token'] = json.dumps(token)
            # flash to get the auto-inc id
            DBSession.flush()
            user_id = ona_user.user.id

            # login user
            headers = remember(request, user_id)

            # TODO: redirect to `came_from` url
            return HTTPFound(request.route_url('default'), headers=headers)

    request.session.flash(u"Failed to login, please try again", 'error')
    return HTTPFound(request.route_url('auth', action='login'))
示例#3
0
 def test_get_item_returns_reporting_period(self):
     self.setup_test_data()
     period = ReportingPeriod(title="2013/2014",
                              start_date=datetime.datetime(2013, 3, 13),
                              end_date=datetime.datetime(2014, 3, 13))
     DBSession.add(period)
     DBSession.flush()
     period = ReportingPeriod.newest()
     user = User.newest()
     selected_period = user.__getitem__(period.id)
     self.assertIsInstance(selected_period, ReportingPeriod)
     self.assertEqual(selected_period, period)
示例#4
0
    def test_get_item_retrieves_by_id(self):
        period = ReportingPeriod(title="2014/2015",
                                 start_date=datetime.date(2014, 2, 1),
                                 end_date=datetime.date(2015, 2, 1))
        DBSession.add(period)
        DBSession.flush()
        id = period.id

        factory = ReportingPeriodFactory(testing.DummyRequest())
        period = factory.__getitem__(id)
        self.assertEqual(period.id, id)
        self.assertEqual(period.__parent__, factory)
        self.assertEqual(period.__name__, id)
示例#5
0
    def create(self):
        form = Form(ReportingPeriodForm().bind(),
                    buttons=('Save', ),
                    css_class='form-horizontal')
        if self.request.method == "POST":
            post = self.request.POST.items()
            try:
                payload = form.validate(post)
            except ValidationFailure:
                pass
            else:
                if payload['form_xpath'] not in ALLOWED_XPATHS and \
                   valid_year(payload['form_xpath']) is None:
                    self.request.session.flash(
                        _(u"Only numeric values 1-5 and calendar "
                          "years (YYYY) allowed For Form Xpath"), 'error')

                elif DBSession.query(ReportingPeriod).filter_by(
                        form_xpath=payload['form_xpath']).first():
                    self.request.session.flash(_(u"Form Xpath Exists"),
                                               'error')

                else:
                    period = ReportingPeriod(title=payload['title'],
                                             form_xpath=payload['form_xpath'],
                                             start_date=payload['start_date'],
                                             end_date=payload['end_date'])
                    DBSession.add(period)
                    DBSession.flush()
                    self.request.session.flash(_(u"Reporting period created"),
                                               'success')
                    return HTTPFound(
                        self.request.route_url('periods', traverse=('list')))

        # render form
        return {'form': form, 'period': ReportingPeriod.get_current_period()}