Skip to content

Conversation

@bhatt4982
Copy link
Contributor

Project setup for Spannerlib-Python

@bhatt4982 bhatt4982 requested a review from a team as a code owner December 1, 2025 11:11
@gemini-code-assist
Copy link

Summary of Changes

Hello @bhatt4982, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request lays the groundwork for the spannerlib-python project, a Python wrapper designed to provide a high-performance interface to Google Cloud Spanner by leveraging its Go client shared library. The changes establish a robust project setup, including essential configuration for building, testing, and packaging the library, alongside initial documentation and licensing. This foundational work is crucial for future development and integration of the Spanner client within the Python ecosystem.

Highlights

  • Initial Project Structure: Established the foundational directory and file structure for the spannerlib-python wrapper, including Python package directories, test directories, and a samples folder.
  • Build and Packaging Configuration: Introduced pyproject.toml for modern Python packaging, setup.py for setuptools, MANIFEST.in for including non-Python files, and requirements.txt for dependencies.
  • Automated Workflow Setup (Nox): Configured noxfile.py to automate common development tasks such as code formatting (Black, Isort), linting (Flake8), running unit and system tests, and managing the build process for the Python package.
  • Shared Library Integration: Added build-shared-lib.sh and related Nox sessions to handle the building and copying of platform-specific Go Spanner client shared library binaries, which the Python wrapper will interface with.
  • Documentation and Licensing: Included a comprehensive README.md with instructions for setup, testing, and building, along with the Apache License 2.0.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request does a great job of setting up the initial project structure for spannerlib-python, including configurations for building, packaging, testing, and linting. The setup is comprehensive. My review provides feedback to enhance the robustness and cross-platform compatibility of the build scripts, improve test configurations, and address minor issues in documentation and placeholder files. Key suggestions include adding set -e to the build script for safer execution, resolving the non-portable use of bash in noxfile.py, and correcting placeholder test files.

@bhatt4982
Copy link
Contributor Author

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request sets up the initial project structure for spannerlib-python. The setup includes configuration for building, testing, linting, and packaging using nox and setuptools. The overall structure is solid, but I've identified a few issues, primarily in the build scripts and CI configuration, that should be addressed. My main concerns are a critical path issue in the build script, lack of testing across all supported Python versions, and missing support for Intel-based Macs. I've left detailed comments with suggestions for each point.

@bhatt4982
Copy link
Contributor Author

/gemini review

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request sets up the initial project structure for spannerlib-python. The setup is comprehensive, including build scripts, packaging configuration with pyproject.toml, testing setup with nox, and CI-friendly shell scripts. My review focuses on improving the robustness and maintainability of the setup files. I've suggested a few changes to the README.md for clarity, improvements to the build script for simplicity and portability, and removal of some redundant code in noxfile.py and setup.py. Overall, this is a solid foundation for the new package.

bhatt4982 and others added 17 commits December 3, 2025 05:20
…unit/test_placeholder.py

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
olavloite
olavloite previously approved these changes Dec 3, 2025
Copy link
Collaborator

@olavloite olavloite left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Feel free to address any review comments that need any changes in a follow-up PR.

@bhatt4982 bhatt4982 changed the title Chore: Python-Spanner-Driver - Project Setup Chore: Python-Spanner-Driver | Spannerlib Wrapper | Project Setup Dec 3, 2025
…dle spannerlib library interaction (#657)

* feat: Add initial Python wrapper for Spanner library,
including internal message structures, error handling,
and a protocol definition.

* refactor: Introduce `_load_library` for library initialization, remove `_get_lib_path`, and update related tests.

* Chore: Python-Spanner-Driver | Spannerlib Wrapper | Added Pool class and relevant tests (#658)

* feat: Introduce AbstractLibraryObject and Pool modules with their unit and system tests, replacing placeholder tests.

* Chore: Python-Spanner-Driver - Added Connection class and relevant tests (#659)

* feat: introduce Connection class and enable Pool to create and manage connections

* Chore: Python-Spanner-Driver | Spannerlib Wrapper | Added Execute, ExecuteBatch and WriteMutation methods and relevant tests... (#660)

* feat: Introduce `Rows` class and add `execute`, `execute_batch`, and `write_mutations` methods to `Connection`.

* feat: Add SQL execution, batch DML, and mutation writing methods to Connection and expose Rows object.

* Chore: Python-Spanner-Driver - Added Rows class, its methods and relevant tests... (#661)

* test: add system tests for query, batch DML, and mutation operations, including emulator setup.

* feat: Add `next()`, `metadata()`, `result_set_stats()`, and `update_count()` methods to the `Rows` class for fetching data and statistics, including unit tests.

* test: Add system tests for `Rows` class covering metadata, stats, update count, and row iteration.

* Chore: Python-Spanner-Driver - Added transaction functions in Connection class and relevant tests... (#662)

* feat: Add transaction management with `begin_transaction`, `commit`, and `rollback` methods and their respective tests.

* feat: add system and unit tests for transaction mutation writes, including commit and rollback scenarios.

* feat: `update_count`  returns -1 instead of 0 when row count stats are unavailable and updates the corresponding test.

* refactor: remove direct Pool argument from Rows constructor and access via Connection.

* feat: Add `IF NOT EXISTS` to `CREATE TABLE` and `IF EXISTS` to `DROP TABLE` statements, removing explicit exception handling.

* feat: `write_mutations` now returns `None` for buffered mutations, updating its return type and related tests.

* Update spannerlib/wrappers/spannerlib-python/spannerlib-python/google/cloud/spannerlib/internal/message.py

Co-authored-by: Knut Olav Løite <koloite@gmail.com>

* feat: Remove Python 3.8 fallback for `importlib.resources` and few docstring update

* feat: Enhance SpannerLibError messages to include gRPC status names and add corresponding tests.

* test: update SpannerLibError repr test message and code values

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Co-authored-by: Knut Olav Løite <koloite@gmail.com>
@bhatt4982 bhatt4982 merged commit aac54e0 into main Dec 4, 2025
35 checks passed
@bhatt4982 bhatt4982 deleted the psd-01-setup branch December 4, 2025 16:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants