Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,17 @@ replacements:
"""
session.install("flake8", RUFF_VERSION)

# 1. Check imports
session.run(
"ruff",
"check",
"--select",
"I",
f"--target-version=py{ALL_PYTHON[0].replace('.', '')}",
"--line-length=88",
*LINT_PATHS,
)

# 2. Check formatting
session.run(
"ruff",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -730,7 +730,7 @@ replacements:
"core_deps_from_source",
"mypy",
]

# Error if a python version is missing
nox.options.error_on_missing_interpreters = True

Expand All @@ -744,6 +744,17 @@ replacements:
"""
session.install("flake8", RUFF_VERSION)

# 1. Check imports
session.run(
"ruff",
"check",
"--select",
"I",
f"--target-version=py{ALL_PYTHON[0].replace('.', '')}",
"--line-length=88",
*LINT_PATHS,
)

# 2. Check formatting
session.run(
"ruff",
Expand Down
4 changes: 2 additions & 2 deletions librarian.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ tools:
version: 23.7.0
package: black[jupyter]==23.7.0
- name: gapic-generator
version: faa0f813d1a1ab202d0a7ef9a8f2533911070105
package: gapic-generator@git+https://github.com/googleapis/google-cloud-python.git@faa0f813d1a1ab202d0a7ef9a8f2533911070105#subdirectory=packages/gapic-generator
version: a7e09c9a711e37110a3803a0b0be67e8ab458de6
package: gapic-generator@git+https://github.com/googleapis/google-cloud-python.git@a7e09c9a711e37110a3803a0b0be67e8ab458de6#subdirectory=packages/gapic-generator
- name: isort
version: 5.11.0
- name: nox
Expand Down
2 changes: 1 addition & 1 deletion packages/django-google-spanner/django_spanner/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@

import os

from django.db.backends.base.base import BaseDatabaseWrapper
from asgiref.sync import sync_to_async
from django.db.backends.base.base import BaseDatabaseWrapper
from google.cloud import spanner, spanner_dbapi

from .client import DatabaseClient
Expand Down
27 changes: 24 additions & 3 deletions packages/django-google-spanner/docs/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,13 @@ Supported versions
~~~~~~~~~~~~~~~~~~

The library supports `Django 5.2
<https://docs.djangoproject.com/en/5.2/>`_.
<https://docs.djangoproject.com/en/5.2/>`_ and `Django 6.0
<https://docs.djangoproject.com/en/6.0/>`_.
The minimum required Python version is 3.10.

.. code:: shell

pip3 install django==5.2
pip3 install "django>=5.2,<6.1"


Installing the package
Expand All @@ -88,7 +89,7 @@ To install from source:
.. code:: shell

git clone git@github.com:googleapis/google-cloud-python.git
cd python-spanner-django
cd packages/django-google-spanner
pip3 install -e .


Expand Down Expand Up @@ -266,6 +267,26 @@ By participating in this project you agree to abide by its terms. See the `Code
of Conduct <https://github.com/googleapis/google-cloud-python/blob/main/CODE_OF_CONDUCT.md>`_ for more information.


DML RETURNING Behavior
~~~~~~~~~~~~~~~~~~~~~~

Starting with Django 6.0 compatibility, ``can_return_columns_from_insert = True`` is enabled. Django will generate ``THEN RETURN`` clauses for insert statements that create model instances with database-generated defaults or ``GeneratedField`` columns.

If your application relies on the previous behavior (where returned columns were not queried automatically upon insert), you can disable it in your Django ``AppConfig``:

.. code:: python

from django.apps import AppConfig

class MyAppConfig(AppConfig):
name = "myapp"

def ready(self):
from django_spanner.features import DatabaseFeatures

DatabaseFeatures.can_return_columns_from_insert = False


Limitations
~~~~~~~~~~~

Expand Down
14 changes: 8 additions & 6 deletions packages/google-ads-admanager/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-ads-datamanager/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-ads-marketingplatform-admin/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-ai-generativelanguage/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-analytics-admin/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-analytics-data/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-apps-card/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-apps-chat/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-apps-events-subscriptions/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
14 changes: 8 additions & 6 deletions packages/google-apps-meet/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,9 +526,10 @@ def prerelease_deps(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Extract the base package name, safely ignoring version bounds and spaces
# (e.g., "grpcio>=1.75.1" becomes "grpcio")
Expand Down Expand Up @@ -638,9 +639,10 @@ def core_deps_from_source(session, protobuf_implementation):
"proto-plus",
]

deps_dir = CURRENT_DIRECTORY.parent
while deps_dir.name != "packages" and deps_dir.parent != deps_dir:
deps_dir = deps_dir.parent
# Locate the monorepo 'packages' directory containing core dependencies
deps_dir = next(
p / "packages" for p in CURRENT_DIRECTORY.parents if (p / "packages").is_dir()
)

# Batch the pip installation to avoid sequential overhead
dep_paths = [str(deps_dir / dep) for dep in core_dependencies_from_source]
Expand Down
Loading
Loading