mirror of
https://github.com/lancedb/lancedb.git
synced 2025-12-23 05:19:58 +00:00
@wjones127 is there a standard way you guys setup your virtualenv? I can
either relist all the dependencies in the pyright precommit section, or
specify a venv, or the user has to be in the virtual environment when
they run git commit. If the venv location was standardized or a python
manager like `uv` was used it would be easier to avoid duplicating the
pyright dependency list.
Per your suggestion, in `pyproject.toml` I added in all the passing
files to the `includes` section.
For ruff I upgraded the version and removed "TCH" which doesn't exist as
an option.
I added a `pyright_report.csv` which contains a list of all files sorted
by pyright errors ascending as a todo list to work on.
I fixed about 30 issues in `table.py` stemming from str's being passed
into methods that required a string within a set of string Literals by
extracting them into `types.py`
Can you verify in the rust bridge that the schema should be a property
and not a method here? If it's a method, then there's another place in
the code where `inner.schema` should be `inner.schema()`
``` python
class RecordBatchStream:
@property
def schema(self) -> pa.Schema: ...
```
Also unless the `_lancedb.pyi` file is wrong, then there is no
`__anext__` here for `__inner` when it's not an `AsyncGenerator` and
only `next` is defined:
``` python
async def __anext__(self) -> pa.RecordBatch:
return await self._inner.__anext__()
if isinstance(self._inner, AsyncGenerator):
batch = await self._inner.__anext__()
else:
batch = await self._inner.next()
if batch is None:
raise StopAsyncIteration
return batch
```
in the else statement, `_inner` is a `RecordBatchStream`
```python
class RecordBatchStream:
@property
def schema(self) -> pa.Schema: ...
async def next(self) -> Optional[pa.RecordBatch]: ...
```
---------
Co-authored-by: Will Jones <willjones127@gmail.com>
42 lines
1013 B
Python
42 lines
1013 B
Python
import argparse
|
|
import toml
|
|
|
|
|
|
def parse_dependencies(pyproject_path, extras=None):
|
|
with open(pyproject_path, "r") as file:
|
|
pyproject = toml.load(file)
|
|
|
|
dependencies = pyproject.get("project", {}).get("dependencies", [])
|
|
for dependency in dependencies:
|
|
print(dependency)
|
|
|
|
optional_dependencies = pyproject.get("project", {}).get(
|
|
"optional-dependencies", {}
|
|
)
|
|
|
|
if extras:
|
|
for extra in extras.split(","):
|
|
for dep in optional_dependencies.get(extra, []):
|
|
print(dep)
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Generate requirements.txt from pyproject.toml"
|
|
)
|
|
parser.add_argument("path", type=str, help="Path to pyproject.toml")
|
|
parser.add_argument(
|
|
"--extras",
|
|
type=str,
|
|
help="Comma-separated list of extras to include",
|
|
default="",
|
|
)
|
|
|
|
args = parser.parse_args()
|
|
|
|
parse_dependencies(args.path, args.extras)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|