misc: add form_short_url variable (#48159)
gitea/wcs/pipeline/head This commit looks good Details

This commit is contained in:
Frédéric Péters 2024-01-27 16:11:45 +01:00
parent 36cc71044c
commit 3eacdf75ff
4 changed files with 41 additions and 1 deletions

View File

@ -846,6 +846,7 @@ def test_lazy_formdata(pub, variable_test_data):
assert lazy_formdata.backoffice_submission_url == formdef.get_backoffice_submission_url()
assert lazy_formdata.frontoffice_submission_url == formdef.get_url()
assert lazy_formdata.api_url == formdata.get_api_url()
assert lazy_formdata.short_url == formdata.get_short_url()
assert lazy_formdata.attachments
assert lazy_formdata.geoloc['base'] == {'lat': 1, 'lon': 2}
assert lazy_formdata.geoloc['base_lon'] == 2
@ -5748,3 +5749,29 @@ def test_reverse_links(pub):
assert context['form_reverse_links_formdef_foobar_bar_1_form_internal_id'] == formdata2.id
assert len(context['form_reverse_links_carddef_card_2_foo']) == 1
assert context['form_reverse_links_carddef_card_2_foo_0_form_internal_id'] == carddata2.id
def test_no_short_url(pub):
CardDef.wipe()
carddef = CardDef()
carddef.name = 'card'
carddef.store()
carddata = carddef.data_class()()
carddata.just_created()
carddata.store()
lazy_carddata = LazyFormData(carddata)
assert 'short_url' not in lazy_carddata.inspect_keys()
FormDef.wipe()
formdef = FormDef()
formdef.name = 'form'
formdef.store()
formdata = formdef.data_class()()
lazy_formdata = LazyFormData(formdata)
assert 'short_url' not in lazy_formdata.inspect_keys()
formdata.just_created()
formdata.store()
assert 'short_url' in lazy_formdata.inspect_keys()

View File

@ -261,3 +261,6 @@ def test_short_url_redirect(pub, formdef1):
assert resp.location == formdef1.get_url()
resp = app.get(f'/r/{formdef1.id}-{formdata.id}', status=302)
assert resp.location == formdata.get_url()
assert formdata.get_short_url() == f'http://example.net/r/{formdef1.id}-{formdata.id}'
resp = app.get(formdata.get_short_url(), status=302)
assert resp.location == formdata.get_url()

View File

@ -899,6 +899,10 @@ class FormData(StorableObject):
token.store()
return urllib.parse.urljoin(get_publisher().get_frontoffice_url(), f'/code/{token.id}/load')
def get_short_url(self):
assert self.id
return urllib.parse.urljoin(get_publisher().get_frontoffice_url(), f'/r/{self.formdef.id}-{self.id}')
def get_display_id(self):
return str(self.id_display or self.id)

View File

@ -765,7 +765,9 @@ class LazyFormData(LazyFormDef):
self._formdata = formdata
def inspect_keys(self):
hidden_keys = ('field', 'inspect_keys', 'page_no', 'formdef', 'objects')
hidden_keys = {'field', 'inspect_keys', 'page_no', 'formdef', 'objects'}
if self.type != 'formdef' or not self._formdata.id:
hidden_keys.add('short_url')
for key in dir(self):
if key[0] == '_' or key in hidden_keys:
continue
@ -831,6 +833,10 @@ class LazyFormData(LazyFormDef):
def api_url(self):
return self._formdata.get_api_url()
@property
def short_url(self):
return self._formdata.get_short_url()
@property
def uri(self):
return '%s/%s/' % (self._formdef.url_name, self._formdata.id)