Skip to content

Commit

Permalink
add support kwargs to builds.start()
Browse files Browse the repository at this point in the history
  • Loading branch information
pbelskiy committed Dec 6, 2022
1 parent 7e92c76 commit eea1859
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 14 deletions.
49 changes: 36 additions & 13 deletions aiojenkins/builds.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,8 @@ async def get_queue_id_info(self, queue_id: int) -> dict:
async def start(self,
name: str,
parameters: Optional[dict] = None,
delay: int = 0
delay: int = 0,
**kwargs: Any
) -> Optional[int]:
"""
Enqueue new build with delay (default is 0 seconds, means immediately)
Expand All @@ -171,22 +172,37 @@ async def start(self,
name (str):
Job name or path (if in folder).
parameters (Optional[dict]):
Parameters of triggering build.
parameters (Optional[Any]):
Parameters of triggering build as dict or argument, also
parameters can be passed as kwargs.
delay (Optional[int]):
Delay before start.
Examples:
Returns:
Optional[int]: queue item id.
"""
folder_name, job_name = self.jenkins._get_folder_and_job_name(name)
.. code-block:: python
path = '/{}/job/{}'.format(folder_name, job_name)
start(..., parameters=dict(a=1, b='string'))
start(..., a=1, b='string')
start(..., parameters=1)
start(..., parameters(a=1, b='string'), c=3)
data = None
delay (int):
Delay before start, default is 0, no delay.
if parameters:
Returns:
Optional[int]: queue item id.
"""
def format_data(parameters: Optional[dict], kwargs: Any) -> Optional[dict]:
if not (parameters or kwargs):
return None

# backward compatibility
if isinstance(parameters, dict):
parameters.update(**kwargs)
elif parameters is None:
parameters = kwargs
else:
parameters = dict(parameters=parameters)
parameters.update(**kwargs)

formatted_parameters = [
{'name': k, 'value': str(v)} for k, v in parameters.items()
Expand All @@ -204,6 +220,13 @@ async def start(self,
**parameters,
}

return data

folder_name, job_name = self.jenkins._get_folder_and_job_name(name)
path = '/{}/job/{}'.format(folder_name, job_name)

data = format_data(parameters, kwargs)
if data:
path += '/buildWithParameters'
else:
path += '/build'
Expand All @@ -216,7 +239,7 @@ async def start(self,
)

try:
# FIXME: on Jenkins 1.554 there is problem, no queue id returned
# no queue id returned on Jenkins 1.554
queue_item_url = response.headers['location']
queue_id = queue_item_url.rstrip('/').split('/')[-1]
return int(queue_id)
Expand Down
1 change: 0 additions & 1 deletion tests/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import pytest


QUEUE_JSON = """
{
"_class" : "hudson.model.Queue",
Expand Down

0 comments on commit eea1859

Please sign in to comment.