Skip to content

Commit

Permalink
Merge pull request #4885 from kobotoolbox/asset-remove-kobocat-domain
Browse files Browse the repository at this point in the history
Avoid storing KC domain in asset deployment data
  • Loading branch information
noliveleger committed Apr 24, 2024
2 parents ed5c160 + 46464dd commit 88753c9
Showing 1 changed file with 23 additions and 29 deletions.
52 changes: 23 additions & 29 deletions kpi/deployment_backends/kobocat_backend.py
Expand Up @@ -138,7 +138,7 @@ def connect(self, active=False):
kc_server = settings.KOBOCAT_URL
id_string = self.asset.uid

url = self.external_to_internal_url('{}/api/v1/forms'.format(kc_server))
url = self.normalize_internal_url('{}/api/v1/forms'.format(kc_server))
xlsx_io = self.asset.to_xlsx_io(
versioned=True, append={
'settings': {
Expand All @@ -162,12 +162,16 @@ def connect(self, active=False):
files = {'xls_file': ('{}.xlsx'.format(id_string), xlsx_io)}
json_response = self._kobocat_request(
'POST', url, data=payload, files=files)
self.store_data({
'backend': 'kobocat',
'active': json_response['downloadable'],
'backend_response': json_response,
'version': self.asset.version_id,
})
# Store only path
json_response['url'] = urlparse(json_response['url']).path
self.store_data(
{
'backend': 'kobocat',
'active': json_response['downloadable'],
'backend_response': json_response,
'version': self.asset.version_id,
}
)

@staticmethod
def nlp_tracking_data(asset_ids, start_date=None):
Expand Down Expand Up @@ -240,7 +244,7 @@ def delete(self):
"""
WARNING! Deletes all submitted data!
"""
url = self.external_to_internal_url(self.backend_response['url'])
url = self.normalize_internal_url(self.backend_response['url'])
try:
self._kobocat_request('DELETE', url)
except KobocatDeploymentException as e:
Expand Down Expand Up @@ -455,22 +459,12 @@ def enketo_id(self):
return enketo_id

@staticmethod
def external_to_internal_url(url):
def normalize_internal_url(url: str) -> str:
"""
Replace the value of `settings.KOBOCAT_URL` with that of
`settings.KOBOCAT_INTERNAL_URL` when it appears at the beginning of
`url`
Normalize url to ensure KOBOCAT_INTERNAL_URL is used
"""
kobocat_url = settings.KOBOCAT_URL
# If old domain name is detected, use it for search&replace below
if settings.KOBOCAT_OLD_URL and settings.KOBOCAT_OLD_URL in url:
kobocat_url = settings.KOBOCAT_OLD_URL

return re.sub(
pattern='^{}'.format(re.escape(kobocat_url)),
repl=settings.KOBOCAT_INTERNAL_URL,
string=url
)
parsed_url = urlparse(url)
return f'{settings.KOBOCAT_INTERNAL_URL}{parsed_url.path}'

def get_attachment(
self,
Expand Down Expand Up @@ -836,7 +830,7 @@ def redeploy(self, active=None):
"""
if active is None:
active = self.active
url = self.external_to_internal_url(self.backend_response['url'])
url = self.normalize_internal_url(self.backend_response['url'])
id_string = self.backend_response['id_string']
xlsx_io = self.asset.to_xlsx_io(
versioned=True, append={
Expand All @@ -860,6 +854,7 @@ def redeploy(self, active=None):
'backend_response': json_response,
'version': self.asset.version_id,
})

self.set_asset_uid()

def remove_from_kc_only_flag(self,
Expand Down Expand Up @@ -916,7 +911,7 @@ def set_active(self, active):
"""
# self.store_data is an alias for
# self.asset._deployment_data.update(...)
url = self.external_to_internal_url(
url = self.normalize_internal_url(
self.backend_response['url'])
payload = {
'downloadable': bool(active)
Expand Down Expand Up @@ -946,7 +941,7 @@ def set_asset_uid(self, force: bool = False) -> bool:
if is_synchronized:
return False

url = self.external_to_internal_url(self.backend_response['url'])
url = self.normalize_internal_url(self.backend_response['url'])
payload = {
'kpi_asset_uid': self.asset.uid
}
Expand Down Expand Up @@ -991,7 +986,7 @@ def set_has_kpi_hooks(self):
Store results in deployment data
"""
has_active_hooks = self.asset.has_active_hooks
url = self.external_to_internal_url(
url = self.normalize_internal_url(
self.backend_response['url'])
payload = {
'has_kpi_hooks': has_active_hooks,
Expand Down Expand Up @@ -1124,7 +1119,7 @@ def submission_url(self) -> str:

def sync_media_files(self, file_type: str = AssetFile.FORM_MEDIA):

url = self.external_to_internal_url(self.backend_response['url'])
url = self.normalize_internal_url(self.backend_response['url'])
response = self._kobocat_request('GET', url)
kc_files = defaultdict(dict)

Expand Down Expand Up @@ -1400,7 +1395,7 @@ def __delete_kc_metadata(
"""
# Delete file in KC

delete_url = self.external_to_internal_url(kc_file_['url'])
delete_url = self.normalize_internal_url(kc_file_['url'])
self._kobocat_request('DELETE', url=delete_url, expect_formid=False)

if file_ is None:
Expand Down Expand Up @@ -1661,7 +1656,6 @@ def __update_kc_metadata_hash(
"""
server = settings.KOBOCAT_INTERNAL_URL
metadata_detail_url = f'{server}/api/v1/metadata/{kc_metadata_id}'

data = {'file_hash': file_.md5_hash}
self._kobocat_request('PATCH',
url=metadata_detail_url,
Expand Down

0 comments on commit 88753c9

Please sign in to comment.