| 358 | self.set_text(value) |
| 359 | |
| 360 | def set_content(self, value: bytes | None) -> None: |
| 361 | if value is None: |
| 362 | self.raw_content = None |
| 363 | return |
| 364 | if not isinstance(value, bytes): |
| 365 | raise TypeError( |
| 366 | f"Message content must be bytes, not {type(value).__name__}. " |
| 367 | "Please use .text if you want to assign a str." |
| 368 | ) |
| 369 | ce = self.headers.get("content-encoding") |
| 370 | try: |
| 371 | self.raw_content = encoding.encode(value, ce or "identity") |
| 372 | except ValueError: |
| 373 | # So we have an invalid content-encoding? |
| 374 | # Let's remove it! |
| 375 | del self.headers["content-encoding"] |
| 376 | self.raw_content = value |
| 377 | |
| 378 | if "transfer-encoding" in self.headers: |
| 379 | # https://httpwg.org/specs/rfc7230.html#header.content-length |
| 380 | # don't set content-length if a transfer-encoding is provided |
| 381 | pass |
| 382 | else: |
| 383 | self.headers["content-length"] = str(len(self.raw_content)) |
| 384 | |
| 385 | def get_content(self, strict: bool = True) -> bytes | None: |
| 386 | """ |