Skip to content

Commit 6e98bf6

Browse files
committed
Start getting single form info
1 parent 8c1b34b commit 6e98bf6

File tree

5 files changed

+63
-4
lines changed

5 files changed

+63
-4
lines changed

ckanext/activityinfo/actions/activity_info.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,29 @@ def act_info_get_forms(context, data_dict):
5555
'database': data['database']
5656
}
5757
return ret
58+
59+
60+
def act_info_get_form(context, data_dict):
61+
'''
62+
Action function to get a specific ActivityInfo form.
63+
'''
64+
toolkit.check_access('act_info_get_form', context, data_dict)
65+
user = context.get('user')
66+
database_id = data_dict.get('database_id')
67+
form_id = data_dict.get('form_id')
68+
if not database_id:
69+
raise toolkit.ValidationError({'database_id': 'Missing value'})
70+
if not form_id:
71+
raise toolkit.ValidationError({'form_id': 'Missing value'})
72+
73+
log.debug(f"Getting ActivityInfo form {form_id} for database {database_id} and user {user}")
74+
token = get_user_token(user)
75+
aic = ActivityInfoClient(api_key=token)
76+
try:
77+
form = aic.get_form(database_id, form_id)
78+
except HTTPError as e:
79+
error = f"Error retrieving form {form_id} for database {database_id} and user {user}: {e}"
80+
log.error(error)
81+
raise ActivityInfoConnectionError(error)
82+
83+
return form

ckanext/activityinfo/auth/activity_info.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,9 @@ def act_info_get_databases(context, data_dict):
2626
@require_activity_info_token_decorator
2727
def act_info_get_forms(context, data_dict):
2828
return {'success': True}
29+
30+
31+
@toolkit.auth_disallow_anonymous_access
32+
@require_activity_info_token_decorator
33+
def act_info_get_form(context, data_dict):
34+
return {'success': True}

ckanext/activityinfo/blueprints/activity_info.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def databases():
3838
return toolkit.render('activity_info/databases.html', extra_vars)
3939

4040

41-
@activityinfo_bp.route('/databases/<database_id>/forms')
41+
@activityinfo_bp.route('/database/<database_id>/forms')
4242
def forms(database_id):
4343
try:
4444
data = toolkit.get_action('act_info_get_forms')(
@@ -60,6 +60,31 @@ def forms(database_id):
6060
return toolkit.render('activity_info/forms.html', extra_vars)
6161

6262

63+
@activityinfo_bp.route('/database/<database_id>/form/<form_id>')
64+
def form(database_id, form_id):
65+
try:
66+
data = toolkit.get_action('act_info_get_form_details')(
67+
context={'user': toolkit.c.user},
68+
data_dict={
69+
'database_id': database_id,
70+
'form_id': form_id
71+
}
72+
)
73+
except (ActivityInfoConnectionError, toolkit.ValidationError) as e:
74+
message = f"Could not retrieve ActivityInfo form details: {e}"
75+
log.error(message)
76+
toolkit.h.flash_error(message)
77+
return toolkit.redirect_to('activity_info.forms', database_id=database_id)
78+
79+
log.info(f"Retrieved {data}")
80+
extra_vars = {
81+
'form': data['form'],
82+
'database_id': database_id,
83+
'database': data['database'],
84+
}
85+
return toolkit.render('activity_info/form_details.html', extra_vars)
86+
87+
6388
@activityinfo_bp.route('/update-api-key', methods=['POST'])
6489
def update_api_key():
6590
"""Create or update the current ActivityInfo API key for the logged-in user."""

ckanext/activityinfo/plugin.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def get_actions(self):
2626
return {
2727
'act_info_get_databases': activity_info_actions.act_info_get_databases,
2828
'act_info_get_forms': activity_info_actions.act_info_get_forms,
29+
'act_info_get_form': activity_info_actions.act_info_get_form,
2930
}
3031

3132
# IAuthFunctions
@@ -34,6 +35,7 @@ def get_auth_functions(self):
3435
return {
3536
'act_info_get_databases': activity_info_auth.act_info_get_databases,
3637
'act_info_get_forms': activity_info_auth.act_info_get_forms,
38+
'act_info_get_form': activity_info_auth.act_info_get_form,
3739
}
3840

3941
# ITemplateHelpers

ckanext/activityinfo/tests/test_activityinfo_client.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def test_get_databases(requests_mock_fixture, client):
6262

6363
def test_get_database(requests_mock_fixture, client):
6464
db_id = "db1"
65-
url = f"https://www.activityinfo.org/resources/databases/{db_id}"
65+
url = f"https://www.activityinfo.org/resources/database/{db_id}"
6666
fake_response = {"databaseId": db_id, "resources": []}
6767
requests_mock_fixture.get(url, json=fake_response)
6868
result = client.get_database(db_id)
@@ -71,7 +71,7 @@ def test_get_database(requests_mock_fixture, client):
7171

7272
def test_get_forms(requests_mock_fixture, client):
7373
db_id = "db1"
74-
url = f"https://www.activityinfo.org/resources/databases/{db_id}"
74+
url = f"https://www.activityinfo.org/resources/database/{db_id}"
7575
fake_response = {
7676
"databaseId": db_id,
7777
"resources": [
@@ -91,7 +91,7 @@ def test_get_forms(requests_mock_fixture, client):
9191
def test_get_form(requests_mock_fixture, client):
9292
db_id = "db1"
9393
form_id = "f1"
94-
url = f"https://www.activityinfo.org/resources/databases/{db_id}/forms/{form_id}"
94+
url = f"https://www.activityinfo.org/resources/database/{db_id}/forms/{form_id}"
9595
fake_response = {"id": form_id, "fields": []}
9696
requests_mock_fixture.get(url, json=fake_response)
9797
result = client.get_form(db_id, form_id)

0 commit comments

Comments
 (0)