def METHOD_NAME():
    """
    Fetches currency rates from the European Central Bank.
    """
    d = 'https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml'
    r = requests.get(d)
    r.raise_for_status()
    # File looks like this:
    # <?xml version="1.0" encoding="UTF-8"?>
    # <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01"
    #                  xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    #   <gesmes:subject>Reference rates</gesmes:subject>
    #   <gesmes:Sender>
    #       <gesmes:name>European Central Bank</gesmes:name>
    #   </gesmes:Sender>
    #   <Cube>
    #       <Cube time="2023-02-14">
    #           <Cube currency="USD" rate="1.0759"/>
    #           ...
    #       </Cube>
    #   </Cube>
    # </gesmes:Envelope>
    root = etree.fromstring(r.content)
    namespaces = {
        'gesmes': 'http://www.gesmes.org/xml/2002-08-01',
        'eurofxref': 'http://www.ecb.int/vocabulary/2002-08-01/eurofxref'
    }
    outercube = root.xpath('./eurofxref:Cube/eurofxref:Cube[@time]', namespaces=namespaces)[0]
    source_date = date.fromisoformat(outercube.get("time"))
    for cube in outercube.xpath('./eurofxref:Cube[@currency][@rate]', namespaces=namespaces):
        currency = cube.get('currency')
        rate = Decimal(cube.get('rate'))
        ExchangeRate.objects.update_or_create(
            source='eu:ecb:eurofxref-daily',
            source_currency='EUR',
            other_currency=currency,
            defaults=dict(
                source_date=source_date,
                rate=rate,
            )
        )