Deutsch   English   Français   Italiano  
<mailman.30.1745483776.3008.python-list@python.org>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: news.eternal-september.org!eternal-september.org!feeder3.eternal-september.org!fu-berlin.de!uni-berlin.de!not-for-mail
From: Anders Munch <ajm@flonidan.dk>
Newsgroups: comp.lang.python
Subject: RE: Module urljoin does not appear to work with scheme Gemini
Date: Thu, 24 Apr 2025 08:36:12 +0000
Lines: 47
Message-ID: <mailman.30.1745483776.3008.python-list@python.org>
References: <20250421083845.5e5b6d69@workstation.localdomain>
 <f5bikmwp8of.fsf@lochinver.inf.ed.ac.uk>
 <20250422182253.00b9327d@workstation.localdomain>
 <f5bwmbbnexs.fsf@lochinver.inf.ed.ac.uk>
 <VI1PR05MB106805790212AE1658621959AB4852@VI1PR05MB10680.eurprd05.prod.outlook.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
X-Trace: news.uni-berlin.de e0Z93rGqjnoH4ywXaxqFrAvcaysy1AqzbG3P1iRnFJUA==
Cancel-Lock: sha1:tT4Mvq6g7IeNv+h1OcLU1e8YZ5Y= sha256:yzR1Xa5JxQcAH31ZfO8dttv4+7QSEAnU24X4t692UQk=
Return-Path: <ajm@flonidan.dk>
X-Original-To: python-list@python.org
Delivered-To: python-list@mail.python.org
Authentication-Results: mail.python.org; dkim=pass
 reason="1024-bit key; unprotected key"
 header.d=FlonidanAS.onmicrosoft.com header.i=@FlonidanAS.onmicrosoft.com
 header.b=1AWzJOVe; dkim-adsp=none (unprotected policy);
 dkim-atps=neutral
X-Spam-Status: OK 0.006
X-Spam-Evidence: '*H*': 0.99; '*S*': 0.00; 'argument': 0.04; 'e.g.':
 0.07; 'used.': 0.07; 'considering.': 0.09; 'flags': 0.09;
 'lookup': 0.09; 'parse': 0.09; 'subject:not': 0.09; 'import':
 0.15; 'that.': 0.15; 'flag': 0.16; 'functions.': 0.16; 'given,':
 0.16; 'parsing': 0.16; 'refactor': 0.16; 'sets,': 0.16;
 'subject:Module': 0.16; 'subject:does': 0.16; 'urllib.parse':
 0.16; 'wrote:': 0.16; 'instead': 0.17; 'to:addr:python-list':
 0.20; 'written': 0.22; 'code': 0.23; 'saying': 0.25; 'object':
 0.26; 'old': 0.27; 'seem': 0.31; 'approach': 0.31; 'objects':
 0.32; 'but': 0.32; 'header:In-Reply-To:1': 0.35; '...': 0.37;
 'lists': 0.37; "skip:' 10": 0.37; 'way': 0.38; 'use': 0.39;
 'quite': 0.39; 'adding': 0.39; 'wrote': 0.39; 'still': 0.40;
 'best': 0.61; 'once': 0.63; 'that,': 0.67; 'exactly': 0.68;
 'henry': 0.69; 'order.': 0.69; 'note:': 0.71; 'name,': 0.75;
 'yourself': 0.75; 'names,': 0.81; 'strategy': 0.84; 'preference.':
 0.84; 'six,': 0.84
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=TSGELAkDUYjNt6Vy7jWjmoWqVvajKPsfWyz+sa4+xZY/+meGGTYqAHXH84h9FHOWfawkgIcodu8zBYyCOjo+10AgHX5Z/7cmjT9yVJ45Yc6z8dcv0yEBVKhED0gTGE6ZRihbi/06W3hjkyRUE33BPMrXyM3OyoIDYw2Hl4bN0ql0wekte8kURE0LyYg4SWv1+nDloWQwpYxbEeABeRztwRduZpq55WTrsS9MeMELou73yVYFnAMh2rhqXojp93wgfIVDSdXzCPGUSA6kOtJX1uS+8RW/sV4gYV4gjADHmVZyZB/DgKKY/5IduJVTXBuZ5eG5njCIkdjiAH7nrhHe6A==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=EwxZ+f7jOoEnKluuBEoiMZPz2lKOsQLvT7N07JZQRyE=;
 b=JjvN8gFANpMMkJQuHgJ20RGwZRVYGkOa3t3id5IyhWtmxbsViEafNaRDevgQfaIfoCSVZvEnA/CAc9AhQJrhMWYnLVJ74U861Cv6tX43TpaOPSgnQbA4APMoqpJf9Vv7VzpYLugNGuKclAdi8XRJC57txWRf6f0i8y+xPPabx8ZeBRrJWou978c5P7STMP7EhSQzcHH2JQTJe9xNWGu7A3k4L6JX8JH64tyDy8XQ6F8ozn4+2g8bzYPA5MNz2p+SixcdeUk2gtnA23b7D/ydsL+djL+14a3ocGgFOSnY11DEUAGpB721RjZBMmCy5Jm165wYBbqibF6/QYJT0es5fQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=flonidan.dk; dmarc=pass action=none header.from=flonidan.dk;
 dkim=pass header.d=flonidan.dk; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=FlonidanAS.onmicrosoft.com; s=selector2-FlonidanAS-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=EwxZ+f7jOoEnKluuBEoiMZPz2lKOsQLvT7N07JZQRyE=;
 b=1AWzJOVe2EdsB1J1J1PLz4IGo1SdqL7H9rH2UHWAjbt6VwecxE16Y9rs4xzIsLD7V1DaDGc4k2M9xIOukJmBL8rwSdPic659M3os6u2IupDkISGVjqkXWXOApT6QwgTIeL1bvP5F1RDgV0U53p+b6EdWJofF+C76y+Dcnyow/7M=
