base: show configured requests_substitutions (#74030)

This commit is contained in:
Benjamin Dauvergne 2023-02-01 19:03:49 +01:00 committed by Gitea
parent 8c2330fdc6
commit 45204e8501
4 changed files with 67 additions and 4 deletions

View File

@ -668,14 +668,18 @@ class BaseResource(models.Model):
).exists()
def get_setting(self, name):
connector_settings = self.get_settings()
return connector_settings.get(name)
def get_settings(self):
connectors_settings = settings.CONNECTORS_SETTINGS
if not isinstance(connectors_settings, dict):
return None
connector_identifier = f'{self.get_connector_slug()}/{self.slug}'
connector_settings = connectors_settings.get(connector_identifier)
if not isinstance(connector_settings, dict):
return None
return connector_settings.get(name)
connector_settings = connectors_settings.get(connector_identifier) or {}
if not isinstance(connectors_settings, dict):
return {}
return connector_settings
class AccessRight(models.Model):

View File

@ -56,6 +56,26 @@
</p>
{% endif %}
{% endfor %}
{% block settings %}
{% if user.is_staff %}
{% for name, value in object.get_settings.items %}
{% if name == 'requests_substitutions' %}
<div id="requests-substitutions">
<p>{% trans "Requests substitutions:" %}</p>
<ul>
{% for requests_substitution in value %}
<li>
{% if requests_substitution.url %}<p>{% trans "URL:" %} {{ requests_substitution.url }}</p>{% endif %}
<p>{% trans "Search:" %} <code>{{ requests_substitution.search }}</code></p>
<p>{% trans "Replace:" %} <code>{{ requests_substitution.replace }}</code></p>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endfor %}
{% endif %}
{% endblock %}
{% endblock %}
</div>
{% endif %}

View File

@ -808,3 +808,41 @@ def test_manager_open_access_flag(app, admin_user):
resp = app.get('/manage/', status=200)
assert 'open access' in resp.text
class TestRequestsSubstitutionsDisplay:
@pytest.fixture
def setup(self, settings):
settings.CONNECTORS_SETTINGS = {
"photon/t": {
"requests_substitutions": [
{
'search': 'abcd',
'replace': 'efgh',
}
]
}
}
photon = Photon.objects.create(slug='t')
return {'url': photon.get_absolute_url()}
def test_shown_when_logged(self, setup, app, admin_user):
app = login(app)
resp = app.get(setup['url'])
paragraph = str(resp.pyquery('#requests-substitutions'))
assert 'Requests substitutions' in paragraph
assert 'URL:' not in paragraph
assert 'Search: <code>abcd</code>' in paragraph
assert 'Replace: <code>efgh</code>' in paragraph
def test_absent_when_unlogged(self, setup, app):
resp = app.get(setup['url'])
paragraph = str(resp.pyquery('#requests-substitutions'))
assert 'Requests substitutions' not in paragraph
def test_url(self, setup, app, admin_user, settings):
settings.CONNECTORS_SETTINGS['photon/t']['requests_substitutions'][0]['url'] = 'https://example.com/'
app = login(app)
resp = app.get(setup['url'])
paragraph = str(resp.pyquery('#requests-substitutions'))
assert 'URL: https://example.com/' in paragraph

View File

@ -545,6 +545,7 @@ def test_requests_substitution(settings):
resource.requests_max_retries = {}
resource.slug = 'test'
resource.get_connector_slug.return_value = 'cmis'
resource.get_settings = lambda: BaseResource.get_settings(resource)
resource.get_setting = lambda name: BaseResource.get_setting(resource, name)
requests = Request(logger=logging.getLogger(), resource=resource)