summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-12-12 01:07:45 +0200
committerAlex Grönholm <alex.gronholm@nextday.fi>2022-12-12 01:07:45 +0200
commit59fd006757488aa38a655bb9c8a2904575a2d416 (patch)
tree4bafddd6a91f4cc3b3b259c60a591d42e90d95d0
parent09c5f6482fc609a4a02246fac9ccac722f51af7e (diff)
downloadwheel-git-publicapi.tar.gz
Added a standalone function for writing a WHEEL filepublicapi
-rw-r--r--src/wheel/__init__.py16
-rw-r--r--src/wheel/_wheelfile.py41
2 files changed, 35 insertions, 22 deletions
diff --git a/src/wheel/__init__.py b/src/wheel/__init__.py
index 0415c70..08132a2 100644
--- a/src/wheel/__init__.py
+++ b/src/wheel/__init__.py
@@ -1,6 +1,18 @@
from __future__ import annotations
-__all__ = ["WheelError", "WheelReader", "WheelWriter", "make_filename"]
+__all__ = [
+ "WheelError",
+ "WheelReader",
+ "WheelWriter",
+ "make_filename",
+ "write_wheelfile",
+]
__version__ = "1.0.0a1"
-from ._wheelfile import WheelError, WheelReader, WheelWriter, make_filename
+from ._wheelfile import (
+ WheelError,
+ WheelReader,
+ WheelWriter,
+ make_filename,
+ write_wheelfile,
+)
diff --git a/src/wheel/_wheelfile.py b/src/wheel/_wheelfile.py
index 3c2f6d8..c25acae 100644
--- a/src/wheel/_wheelfile.py
+++ b/src/wheel/_wheelfile.py
@@ -11,10 +11,9 @@ from collections import OrderedDict
from collections.abc import Iterable, Iterator
from contextlib import ExitStack
from datetime import datetime, timezone
-from email.generator import Generator
from email.message import Message
from email.policy import EmailPolicy
-from io import StringIO, UnsupportedOperation
+from io import BytesIO, StringIO, UnsupportedOperation
from os import PathLike
from pathlib import Path, PurePath
from types import TracebackType
@@ -355,6 +354,22 @@ class WheelReader:
return f"{self.__class__.__name__}({self.path_or_fd})"
+def write_wheelfile(
+ fp: IO[bytes], metadata: WheelMetadata, generator: str, root_is_purelib: bool
+) -> None:
+ msg = Message(policy=EMAIL_POLICY)
+ msg["Wheel-Version"] = "1.0" # of the spec
+ msg["Generator"] = generator
+ msg["Root-Is-Purelib"] = str(root_is_purelib).lower()
+ if metadata.build_tag:
+ msg["Build"] = str(metadata.build_tag[0]) + metadata.build_tag[1]
+
+ for tag in sorted(metadata.tags, key=lambda t: (t.interpreter, t.abi, t.platform)):
+ msg["Tag"] = f"{tag.interpreter}-{tag.abi}-{tag.platform}"
+
+ fp.write(msg.as_bytes())
+
+
class WheelWriter:
def __init__(
self,
@@ -428,24 +443,12 @@ class WheelWriter:
self.write_distinfo_file("RECORD", data.getvalue())
def _write_wheelfile(self) -> None:
- msg = Message()
- msg["Wheel-Version"] = "1.0" # of the spec
- msg["Generator"] = self.generator
- msg["Root-Is-Purelib"] = str(self.root_is_purelib).lower()
- if self.metadata.build_tag:
- msg["Build"] = str(self.metadata.build_tag[0]) + self.metadata.build_tag[1]
-
- for tag in sorted(
- self.metadata.tags, key=lambda t: (t.interpreter, t.abi, t.platform)
- ):
- msg["Tag"] = f"{tag.interpreter}-{tag.abi}-{tag.platform}"
-
- buffer = StringIO()
- Generator(buffer, maxheaderlen=0, policy=EMAIL_POLICY).flatten(msg)
+ buffer = BytesIO()
+ write_wheelfile(buffer, self.metadata, self.generator, self.root_is_purelib)
self.write_distinfo_file("WHEEL", buffer.getvalue())
def write_metadata(self, items: Iterable[tuple[str, str]]) -> None:
- msg = Message()
+ msg = Message(policy=EMAIL_POLICY)
for key, value in items:
key = key.title()
if key == "Description":
@@ -460,9 +463,7 @@ class WheelWriter:
if "Version" not in msg:
msg["Version"] = str(self.metadata.version)
- buffer = StringIO()
- Generator(buffer, maxheaderlen=0, policy=EMAIL_POLICY).flatten(msg)
- self.write_distinfo_file("METADATA", buffer.getvalue())
+ self.write_distinfo_file("METADATA", msg.as_bytes())
def write_file(
self,