Thread-Topic: Module urljoin does not appear to work with scheme Gemini
Thread-Index: AQHbsoDCxKkhgz/pXEmmzUCCpt+KL7OvzZNGgAACQICAAYnzQ4ABKFCA
In-Reply-To: <f5bwmbbnexs.fsf@lochinver.inf.ed.ac.uk>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=flonidan.dk;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: VI1PR05MB10680:EE_|DU0PR05MB9506:EE_
x-ms-office365-filtering-correlation-id: 3fb8fa36-ea9f-4b63-f2d6-08dd830b1237
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0; ARA:13230040|366016|1800799024|376014|38070700018;
x-microsoft-antispam-message-info: =?us-ascii?Q?RZyEfOEKREN4OmDhtR68KuRNA7gEwSYJ0xHz1auUuxQ17jxqT4vZu8vyLg4n?=
 =?us-ascii?Q?3BSjNgwqBpznnDnb2sp8bkIbFTfy5bR5ui3UDdW63nq8RDEc7kq572s8IW89?=
 =?us-ascii?Q?CgOWN4dPJGHSOHnFIA4a6UqWScnM0EJ7S2pgmAtbuFqPeBtjanEV5dJ/ersK?=
 =?us-ascii?Q?k74eA8eJ/aSQy1SUXG/lWSp0CsNYQV6ki7jh37dRJyg0piAOhIpm8pM7PuQU?=
 =?us-ascii?Q?n1gVAxpEOJptNkkaeMn66Fr5Tj5Lc/gGU6L1P3GV3m9d4dJjoIPR+I4q2Vvn?=
 =?us-ascii?Q?w6NMXYS1sOJx2Bbd+AMndn3xTtoiahT4JrcCP51/KxdS2yptLEA+Tos5ZNbF?=
 =?us-ascii?Q?o1QQRQVzoaMMB/eW2h7SMeXK2bfOcv7J71a+LxqUQGAtqJmuaJRMEXZCKoiO?=
 =?us-ascii?Q?+5/7yDK5Kxlyh+8NkPmMrqU40dGjdownkqzcIG12NPu3zodMz9GuuWGJpMk1?=
 =?us-ascii?Q?WrNzQJqVjvl/3hZMrS2zpwWPY8fJQPIEktahjLzHhr6N5SGt1+xhAKW3Bg5v?=
 =?us-ascii?Q?P1xt1DdgSNh2fQWKMPb9xmIcQcmGeK/vQQsHvzI5JBU35XIqhmtauX/Tp8ru?=
 =?us-ascii?Q?IPXuFrdqiFlXoy2o9Q+5ExGfBKLcCFsYoY1Fv3I07gMKGYA0ZW5Dofa0n9zk?=
 =?us-ascii?Q?xaEFwfjU/m6fT+dooDJSRHnul2FMjx1/SOTkg22Z50OFP2cidB7hBChIRWhI?=
 =?us-ascii?Q?vo0VXHvT7tJPreA08T7GNwo5jjVpN65jSP1mk1a61+1liOqfpzbVw5YnQUZV?=
 =?us-ascii?Q?ybSXDc9+PBVpuU4Z85m1MzNJAfVGCkyPGkps1OZ1+DkOTX+6Glal8b+15cPP?=
 =?us-ascii?Q?5sWjWrozju7pTwD7OGVvteoeiUAj7oibLveNXkbd2hsedgR4OWXys10u69Tt?=
 =?us-ascii?Q?JXYgE5fYERV2zeeDnRvYf0Z4LNeF3vC4121vZ8WEFZzKo8X3exhewrthA5Sl?=
 =?us-ascii?Q?zQ5UjOfY3HVMgc0acc+k+VDtZBTZuUbJJQJh84LnV1+zBu4+L8giZ4wj7ZZ0?=
 =?us-ascii?Q?XTQLQyertTmNhwBCx5GR1V819Yp7C/lJXrXiEbgd1LG7GFSgW20SHd7LcdaR?=
 =?us-ascii?Q?FVwSeEOsDh/DiNV1GIbb0sCh4Prw8vJjbMEhHLahBXp17l6yVM6ePajUQ9cz?=
 =?us-ascii?Q?hVu6kfvFSXs+gM3cdEUgVb8TuszurQF6uk2PanKMJtAhA8+iYg5V6sH5D14F?=
 =?us-ascii?Q?zAcnf7fr529V9Vxn7AOcbOLuKyFZVh4OIju+ygvqAo/WA5BIItFmtAxDbu03?=
 =?us-ascii?Q?VqPtlcMmXrs+rpxLUYxZMwZsqiYBaQwR4j7BN1UZ3GY6pmEhY373YYEtoh2H?=
 =?us-ascii?Q?adC5uOiHcdqlCAH0TdRCIJiVNwIt/efi7zNlWUZattwRpQ/p7Gi1JGwGPfV8?=
 =?us-ascii?Q?VqUlnvkNWi4okdA5yZ6YH1kW4D1XdKLxtH4/8TTxr+yOW2/oO/50sCZ4AaoC?=
 =?us-ascii?Q?sec0wScY/aQOgmQtbUGZ8uUTDw7HeQgbL4izL/fU+AZ6lT804BWYQg=3D=3D?=
