applications: page dependencies to card models (#86520)
This commit is contained in:
parent
81b27151a3
commit
7e43932262
|
@ -46,6 +46,7 @@ from combo.utils.requests_wrapper import WaitForCacheException
|
|||
from .utils import (
|
||||
get_matching_pages_from_card_slug,
|
||||
get_wcs_dependencies_from_template,
|
||||
get_wcs_dependency_from_carddef_reference,
|
||||
get_wcs_json,
|
||||
get_wcs_matching_card_model,
|
||||
get_wcs_services,
|
||||
|
@ -1081,15 +1082,7 @@ class WcsCardCell(CardMixin, CellBase):
|
|||
def get_dependencies(self):
|
||||
yield from super().get_dependencies()
|
||||
if self.carddef_reference:
|
||||
parts = self.carddef_reference.split(':')
|
||||
wcs_key, card_slug = parts[:2]
|
||||
wcs_site_url = get_wcs_services().get(wcs_key)['url']
|
||||
urls = {
|
||||
'export': f'{wcs_site_url}api/export-import/cards/{card_slug}/',
|
||||
'dependencies': f'{wcs_site_url}api/export-import/cards/{card_slug}/dependencies/',
|
||||
'redirect': f'{wcs_site_url}api/export-import/cards/{card_slug}/redirect/',
|
||||
}
|
||||
yield {'type': 'cards', 'id': card_slug, 'text': self.cached_title, 'urls': urls}
|
||||
yield get_wcs_dependency_from_carddef_reference(self.carddef_reference, self.cached_title)
|
||||
yield from get_wcs_dependencies_from_template(self.card_ids)
|
||||
for cell in self.get_custom_schema().get('cells') or []:
|
||||
for value in cell.values():
|
||||
|
|
|
@ -74,7 +74,7 @@ def get_wcs_json(wcs_site, path, log_errors=True):
|
|||
return response.json()
|
||||
|
||||
|
||||
def get_wcs_options(url, include_category_slug=False, include_custom_views=False):
|
||||
def get_wcs_options(url, include_category_slug=False, include_custom_views=False, with_site_title=True):
|
||||
references = []
|
||||
for wcs_key, wcs_site in sorted(get_wcs_services().items(), key=lambda x: x[1]['title']):
|
||||
site_title = wcs_site.get('title')
|
||||
|
@ -87,7 +87,7 @@ def get_wcs_options(url, include_category_slug=False, include_custom_views=False
|
|||
for element in response_json:
|
||||
slug = element.get('slug')
|
||||
title = element.get('title')
|
||||
if len(get_wcs_services()) == 1:
|
||||
if len(get_wcs_services()) == 1 or not with_site_title:
|
||||
label = title
|
||||
else:
|
||||
label = '%s : %s' % (site_title, title)
|
||||
|
@ -121,14 +121,23 @@ def get_matching_pages_from_card_slug(card_slug, order=True):
|
|||
return Page.get_as_reordered_flat_hierarchy(matching_pages)
|
||||
|
||||
|
||||
def get_wcs_matching_card_model(sub_slug):
|
||||
card_models = get_wcs_options('/api/cards/@list')
|
||||
def get_wcs_matching_card_model(sub_slug, with_site_title=True):
|
||||
card_models = get_wcs_options('/api/cards/@list', with_site_title=with_site_title)
|
||||
for carddef_reference, card_label in card_models:
|
||||
card_id = '%s_id' % carddef_reference.split(':')[1]
|
||||
if '<%s>' % card_id in sub_slug or sub_slug == card_id:
|
||||
return carddef_reference, card_label
|
||||
|
||||
|
||||
def get_card_dependency(carddef_slug, carddef_title, wcs_url):
|
||||
urls = {
|
||||
'export': f'{wcs_url}api/export-import/cards/{carddef_slug}/',
|
||||
'dependencies': f'{wcs_url}api/export-import/cards/{carddef_slug}/dependencies/',
|
||||
'redirect': f'{wcs_url}api/export-import/cards/{carddef_slug}/redirect/',
|
||||
}
|
||||
return {'type': 'cards', 'id': carddef_slug, 'text': carddef_title, 'urls': urls}
|
||||
|
||||
|
||||
def get_wcs_dependencies_from_template(string):
|
||||
if not is_wcs_enabled(None):
|
||||
return []
|
||||
|
@ -147,13 +156,11 @@ def get_wcs_dependencies_from_template(string):
|
|||
if carddef_slug not in carddef_labels_by_slug:
|
||||
# ignore unknown card model
|
||||
continue
|
||||
yield {
|
||||
'type': 'cards',
|
||||
'id': carddef_slug,
|
||||
'text': carddef_labels_by_slug[carddef_slug],
|
||||
'urls': {
|
||||
'export': f'{wcs_url}api/export-import/cards/{carddef_slug}/',
|
||||
'dependencies': f'{wcs_url}api/export-import/cards/{carddef_slug}/dependencies/',
|
||||
'redirect': f'{wcs_url}api/export-import/cards/{carddef_slug}/redirect/',
|
||||
},
|
||||
}
|
||||
yield get_card_dependency(carddef_slug, carddef_labels_by_slug[carddef_slug], wcs_url)
|
||||
|
||||
|
||||
def get_wcs_dependency_from_carddef_reference(carddef_reference, carddef_title):
|
||||
parts = carddef_reference.split(':')
|
||||
wcs_key, carddef_slug = parts[:2]
|
||||
wcs_site_url = get_wcs_services().get(wcs_key)['url']
|
||||
return get_card_dependency(carddef_slug, carddef_title, wcs_site_url)
|
||||
|
|
|
@ -69,7 +69,12 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
from combo import utils
|
||||
from combo.apps.export_import.models import Application
|
||||
from combo.apps.wcs.utils import get_wcs_matching_card_model, is_wcs_enabled
|
||||
from combo.apps.wcs.utils import (
|
||||
get_wcs_dependencies_from_template,
|
||||
get_wcs_dependency_from_carddef_reference,
|
||||
get_wcs_matching_card_model,
|
||||
is_wcs_enabled,
|
||||
)
|
||||
from combo.utils import NothingInCacheException
|
||||
|
||||
from .exceptions import ImportSiteError, PostException
|
||||
|
@ -395,6 +400,12 @@ class Page(models.Model):
|
|||
yield self.edit_role
|
||||
yield self.subpages_edit_role
|
||||
yield from self.groups.all()
|
||||
for value in self.extra_variables.values():
|
||||
yield from get_wcs_dependencies_from_template(value)
|
||||
if self.sub_slug:
|
||||
result = get_wcs_matching_card_model(self.sub_slug, with_site_title=False)
|
||||
if result:
|
||||
yield get_wcs_dependency_from_carddef_reference(*result)
|
||||
for cell in self.get_cells(prefetch_validity_info=True):
|
||||
validity_info = cell.get_validity_info()
|
||||
if validity_info is not None:
|
||||
|
|
|
@ -563,6 +563,36 @@ def test_bundle_check(app, john_doe):
|
|||
}
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_page_dependencies_card_models(mock_send):
|
||||
page = Page.objects.create(
|
||||
title='Test',
|
||||
slug='test',
|
||||
template_name='standard',
|
||||
extra_variables={'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|list }}'},
|
||||
)
|
||||
card_dep = {
|
||||
'type': 'cards',
|
||||
'id': 'card_model_1',
|
||||
'text': 'Card Model 1',
|
||||
'urls': {
|
||||
'export': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/',
|
||||
'dependencies': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/dependencies/',
|
||||
'redirect': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/redirect/',
|
||||
},
|
||||
}
|
||||
assert card_dep in page.get_dependencies()
|
||||
|
||||
page.extra_variables = {}
|
||||
page.sub_slug = 'foo'
|
||||
page.save()
|
||||
assert card_dep not in page.get_dependencies()
|
||||
|
||||
page.sub_slug = 'card_model_1_id'
|
||||
page.save()
|
||||
assert card_dep in page.get_dependencies()
|
||||
|
||||
|
||||
def test_page_dependencies_link_cell():
|
||||
page1 = Page.objects.create(title='Test', slug='test', template_name='standard')
|
||||
page2 = Page.objects.create(title='Other page', slug='other', template_name='standard')
|
||||
|
|
Loading…
Reference in New Issue