PHP 8.3.31
Preview: attachments.py Size: 2.95 KB
/proc/self/root/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/attachments.py

import mimetypes
import os
from typing import TYPE_CHECKING

from sentry_sdk.envelope import Item, PayloadRef

if TYPE_CHECKING:
    from typing import Callable, Optional, Union


class Attachment:
    """Additional files/data to send along with an event.

    This class stores attachments that can be sent along with an event. Attachments are files or other data, e.g.
    config or log files, that are relevant to an event. Attachments are set on the ``Scope``, and are sent along with
    all non-transaction events (or all events including transactions if ``add_to_transactions`` is ``True``) that are
    captured within the ``Scope``.

    To add an attachment to a ``Scope``, use :py:meth:`sentry_sdk.Scope.add_attachment`. The parameters for
    ``add_attachment`` are the same as the parameters for this class's constructor.

    :param bytes: Raw bytes of the attachment, or a function that returns the raw bytes. Must be provided unless
                  ``path`` is provided.
    :param filename: The filename of the attachment. Must be provided unless ``path`` is provided.
    :param path: Path to a file to attach. Must be provided unless ``bytes`` is provided.
    :param content_type: The content type of the attachment. If not provided, it will be guessed from the ``filename``
                         parameter, if available, or the ``path`` parameter if ``filename`` is ``None``.
    :param add_to_transactions: Whether to add this attachment to transactions. Defaults to ``False``.
    """

    def __init__(
        self,
        bytes: "Union[None, bytes, Callable[[], bytes]]" = None,
        filename: "Optional[str]" = None,
        path: "Optional[str]" = None,
        content_type: "Optional[str]" = None,
        add_to_transactions: bool = False,
    ) -> None:
        if bytes is None and path is None:
            raise TypeError("path or raw bytes required for attachment")
        if filename is None and path is not None:
            filename = os.path.basename(path)
        if filename is None:
            raise TypeError("filename is required for attachment")
        if content_type is None:
            content_type = mimetypes.guess_type(filename)[0]
        self.bytes = bytes
        self.filename = filename
        self.path = path
        self.content_type = content_type
        self.add_to_transactions = add_to_transactions

    def to_envelope_item(self) -> "Item":
        """Returns an envelope item for this attachment."""
        payload: "Union[None, PayloadRef, bytes]" = None
        if self.bytes is not None:
            if callable(self.bytes):
                payload = self.bytes()
            else:
                payload = self.bytes
        else:
            payload = PayloadRef(path=self.path)
        return Item(
            payload=payload,
            type="attachment",
            content_type=self.content_type,
            filename=self.filename,
        )

    def __repr__(self) -> str:
        return "<Attachment %r>" % (self.filename,)

Directory Contents

Dirs: 5 × Files: 36

Name Size Perms Modified Actions
ai DIR
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
crons DIR
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
profiler DIR
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
- drwxr-xr-x 2026-06-11 06:30:31
Edit Download
15.59 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
2.95 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
49.95 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
61.95 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
959 B lrw-r--r-- 2026-06-11 06:30:30
Edit Download
9.37 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
2.50 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
24.54 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
2.60 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.42 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
4.47 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
0 B lrw-r--r-- 2026-06-11 06:30:30
Edit Download
74.09 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
5.99 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
12.82 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
5.08 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
8.59 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
11.85 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
25.08 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
50.33 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
54.36 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
44.41 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.24 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
65.96 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
10.91 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
5.70 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
3.00 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
2.43 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.88 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.14 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.21 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
10.98 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
8.12 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
13.16 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
3.85 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download
1.46 KB lrw-r--r-- 2026-06-11 06:30:30
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).