x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:VI1PR05MB10680.eurprd05.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230040)(366016)(1800799024)(376014)(38070700018); DIR:OUT; SFP:1102; 
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?ri+QKBEhlFMkzZ5nFkI1Zp40DdCb3wmCDtg0ZACZc/DVHxE1EGLT6d3BclNf?=
 =?us-ascii?Q?hHCqzKo+9L6DvQvsjWf15A+gpwAZApUzRl0JS7N+JkJbdlrXyh1cLti+pSJA?=
 =?us-ascii?Q?/N5SuHOfI4U3TBnGBqZ6/V/DrCSUzGBl1XSpP4N589J+6IHHydAJUxVmhDH2?=
 =?us-ascii?Q?JWyiTiSCpbWTqxMe79EkRFSMSLZYpfhxP5NdCFWh881UtJYiRbLmK+oq9go5?=
 =?us-ascii?Q?sdXDbqyb+nsVRi3ZpPqNYDK1xsR45n5NP+IJuSkjLwk/+N6/gZX7E7SSdaLh?=
 =?us-ascii?Q?zaH4YAiWxILmawDlBaorIk+1IjeA9OqrweFg2O445HSuD2NmW6/O9QKPBkLL?=
 =?us-ascii?Q?L7SAUKffNSOzCclS6oyxDYiLvJmTOmwavDqlOT1jTL9nq9iKS9ap3m6onOFw?=
 =?us-ascii?Q?i6nXdj0RlnaHF2LNV9fHKVg5zGMSjOZep/reyG+CrWN9SBoWSfg1hBqsJy6D?=
 =?us-ascii?Q?DR3JTEeODmhmoLxuLQ5p3CSic+EPNdQfAXvxXkRERyRig1N1GB9cTXT2A7Js?=
 =?us-ascii?Q?NZN2syAtyjF3W/oe5JqPSIXN7Cl3zTf5XnOTizprNMRp96GLTRQuYL39Vq8E?=
 =?us-ascii?Q?qV7kkD9gkZbDqF1t4Viq3Ow8MNVMtTYZbHYKckm60LLububL0uv10+vkhUKG?=
 =?us-ascii?Q?+6kpAyYQ6vY/4MUqymbvSaJ5UCEDi0PUDMpfSgN7DM0J3ra2rSZgQv8OhWTK?=
 =?us-ascii?Q?CmjL80Gkmjw582xU99Cfh8aDYLlzWNfIUNXZEcwf7cek/q2m/IdSefYxK6Po?=
 =?us-ascii?Q?f/KvHHm1TuKpqY+IV/hIP/2dgKDoDNk5K74GgO32dZ4M3Kga1C4JPn5yxO5c?=
 =?us-ascii?Q?6A27m5+KcsxmeyOZQAN60Tvt7Jyw1UwWzjKFlNlZBK+LPH1uqdp9hioAid/Q?=
 =?us-ascii?Q?xxLzo1BUo98Dmr0VHMOHQyqi4oJB1uBD38dCPbQoB/GPWm4p4oWc+wfEGLC0?=
 =?us-ascii?Q?iXjcr0AtfdQgwcwmzVDLvuj33hvljbzmINg5AndFn51XytXDLjmQLrbvVGq4?=
 =?us-ascii?Q?G53jjeVqEV2vH4ip9rI1V83XZBV0jXv8+/OssZ5HjYhfn4eZ5BJMp89HFhb0?=
 =?us-ascii?Q?lSu9LVG+wNObeoI3thRb2jI9/WIJ0nHp3T+ZMSS02HFuWKfESfP2X1wX2QH7?=
 =?us-ascii?Q?nfgB001+timFFD4Bp26xpIrx8/WvKLovvd7eM19+IQonocyCc64oAaMLJets?=
 =?us-ascii?Q?O791ROnb/O7lUtzgdxX0WwuVVAGe8DdYgDekNXNv2TiNOfCD+i+e9jdO3b7s?=
 =?us-ascii?Q?LbKGfZJHidcLZZDrl/s1m5kTsNdH921IcIGS2fAFwSAqMQYW/qDQ1jX/t4RA?=
 =?us-ascii?Q?/OpmBN7EHSw06lZBl+MVHie0NMtLYaV+SjvXJ0CYmOkPqoUHbWdnF6yAvzir?=
 =?us-ascii?Q?wYupUFMdD6PiEexKc4be+RP9y7Lul31LPYcGb4V8rLldxUQk1dsdQ1f2//Ry?=
 =?us-ascii?Q?UjRwmO/5OMNzBoTp5zIIkaJ/tFCbHvNUJVgGkKxDXd4NxDYpXooKVXQUQ+HK?=
 =?us-ascii?Q?axki0L/YlCBl8nc2czi94e+tO3QQfptc1HGsyepJrqrCNOkY8Fu87NJ/bc9U?=
 =?us-ascii?Q?VaQ4IsP9Qute6LUgUcQ=3D?=
