Skip to content

Commit

Permalink
Use host from request in place of Site url
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankApiyo committed Jul 24, 2023
1 parent 30dc934 commit 7f0c5d8
Show file tree
Hide file tree
Showing 20 changed files with 131 additions and 50 deletions.
3 changes: 3 additions & 0 deletions onadata/apps/api/tests/viewsets/test_tableau_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from django.test import RequestFactory
from tempfile import NamedTemporaryFile
from django.utils.dateparse import parse_datetime
from django.test.utils import override_settings
from onadata.apps.main.tests.test_base import TestBase
from onadata.apps.logger.models.open_data import get_or_create_opendata
from onadata.apps.api.viewsets.v2.tableau_viewset import (
Expand Down Expand Up @@ -277,6 +278,7 @@ def test_clean_xform_headers(self):
cleaned_data = clean_xform_headers(group_columns)
self.assertEqual(cleaned_data, ["childs_name", "childs_age"])

@override_settings(ALLOWED_HOSTS=["*"])
def test_replace_media_links(self):
"""
Test that attachment details exported to Tableau contains
Expand Down Expand Up @@ -313,6 +315,7 @@ def test_replace_media_links(self):
_open_data = get_or_create_opendata(xform_w_attachments)
uuid = _open_data[0].uuid
request = self.factory.get("/", **self.extra)
request.META["HTTP_HOST"] = "example.com"
response = self.view(request, uuid=uuid)
self.assertEqual(response.status_code, 200)
# cast generator response to list for easy manipulation
Expand Down
4 changes: 4 additions & 0 deletions onadata/apps/api/tests/viewsets/test_xform_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -4320,6 +4320,7 @@ def test_csv_export__with_and_without_do_not_split_select_multiples(self):
self.assertNotEqual(multiples_select_split, no_multiples_select_split)
self.assertGreater(multiples_select_split, no_multiples_select_split)

@override_settings(ALLOWED_HOSTS=["*"])
def test_csv_export_with_and_without_removed_group_name(self):
with HTTMock(enketo_mock):
self._publish_xls_form_to_project()
Expand All @@ -4344,6 +4345,7 @@ def test_csv_export_with_and_without_removed_group_name(self):

data = {"remove_group_name": True}
request = self.factory.get("/", data=data, **self.extra)
request.META["HTTP_HOST"] = "example.com"
response = view(request, pk=self.xform.pk, format="csv")
self.assertEqual(response.status_code, 200)

Expand Down Expand Up @@ -4973,6 +4975,7 @@ def test_export_form_data_async_include_labels_only(self, async_result):
headers = next(csv_reader)
self.assertIn("Is ambulance available daily or weekly?", headers)

@override_settings(ALLOWED_HOSTS=["*"])
def test_csv_exports_w_images_link(self):
with HTTMock(enketo_mock):
xlsform_path = os.path.join(
Expand Down Expand Up @@ -5022,6 +5025,7 @@ def test_csv_exports_w_images_link(self):
data = {"include_images": True}
# request for export again
request = self.factory.get("/", data=data, **self.extra)
request.META["HTTP_HOST"] = "example.com"
response = view(request, pk=self.xform.pk, format="csv")
self.assertEqual(response.status_code, 200)

Expand Down
10 changes: 7 additions & 3 deletions onadata/apps/api/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,11 @@ def create_organization_object(org_name, creator, attrs=None):
except IntegrityError as e:
raise ValidationError(_(f"{org_name} already exists")) from e
if email:
site = Site.objects.get(pk=settings.SITE_ID)
site = (
attrs["host"]
if "host" in attrs
else Site.objects.get(pk=settings.SITE_ID).domain
)
registration_profile.send_activation_email(site)
profile = OrganizationProfile(
user=new_user,
Expand Down Expand Up @@ -749,9 +753,9 @@ def update_role_by_meta_xform_perms(xform):
role.add(user, xform)


def replace_attachment_name_with_url(data):
def replace_attachment_name_with_url(data, request):
"""Replaces the attachment filename with a URL in ``data`` object."""
site_url = Site.objects.get_current().domain
site_url = request.get_host() or Site.objects.get_current().domain

for record in data:
attachments: dict = record.json.get("_attachments")
Expand Down
1 change: 1 addition & 0 deletions onadata/apps/api/viewsets/dataview_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ def export_async(self, request, *args, **kwargs):
dataview = self.get_object()
xform = dataview.xform
options = parse_request_export_options(params)
options["host"] = request.get_host()

options.update(
{
Expand Down
2 changes: 1 addition & 1 deletion onadata/apps/api/viewsets/v2/tableau_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ def data(self, request, **kwargs):
instances = self.paginate_queryset(instances)

# Switch out media file names for url links in queryset
data = replace_attachment_name_with_url(instances)
data = replace_attachment_name_with_url(instances, request)
data = process_tableau_data(
TableauDataSerializer(data, many=True).data, xform
)
Expand Down
1 change: 1 addition & 0 deletions onadata/apps/api/viewsets/xform_viewset.py
Original file line number Diff line number Diff line change
Expand Up @@ -872,6 +872,7 @@ def export_async(self, request, *args, **kwargs):
meta = request.query_params.get("meta")
data_id = request.query_params.get("data_id")
options = parse_request_export_options(request.query_params)
options["host"] = request.get_host()

options.update(
{
Expand Down
2 changes: 1 addition & 1 deletion onadata/apps/logger/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def _html_submission_response(request, instance):
data = {}
data["username"] = instance.xform.user.username
data["id_string"] = instance.xform.id_string
data["domain"] = Site.objects.get(id=settings.SITE_ID).domain
data["domain"] = request.get_host() or Site.objects.get(id=settings.SITE_ID).domain

return render(request, "submission.html", data)

Expand Down
6 changes: 3 additions & 3 deletions onadata/apps/main/context_processors.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ def site_name(request):
"""Returns the SITE_NAME/"""
site_id = getattr(settings, "SITE_ID", None)
try:
site = Site.objects.get(pk=site_id)
request_host = request.get_host() if request else None
name = request_host or Site.objects.get(pk=site_id).name
except Site.DoesNotExist:
name = "example.org"
else:
name = site.name

return {"SITE_NAME": name}
4 changes: 2 additions & 2 deletions onadata/apps/viewer/tests/test_exports.py
Original file line number Diff line number Diff line change
Expand Up @@ -1155,7 +1155,7 @@ def test_dict_to_joined_export_works(self):
survey_name = 'survey'
indices = {survey_name: 0}
output = dict_to_joined_export(data, 1, indices, survey_name,
self.xform.get_survey(), data)
self.xform.get_survey(), data, None)
self.assertEqual(output[survey_name], expected_output[survey_name])
# 1st level
self.assertEqual(len(output['children']), 3)
Expand Down Expand Up @@ -1243,7 +1243,7 @@ def test_dict_to_joined_export_notes(self):
survey_name = 'tutorial'
indices = {survey_name: 0}
data = dict_to_joined_export(submission, 1, indices, survey_name,
self.xform.get_survey(), submission)
self.xform.get_survey(), submission, None)
expected_data = {
'tutorial': {
'_id': 579828,
Expand Down
10 changes: 8 additions & 2 deletions onadata/apps/viewer/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,12 @@ def data_export(request, username, id_string, export_type): # noqa C901

audit = {"xform": xform.id_string, "export_type": export_type}

options = {"extension": extension, "username": username, "id_string": id_string}
options = {
"extension": extension,
"username": username,
"id_string": id_string,
"host": request.get_host(),
}
if query:
options["query"] = query

Expand Down Expand Up @@ -400,7 +405,6 @@ def create_export(request, username, id_string, export_type):

credential = None
if export_type == Export.GOOGLE_SHEETS_EXPORT:

credential = _get_google_credential(request)
if isinstance(credential, HttpResponseRedirect):
return credential
Expand Down Expand Up @@ -435,6 +439,7 @@ def create_export(request, username, id_string, export_type):
"remove_group_name": str_to_bool(remove_group_name),
"meta": meta.replace(",", "") if meta else None,
"google_credentials": credential,
"host": request.get_host(),
}

try:
Expand Down Expand Up @@ -510,6 +515,7 @@ def export_list(request, username, id_string, export_type): # noqa C901
"meta": export_meta,
"token": export_token,
"google_credentials": credential,
"host": request.get_host(),
}

if should_create_new_export(xform, export_type, options):
Expand Down
17 changes: 10 additions & 7 deletions onadata/libs/serializers/organization_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ def create(self, validated_data):

if "request" in self.context:
creator = self.context["request"].user
validated_data["host"] = self.context["request"].get_host()

validated_data["organization"] = org_name

Expand Down Expand Up @@ -130,13 +131,15 @@ def _create_user_list(user_list):
except UserProfile.DoesNotExist:
profile = UserProfile.objects.create(user=u)

users_list.append({
"user": u.username,
"role": get_role_in_org(u, obj),
"first_name": u.first_name,
"last_name": u.last_name,
"gravatar": profile.gravatar,
})
users_list.append(
{
"user": u.username,
"role": get_role_in_org(u, obj),
"first_name": u.first_name,
"last_name": u.last_name,
"gravatar": profile.gravatar,
}
)
return users_list

members = get_organization_members(obj) if obj else []
Expand Down
2 changes: 1 addition & 1 deletion onadata/libs/serializers/user_profile_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ def create(self, validated_data):
metadata = {}
username = params.get("username")
password = params.get("password1", "")
site = Site.objects.get(pk=settings.SITE_ID)
site = request.get_host() or Site.objects.get(pk=settings.SITE_ID).domain
new_user = None

try:
Expand Down
1 change: 0 additions & 1 deletion onadata/libs/tests/utils/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,4 +225,3 @@ def test_url_not_configured(self):
"""settings.PROJECT_INVITATION_URL not set"""
url = get_project_invitation_url(self.custom_request)
self.assertEqual(url, "http://testserver/api/v1/profiles")
# Add test case for using a different host
18 changes: 11 additions & 7 deletions onadata/libs/tests/utils/test_export_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -385,7 +385,7 @@ def test_zipped_csv_export_works(self):
outputs = []
for d in self.data:
outputs.append(
dict_to_joined_export(d, index, indices, survey_name, survey, d)
dict_to_joined_export(d, index, indices, survey_name, survey, d, None)
)
index += 1

Expand Down Expand Up @@ -1272,7 +1272,9 @@ def test_export_with_image_attachments(self):
export_builder = ExportBuilder()
export_builder.set_survey(survey)
with NamedTemporaryFile(suffix=".xlsx") as temp_xls_file:
export_builder.to_xlsx_export(temp_xls_file, xdata)
export_builder.to_xlsx_export(
temp_xls_file, xdata, options={"host": "example.com"}
)
temp_xls_file.seek(0)
workbook = load_workbook(temp_xls_file)
children_sheet = workbook["exp"]
Expand Down Expand Up @@ -1884,7 +1886,7 @@ def test_type_conversion(self):
survey_name = survey.name
indices = {survey_name: 0}
data = dict_to_joined_export(
submission_1, 1, indices, survey_name, survey, submission_1
submission_1, 1, indices, survey_name, survey, submission_1, None
)
new_row = export_builder.pre_process_row(
data[survey_name], export_builder.sections[0]
Expand All @@ -1896,7 +1898,7 @@ def test_type_conversion(self):
# check missing values dont break and empty values return blank strings
indices = {survey_name: 0}
data = dict_to_joined_export(
submission_2, 1, indices, survey_name, survey, submission_2
submission_2, 1, indices, survey_name, survey, submission_2, None
)
new_row = export_builder.pre_process_row(
data[survey_name], export_builder.sections[0]
Expand Down Expand Up @@ -1962,7 +1964,7 @@ def test_to_sav_export(self):
outputs = []
for d in self.data:
outputs.append(
dict_to_joined_export(d, index, indices, survey_name, survey, d)
dict_to_joined_export(d, index, indices, survey_name, survey, d, None)
)
index += 1

Expand Down Expand Up @@ -2015,7 +2017,7 @@ def test_to_sav_export_language(self):
outputs = []
for d in self.data:
outputs.append(
dict_to_joined_export(d, index, indices, survey_name, survey, d)
dict_to_joined_export(d, index, indices, survey_name, survey, d, None)
)
index += 1

Expand Down Expand Up @@ -2509,7 +2511,9 @@ def test_to_sav_export_with_labels(self):
outputs = []
for item in self.data:
outputs.append(
dict_to_joined_export(item, index, indices, survey_name, survey, item)
dict_to_joined_export(
item, index, indices, survey_name, survey, item, None
)
)
index += 1

Expand Down
34 changes: 29 additions & 5 deletions onadata/libs/tests/utils/test_export_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,13 @@ def test_get_value_or_attachment_uri(self):
key = "photo"
value = "123.jpg"
val_or_url = get_value_or_attachment_uri(
key, value, row, self.xform, media_xpaths, attachment_list
key,
value,
row,
self.xform,
media_xpaths,
attachment_list,
host="example.com",
)
self.assertTrue(val_or_url)

Expand All @@ -332,7 +338,13 @@ def test_get_value_or_attachment_uri(self):
# when include_images is False, you get the value
media_xpaths = []
val_or_url = get_value_or_attachment_uri(
key, value, row, self.xform, media_xpaths, attachment_list
key,
value,
row,
self.xform,
media_xpaths,
attachment_list,
host="example.com",
)
self.assertTrue(val_or_url)
self.assertEqual(value, val_or_url)
Expand All @@ -344,7 +356,13 @@ def test_get_value_or_attachment_uri(self):

media_xpaths = ["photo"]
val_or_url = get_value_or_attachment_uri(
key, value, row, self.xform, media_xpaths, attachment_list
key,
value,
row,
self.xform,
media_xpaths,
attachment_list,
host="example.com",
)
self.assertTrue(val_or_url)
self.assertEqual(value, val_or_url)
Expand Down Expand Up @@ -381,7 +399,13 @@ def test_get_attachment_uri_for_filename_with_space(self):
key = "photo"
value = "1 2 3.jpg"
val_or_url = get_value_or_attachment_uri(
key, value, row, self.xform, media_xpaths, attachment_list
key,
value,
row,
self.xform,
media_xpaths,
attachment_list,
host="example.com",
)

self.assertTrue(val_or_url)
Expand Down Expand Up @@ -713,7 +737,7 @@ def test_geojson_export_when_submission_deleted(self):
}
],
}
self.assertEqual(len(geojson['features']), 1)
self.assertEqual(len(geojson["features"]), 1)
content = json.loads(content)
self.assertEqual(content, geojson)

Expand Down
3 changes: 3 additions & 0 deletions onadata/libs/utils/api_export_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,8 @@ def custom_response_handler( # noqa: C0901
dataview_pk = hasattr(dataview, "pk") and dataview.pk
options["dataview_pk"] = dataview_pk

options["host"] = request.get_host()

if dataview:
columns_with_hxl = get_columns_with_hxl(xform.survey.get("children"))

Expand Down Expand Up @@ -249,6 +251,7 @@ def _generate_new_export( # noqa: C0901
"extension": extension,
"username": xform.user.username,
"id_string": xform.id_string,
"host": request.get_host(),
}
if query:
options["query"] = query
Expand Down
Loading

0 comments on commit 7f0c5d8

Please sign in to comment.