1"""PEP 610"""
2
3from __future__ import annotations
4
5import json
6from typing import Any
7
8from pip._vendor.packaging.direct_url import (
9 ArchiveInfo,
10 DirectUrlValidationError,
11 DirInfo,
12 VcsInfo,
13)
14from pip._vendor.packaging.direct_url import (
15 DirectUrl as PackagingDirectUrl,
16)
17
18__all__ = [
19 "ArchiveInfo",
20 "DirInfo",
21 "DirectUrl",
22 "DirectUrlValidationError",
23 "DIRECT_URL_METADATA_NAME",
24 "VcsInfo",
25]
26
27DIRECT_URL_METADATA_NAME = "direct_url.json"
28
29
30class DirectUrl(PackagingDirectUrl):
31 def to_dict_compat(self) -> dict[str, Any]:
32 return dict(super().to_dict(generate_legacy_hash=True))
33
34 @classmethod
35 def from_json(cls, s: str) -> DirectUrl:
36 return cls.from_dict(json.loads(s))
37
38 def to_json(self) -> str:
39 return json.dumps(self.to_dict_compat(), sort_keys=True)
40
41 def is_local_editable(self) -> bool:
42 return bool(self.dir_info and self.dir_info.editable)