Skip to content

Commit

Permalink
feat: add job_timeout_ms to job configuration classes (#1675)
Browse files Browse the repository at this point in the history
* fix: adds new property and tests

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* updates docs to correct a sphinx failure

* Updates formatting

* Update tests/system/test_query.py

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* Update google/cloud/bigquery/job/base.py

* updates one test and uses int_or_none

* Update tests/system/test_query.py

testing something.

* Update tests/system/test_query.py

* testing coverage feature

* 🦉 Updates from OwlBot post-processor

See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md

* minor edits

* tweaks to noxfile for testing purposes

* add new test to base as experiment

* adds a test, updates import statements

* add another test

* edit to tests

* formatting fixes

* update noxfile to correct debug code

* removes unneeded comments.

---------

Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
  • Loading branch information
chalmerlowe and gcf-owl-bot[bot] authored Nov 16, 2023
1 parent 58b3152 commit 84d64cd
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 1 deletion.
32 changes: 32 additions & 0 deletions google/cloud/bigquery/job/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

from google.cloud.bigquery import _helpers
from google.cloud.bigquery.retry import DEFAULT_RETRY
from google.cloud.bigquery._helpers import _int_or_none

if typing.TYPE_CHECKING: # pragma: NO COVER
from google.api_core import retry as retries
Expand Down Expand Up @@ -171,6 +172,37 @@ def __setattr__(self, name, value):
)
super(_JobConfig, self).__setattr__(name, value)

@property
def job_timeout_ms(self):
"""Optional parameter. Job timeout in milliseconds. If this time limit is exceeded, BigQuery might attempt to stop the job.
https://cloud.google.com/bigquery/docs/reference/rest/v2/Job#JobConfiguration.FIELDS.job_timeout_ms
e.g.
job_config = bigquery.QueryJobConfig( job_timeout_ms = 5000 )
or
job_config.job_timeout_ms = 5000
Raises:
ValueError: If ``value`` type is invalid.
"""

# None as this is an optional parameter.
if self._properties.get("jobTimeoutMs"):
return self._properties["jobTimeoutMs"]
return None

@job_timeout_ms.setter
def job_timeout_ms(self, value):
try:
value = _int_or_none(value)
except ValueError as err:
raise ValueError("Pass an int for jobTimeoutMs, e.g. 5000").with_traceback(
err.__traceback__
)

""" Docs indicate a string is expected by the API """
self._properties["jobTimeoutMs"] = str(value)

@property
def labels(self):
"""Dict[str, str]: Labels for the job.
Expand Down
7 changes: 6 additions & 1 deletion noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,12 @@ def system(session):
session.install("-e", f".{extras}", "-c", constraints_path)

# Run py.test against the system tests.
session.run("py.test", "--quiet", os.path.join("tests", "system"), *session.posargs)
session.run(
"py.test",
"--quiet",
os.path.join("tests", "system"),
*session.posargs,
)


@nox.session(python=DEFAULT_PYTHON_VERSION)
Expand Down
15 changes: 15 additions & 0 deletions tests/unit/job/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1228,3 +1228,18 @@ def test_labels_setter(self):
job_config = self._make_one()
job_config.labels = labels
self.assertEqual(job_config._properties["labels"], labels)

def test_job_timeout_ms_raises_valueerror(self):
# Confirm that attempting to set a non-integer values will raise an Error.
with pytest.raises(ValueError):
job_config = self._make_one()
job_config.job_timeout_ms = "WillRaiseError"

def test_job_timeout_ms(self):
# Confirm that default status is None.
job_config = self._make_one()
assert job_config.job_timeout_ms is None

# Confirm that integers get converted to strings.
job_config.job_timeout_ms = 5000
assert job_config.job_timeout_ms == "5000" # int is converted to string

0 comments on commit 84d64cd

Please sign in to comment.