Projet

Général

Profil

0001-misc-use-legacy-urls-to-call-up-to-date-urls-63237.patch

Emmanuel Cazenave, 14 avril 2022 18:42

Télécharger (3,86 ko)

Voir les différences:

Subject: [PATCH] misc: use legacy urls to call up to date urls (#63237)

 tests/test_misc.py      | 34 ++++++++++++++++++++++++++++++++++
 wcs/qommon/misc.py      |  8 +++++++-
 wcs/qommon/publisher.py | 14 ++++++++++++++
 3 files changed, 55 insertions(+), 1 deletion(-)
tests/test_misc.py
592 592
    mock_request.assert_called_once_with(
593 593
        'GET', 'https://example.com/', cert=None, data=None, headers={}, proxies=None, timeout=42
594 594
    )
595

  
596

  
597
@mock.patch('requests.Session.request')
598
def test_http_request_url_switch(mock_request):
599
    response = {'err': 0, 'data': []}
600
    mock_json = mock.Mock(status_code=200)
601
    mock_json.json.return_value = response
602
    mock_request.return_value = mock_json
603
    pub = create_temporary_pub()
604
    pub.load_site_options()
605
    from django.conf import settings
606

  
607
    settings.REQUESTS_TIMEOUT = 28
608

  
609
    _http_request('https://example.com/')
610
    mock_request.assert_called_once_with(
611
        'GET', 'https://example.com/', cert=None, data=None, headers={}, proxies=None, timeout=28
612
    )
613
    mock_request.reset_mock()
614

  
615
    pub.site_options.add_section('legacy-urls')
616
    pub.site_options.set('legacy-urls', 'new.example.com', 'example.com,old.example.com')
617

  
618
    _http_request('https://example.com/')
619
    mock_request.assert_called_once_with(
620
        'GET', 'https://new.example.com/', cert=None, data=None, headers={}, proxies=None, timeout=28
621
    )
622
    mock_request.reset_mock()
623

  
624
    _http_request('https://old.example.com/')
625
    mock_request.assert_called_once_with(
626
        'GET', 'https://new.example.com/', cert=None, data=None, headers={}, proxies=None, timeout=28
627
    )
628
    mock_request.reset_mock()
wcs/qommon/misc.py
354 354
def _http_request(
355 355
    url, method='GET', body=None, headers=None, cert_file=None, timeout=None, raise_on_http_errors=False
356 356
):
357
    pub = get_publisher()
357 358
    headers = headers or {}
358
    get_publisher().reload_cfg()
359
    pub.reload_cfg()
359 360

  
360 361
    splitted_url = urllib.parse.urlsplit(url)
361 362
    if splitted_url.scheme not in ('http', 'https'):
......
364 365
    hostname = splitted_url.netloc
365 366
    timeout = timeout or settings.REQUESTS_TIMEOUT
366 367

  
368
    lecacy_urls = pub.get_legacy_urls()
369
    if hostname in lecacy_urls:
370
        hostname = lecacy_urls[hostname]
371
        url = splitted_url._replace(netloc=hostname).geturl()
372

  
367 373
    if cert_file is None:
368 374
        for url_prefix, cert in settings.REQUESTS_CERT.items():
369 375
            if url.startswith(url_prefix):
wcs/qommon/publisher.py
954 954
        d['manager_homepage_title'] = d.get('portal_agent_title')
955 955
        return d
956 956

  
957
    def get_legacy_urls(self):
958
        res = {}
959
        if self.site_options is None:
960
            self.load_site_options()
961
        try:
962
            legcay_urls = dict(self.site_options.items('legacy-urls', raw=True))
963
            for k, v in legcay_urls.items():
964
                old_domains = v.split(',')
965
                for old_domain in old_domains:
966
                    res[old_domain] = k
967
        except configparser.NoSectionError:
968
            pass
969
        return res
970

  
957 971
    def is_relatable_url(self, url):
958 972
        parsed_url = urllib.parse.urlparse(url)
959 973
        if not parsed_url.netloc:
960
-