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)
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'))
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)
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)
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()}