|
2 | 2 |
|
3 | 3 | import shutil |
4 | 4 | import tempfile |
| 5 | +import warnings |
5 | 6 | from typing import TYPE_CHECKING |
6 | 7 |
|
7 | 8 | from daft.daft import PyDaftFile, PyFileReference |
@@ -57,10 +58,30 @@ def __init__( |
57 | 58 | url: str, |
58 | 59 | io_config: IOConfig | None = None, |
59 | 60 | media_type: MediaType = MediaType.unknown(), |
| 61 | + position: int | None = None, |
| 62 | + size: int | None = None, |
60 | 63 | offset: int | None = None, |
61 | 64 | length: int | None = None, |
62 | 65 | ) -> None: |
63 | | - self._inner = PyFileReference._from_tuple((media_type._media_type, url, io_config, offset, length)) # type: ignore |
| 66 | + if offset is not None: |
| 67 | + warnings.warn( |
| 68 | + "`offset` is deprecated; use `position` instead.", |
| 69 | + DeprecationWarning, |
| 70 | + stacklevel=2, |
| 71 | + ) |
| 72 | + if position is None: |
| 73 | + position = offset |
| 74 | + |
| 75 | + if length is not None: |
| 76 | + warnings.warn( |
| 77 | + "`length` is deprecated; use `size` instead.", |
| 78 | + DeprecationWarning, |
| 79 | + stacklevel=2, |
| 80 | + ) |
| 81 | + if size is None: |
| 82 | + size = length |
| 83 | + |
| 84 | + self._inner = PyFileReference._from_tuple((media_type._media_type, url, io_config, position, size)) # type: ignore |
64 | 85 |
|
65 | 86 | def open(self, buffer_size: int | None = None) -> PyDaftFile: |
66 | 87 | return PyDaftFile._from_file_reference(self._inner, buffer_size=buffer_size) |
@@ -110,17 +131,37 @@ def name(self) -> str: |
110 | 131 | """ |
111 | 132 | return self._inner.name() |
112 | 133 |
|
| 134 | + @property |
| 135 | + def position(self) -> int | None: |
| 136 | + """The starting byte position for range reads, or None for full-file reads.""" |
| 137 | + return self._inner.position() |
| 138 | + |
113 | 139 | @property |
114 | 140 | def offset(self) -> int | None: |
115 | | - """The byte offset for range reads, or None for full-file reads.""" |
116 | | - return self._inner.offset() |
| 141 | + """Deprecated alias for `position`. The byte offset for range reads, or None for full-file reads.""" |
| 142 | + warnings.warn( |
| 143 | + "`File.offset` is deprecated; use `File.position` instead.", |
| 144 | + DeprecationWarning, |
| 145 | + stacklevel=2, |
| 146 | + ) |
| 147 | + return self._inner.position() |
117 | 148 |
|
118 | 149 | @property |
119 | 150 | def length(self) -> int | None: |
120 | | - """The byte length for range reads, or None for full-file reads.""" |
121 | | - return self._inner.length() |
| 151 | + """Deprecated alias for the byte-range read window size, or None for full-file reads. |
| 152 | +
|
| 153 | + Note: this returns the requested range size (caller intent), not the derived file |
| 154 | + size. Use `File.size()` for the actual file size. |
| 155 | + """ |
| 156 | + warnings.warn( |
| 157 | + "`File.length` is deprecated; use `File.size()` instead.", |
| 158 | + DeprecationWarning, |
| 159 | + stacklevel=2, |
| 160 | + ) |
| 161 | + return self._inner.size() |
122 | 162 |
|
123 | 163 | def size(self) -> int: |
| 164 | + """The size of the file in bytes, derived from the underlying file.""" |
124 | 165 | return PyDaftFile._from_file_reference(self._inner, buffer_size=BUFFER_SNIFF).size() |
125 | 166 |
|
126 | 167 | def mime_type(self) -> str: |
|
0 commit comments