Skip to content

Commit

Permalink
db: Add type hints to StepsConnectorComponent
Browse files Browse the repository at this point in the history
  • Loading branch information
tdesveaux committed May 21, 2024
1 parent 751a288 commit 212afec
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 28 deletions.
56 changes: 30 additions & 26 deletions master/buildbot/db/steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,16 @@ def __getitem__(self, key: str):


class StepsConnectorComponent(base.DBConnectorComponent):
url_lock = None
url_lock: defer.DeferredLock | None = None

@defer.inlineCallbacks
def getStep(self, stepid=None, buildid=None, number=None, name=None):
def getStep(
self,
stepid: int | None = None,
buildid: int | None = None,
number: int | None = None,
name: str | None = None,
):
tbl = self.db.model.steps
if stepid is not None:
wc = tbl.c.id == stepid
Expand All @@ -104,7 +110,7 @@ def getStep(self, stepid=None, buildid=None, number=None, name=None):
raise RuntimeError('must supply either number or name')
wc = wc & (tbl.c.buildid == buildid)

def thd(conn):
def thd(conn) -> StepModel | None:
q = self.db.model.steps.select().where(wc)
res = conn.execute(q)
row = res.fetchone()
Expand All @@ -117,9 +123,8 @@ def thd(conn):

return (yield self.db.pool.do(thd))

# returns a Deferred that returns a value
def getSteps(self, buildid):
def thd(conn):
def getSteps(self, buildid: int) -> defer.Deferred[list[StepModel]]:
def thd(conn) -> list[StepModel]:
tbl = self.db.model.steps
q = tbl.select()
q = q.where(tbl.c.buildid == buildid)
Expand All @@ -129,9 +134,10 @@ def thd(conn):

return self.db.pool.do(thd)

# returns a Deferred that returns a value
def addStep(self, buildid, name, state_string):
def thd(conn):
def addStep(
self, buildid: int, name: str, state_string: str
) -> defer.Deferred[tuple[int, int, str]]:
def thd(conn) -> tuple[int, int, str]:
tbl = self.db.model.steps
# get the highest current number
r = conn.execute(sa.select(sa.func.max(tbl.c.number)).where(tbl.c.buildid == buildid))
Expand Down Expand Up @@ -179,37 +185,36 @@ def thd(conn):

return self.db.pool.do(thd)

@defer.inlineCallbacks
def startStep(self, stepid, started_at, locks_acquired):
def thd(conn):
def startStep(self, stepid: int, started_at: int, locks_acquired: bool) -> defer.Deferred[None]:
def thd(conn) -> None:
tbl = self.db.model.steps
q = tbl.update().where(tbl.c.id == stepid)
if locks_acquired:
conn.execute(q.values(started_at=started_at, locks_acquired_at=started_at))
else:
conn.execute(q.values(started_at=started_at))

yield self.db.pool.do(thd)
return self.db.pool.do(thd)

@defer.inlineCallbacks
def set_step_locks_acquired_at(self, stepid, locks_acquired_at):
def thd(conn):
def set_step_locks_acquired_at(
self, stepid: int, locks_acquired_at: int
) -> defer.Deferred[None]:
def thd(conn) -> None:
tbl = self.db.model.steps
q = tbl.update().where(tbl.c.id == stepid)
conn.execute(q.values(locks_acquired_at=locks_acquired_at))

yield self.db.pool.do(thd)
return self.db.pool.do(thd)

# returns a Deferred that returns None
def setStepStateString(self, stepid, state_string):
def thd(conn):
def setStepStateString(self, stepid: int, state_string: str) -> defer.Deferred[None]:
def thd(conn) -> None:
tbl = self.db.model.steps
q = tbl.update().where(tbl.c.id == stepid)
conn.execute(q.values(state_string=state_string))

return self.db.pool.do(thd)

def addURL(self, stepid, name, url, _racehook=None):
def addURL(self, stepid: int, name: str, url: str, _racehook=None) -> defer.Deferred[None]:
# This methods adds an URL to the db
# This is a read modify write and thus there is a possibility
# that several urls are added at the same time (e.g with a deferredlist
Expand All @@ -221,7 +226,7 @@ def addURL(self, stepid, name, url, _racehook=None):
# this runs in reactor thread, so no race here..
self.url_lock = defer.DeferredLock()

def thd(conn):
def thd(conn) -> None:
tbl = self.db.model.steps
wc = tbl.c.id == stepid
q = sa.select(tbl.c.urls_json).where(wc)
Expand All @@ -238,11 +243,10 @@ def thd(conn):
q = tbl.update().where(wc)
conn.execute(q.values(urls_json=json.dumps(urls)))

return self.url_lock.run(lambda: self.db.pool.do(thd))
return self.url_lock.run(self.db.pool.do, thd)

# returns a Deferred that returns None
def finishStep(self, stepid, results, hidden):
def thd(conn):
def finishStep(self, stepid: int, results: int, hidden: bool) -> defer.Deferred[None]:
def thd(conn) -> None:
tbl = self.db.model.steps
q = tbl.update().where(tbl.c.id == stepid)
conn.execute(
Expand Down
12 changes: 10 additions & 2 deletions master/buildbot/test/fakedb/steps.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
#
# Copyright Buildbot Team Members

from __future__ import annotations

import json

from twisted.internet import defer
Expand Down Expand Up @@ -93,7 +95,13 @@ def _model_from_row(self, row):
hidden=bool(row['hidden']),
)

def getStep(self, stepid=None, buildid=None, number=None, name=None):
def getStep(
self,
stepid: int | None = None,
buildid: int | None = None,
number: int | None = None,
name: str | None = None,
) -> defer.Deferred[StepModel | None]:
if stepid is not None:
row = self.steps.get(stepid)
if not row:
Expand All @@ -112,7 +120,7 @@ def getStep(self, stepid=None, buildid=None, number=None, name=None):
return defer.succeed(self._model_from_row(row))
return defer.succeed(None)

def getSteps(self, buildid):
def getSteps(self, buildid) -> defer.Deferred[list[StepModel]]:
ret = []

for row in self.steps.values():
Expand Down

0 comments on commit 212afec

Please sign in to comment.