misc: use custom id in paths (#87322)
gitea/wcs/pipeline/head Build queued... Details

This commit is contained in:
Frédéric Péters 2024-02-22 14:04:40 +01:00
parent be154efd1f
commit a94233200c
6 changed files with 50 additions and 7 deletions

View File

@ -368,6 +368,40 @@ def test_studio_card_item_link(pub):
resp.click('card plop')
def test_backoffice_card_item_link_id_template(pub):
user = create_user(pub)
CardDef.wipe()
carddef = CardDef()
carddef.name = 'foo'
carddef.fields = [
fields.StringField(id='1', label='Test', varname='foo'),
fields.StringField(id='2', label='Custom id', varname='custom_id'),
]
carddef.backoffice_submission_roles = user.roles
carddef.workflow_roles = {'_editor': user.roles[0]}
carddef.id_template = '{{form_var_custom_id}}'
carddef.digest_templates = {'default': 'card {{ form_var_foo }}'}
carddef.store()
carddef.data_class().wipe()
card = carddef.data_class()()
card.data = {'1': 'plop', '2': 'test'}
card.just_created()
card.store()
app = login(get_app(pub))
resp = app.get('/backoffice/data/foo/')
assert [x.attrib['href'] for x in resp.pyquery('table a')] == ['test/']
resp = resp.click('Add')
resp.form['f1'] = 'blah'
resp.form['f2'] = 'blah'
resp = resp.form.submit('submit')
assert resp.location.endswith('/backoffice/data/foo/blah/')
resp = resp.follow()
resp = app.get('/backoffice/data/foo/')
assert [x.attrib['href'] for x in resp.pyquery('table a')] == ['blah/', 'test/']
def test_backoffice_cards_import_data_from_csv(pub):
user = create_user(pub)

View File

@ -255,7 +255,7 @@ class ApiFormPageMixin:
if not self.is_webhook:
self.check_access()
try:
formdata = self.formdef.data_class().get(component)
formdata = self.formdef.data_class().get_by_id(component)
except KeyError:
raise TraversalError()
return ApiFormdataPage(self.formdef, formdata, custom_view=self._view)

View File

@ -365,7 +365,7 @@ class CardPage(FormPage):
return view_lookup_response
try:
filled = self.formdef.data_class().get(component)
filled = self.formdef.data_class().get_by_id(component)
except KeyError:
raise errors.TraversalError()
return CardBackOfficeStatusPage(self.formdef, filled, parent_view=self)

View File

@ -3286,7 +3286,7 @@ class FormPage(Directory, TempfileDirectoryMixin):
return view_lookup_response
try:
filled = self.formdef.data_class().get(component)
filled = self.formdef.data_class().get_by_id(component)
except KeyError:
raise errors.TraversalError()

View File

@ -31,7 +31,7 @@ from quixote.errors import RequestError
from quixote.html import htmltext
from quixote.http_request import Upload
from wcs.sql_criterias import And, Contains, Intersects
from wcs.sql_criterias import And, Contains, Equal, Intersects
from .qommon import _, misc
from .qommon.evalutils import make_datetime
@ -360,6 +360,15 @@ class FormData(StorableObject):
value = self.get_natural_key()
return str(value) if value is not None else None
@classmethod
def get_by_id(cls, value):
if cls._formdef.id_template:
try:
return cls.select([Equal('id_display', str(value))], limit=1)[0]
except IndexError:
raise KeyError(value)
return cls.get(value)
def get_user(self):
if self.user_id and self.user_id != 'ultra-user':
return get_publisher().user_class.get(self.user_id, ignore_errors=True)
@ -874,14 +883,14 @@ class FormData(StorableObject):
def get_url(self, backoffice=False, include_category=False, language=None):
return '%s%s/' % (
self.formdef.get_url(backoffice=backoffice, include_category=include_category, language=language),
self.id,
self.identifier,
)
def get_backoffice_url(self):
return self.get_url(backoffice=True)
def get_api_url(self):
return '%s%s/' % (self.formdef.get_api_url(), self.id)
return '%s%s/' % (self.formdef.get_api_url(), self.identifier)
def get_file_base_url(self):
return '%sdownload' % self.get_url()

View File

@ -344,7 +344,7 @@ class FormDefUI:
classes.append('criticality-level')
style = ' style="border-left-color: %s;"' % level.colour
link = str(filled.id) + '/'
link = str(filled.identifier) + '/'
data = ' data-link="%s"' % link
if filled.anonymised:
data += ' data-anonymised="true"'