|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
3 | 3 | import logging |
4 | | -import re |
| 4 | +import urllib.parse |
5 | 5 | from enum import Enum |
6 | 6 | from typing import TYPE_CHECKING, Any, Dict, List, Literal, NoReturn, Optional, Set, Union |
7 | 7 |
|
@@ -85,10 +85,10 @@ def __init__(self, zip_url: str, type: SourceTypeEnum): |
85 | 85 | """Initialize the AddonSource.""" |
86 | 86 | self.zip_url = zip_url |
87 | 87 | if self.zip_url is not None: |
88 | | - match = re.match(r"^(?:https?:\/\/)?(?P<url>(?P<domain>.*\..+?)\/(?P<path>.*))$", self.zip_url) |
89 | | - self.zip_url = match.group("url") |
90 | | - self.domain = match.group("domain") |
91 | | - self.path = match.group("path") |
| 88 | + parsed_url = urllib.parse.urlparse(self.zip_url) |
| 89 | + self.zip_url = urllib.parse.urlunparse(parsed_url) |
| 90 | + self.domain = parsed_url.netloc |
| 91 | + self.path = parsed_url.path |
92 | 92 | else: |
93 | 93 | self.domain = None |
94 | 94 | self.path = None |
@@ -120,8 +120,7 @@ def from_repo(cls, user: str, repo: str, reflike: str = None, githost: Host = "g |
120 | 120 | @classmethod |
121 | 121 | def from_zip(cls, url: str) -> AddonSource: |
122 | 122 | """Create an AddonSource from a zip file.""" |
123 | | - match = re.match(r"^(?P<url>(?:https?:\/\/)?(?P<domain>.*\..+?)\/(?P<path>.*\.zip))$", url) |
124 | | - source = cls(match.group("url"), SourceTypeEnum.ZIP) |
| 123 | + source = cls(url, SourceTypeEnum.ZIP) |
125 | 124 | return source |
126 | 125 |
|
127 | 126 | def __repr__(self) -> str: # pragma: no cover |
|
0 commit comments