X-OriginatorOrg: flonidan.dk
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: VI1PR05MB10680.eurprd05.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 3fb8fa36-ea9f-4b63-f2d6-08dd830b1237
X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Apr 2025 08:36:12.9737 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 66f919b0-b207-4d78-ae72-d81c18f86ec5
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: TBt1tpXUT+XET9mnCKfVIqxMqr+2cRVakfquxg/1NO17POm/R10SZfiKxi8M+nps
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR05MB9506
X-BeenThere: python-list@python.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: General discussion list for the Python programming language
 <python-list.python.org>
List-Unsubscribe: <https://mail.python.org/mailman/options/python-list>,
 <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive: <https://mail.python.org/pipermail/python-list/>
List-Post: <mailto:python-list@python.org>
List-Help: <mailto:python-list-request@python.org?subject=help>
List-Subscribe: <https://mail.python.org/mailman/listinfo/python-list>,
 <mailto:python-list-request@python.org?subject=subscribe>
X-Mailman-Original-Message-ID: <VI1PR05MB106805790212AE1658621959AB4852@VI1PR05MB10680.eurprd05.prod.outlook.com>
X-Mailman-Original-References: <20250421083845.5e5b6d69@workstation.localdomain>
 <f5bikmwp8of.fsf@lochinver.inf.ed.ac.uk>
 <20250422182253.00b9327d@workstation.localdomain>
 <f5bwmbbnexs.fsf@lochinver.inf.ed.ac.uk>

Henry S. Thompson wrote:
> Some approach to support future-proofing in general would seem to be in o=
rder.=20
> Given some other precedents, adding a boolean argument called either 'str=
ict' or 'lax' would be my preference.

An alternative would be to refactor urllib.parse to use strategy objects
for schemes.

parse.py contains a number of lists of scheme names, that act as flags to
control parsing behaviour:
        uses_relative, uses_netloc, uses_params, non_hierarchical, uses_que=
ry and uses_fragment.
(If written today they would be sets, but this is very old code that predat=
es sets!)
Group that information by scheme instead of by flag name, in e.g. a datacla=
ss, and
you have made yourself a strategy object lookup table:

scheme_options =3D {
   'https': SchemeOptions(uses_relative=3DTrue,  uses_netloc=3DTrue, uses_p=
arams=3DTrue),
   'git': SchemeOptions(uses_relative=3DFalse,  uses_netloc=3DTrue, uses_pa=
rams=3DFalse),
   ...
}

Once you have that, you can add the strategy object as an optional argument=
 to
functions.  If the argument is not given, you find a strategy object from
scheme_options to use. If the argument is given, you use that.

The best part of this approach is that you now have a way of saying "treat =
this
scheme exactly like https":

   from urllib import parse
   parse.urljoin('sptth://...', '../one-level-up', options=3Dparse.scheme_o=
ptions['https'])

Note: I wrote this before I realised that the lists non_hierarchical, uses_=
query
and uses_fragment are not used.  With only three options instead of six, ma=
king
========== REMAINDER OF ARTICLE TRUNCATED ==========