Skip to content

Commit

Permalink
Add querying projects by name parameter
Browse files Browse the repository at this point in the history
  • Loading branch information
gingercookiemage committed Dec 21, 2018
1 parent 265252e commit 495f5ec
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 4 deletions.
8 changes: 8 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
0.17.5 (2018-12-21)
==================

- Improvements:
- Enabled querying projects by name parameter
- Note:
- Querying projects with parameter 'owner=<division_user_username>' will not yield the correct result

0.17.4 (2018-12-17)
==================

Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.17.4
0.17.5
5 changes: 5 additions & 0 deletions docs/quickstart.rst
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,11 @@ object:
# Get details of my first 10 projects.
project_list = api.projects.query(limit=10)
.. code:: python
# Query projects by project name
project_list = api.projects.query(name=project_name)
.. code:: python
# Iterate through all my projects and print their name and id
Expand Down
2 changes: 1 addition & 1 deletion sevenbridges/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import ssl
import logging

__version__ = "0.17.4"
__version__ = "0.17.5"

from sevenbridges.api import Api
from sevenbridges.config import Config
Expand Down
9 changes: 7 additions & 2 deletions sevenbridges/models/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,22 +55,27 @@ def __ne__(self, other):
return not self.__eq__(other)

@classmethod
def query(cls, owner=None, offset=None, limit=None, api=None):
def query(cls, owner=None, name=None, offset=None, limit=None, api=None):
"""
Query (List) projects
:param owner: Owner username.
:param name: Project name
:param offset: Pagination offset.
:param limit: Pagination limit.
:param api: Api instance.
:return: Collection object.
"""
api = api if api else cls._API
query_params = {}
if owner:
url = cls._URL['query'].format(owner=owner)
else:
url = cls._URL['query'].format(owner='')
if name:
query_params['name'] = name
return super(Project, cls)._query(
url=url, offset=offset, limit=limit, fields='_all', api=api
url=url, offset=offset, limit=limit, fields='_all',
api=api, **query_params
)

@classmethod
Expand Down
20 changes: 20 additions & 0 deletions sevenbridges/tests/providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,26 @@ def exists(self, **kwargs):
id = project['id']
self.request_mocker.get('/projects/{}'.format(id), json=project)

def query(self, total, **kwargs):
items = [ProjectProvider.default_project() for _ in range(total)]
items[0].update(**kwargs)
name = kwargs.get('name')
owner = kwargs.get('owner')
url = '/projects/?fields=_all'
if owner:
url = '/projects/{}?fields=_all'.format(owner)
if name:
url += '&name={}'.format(name)
href = self.base_url + url
links = []
response = {
'href': href,
'items': items,
'links': links
}
self.request_mocker.get(href, json=response,
headers={'x-total-matching-query': str(total)})

def can_be_created(self, **kwargs):
project = self.default_project()
[project.pop(key) for key in ['id', 'href']]
Expand Down
41 changes: 41 additions & 0 deletions sevenbridges/tests/test_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -258,3 +258,44 @@ def test_member_permissions_save_no_changes(api, given, verifier):
member.permissions['read'] = True
with pytest.raises(ResourceNotModified):
member.save()


def test_query_projects_with_name(api, given, verifier):
# preconditions
name = generator.name()
given.project.query(total=3, name=name)

# action
projects = api.projects.query(name=name)

# verification
assert len(projects) == 3
assert projects[0].name == name
verifier.project.query(name=name)


def test_query_projects_with_owner(api, given, verifier):
# preconditions
owner = generator.word()
given.project.query(total=3, owner=owner)

# action
projects = api.projects.query(owner=owner)

# verification
assert len(projects) == 3
verifier.project.query_owner(owner=owner)


def test_query_projects_with_name_owner(api, given, verifier):
# preconditions
owner = generator.word()
name = generator.name()
given.project.query(total=4, owner=owner, name=name)

# action
projects = api.projects.query(owner=owner, name=name)

# verification
assert len(projects) == 4
verifier.project.query_owner(owner=owner, name=name)
14 changes: 14 additions & 0 deletions sevenbridges/tests/verifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,20 @@ def queried(self, offset, limit):
def created(self):
self.checker.check_url('/projects')

def query(self, name=None):
qs = {'fields': ['_all']}
if name:
qs.update({'name': [name]})
self.checker.check_url('/projects/') and self.checker.check_query(qs)

def query_owner(self, owner, name=None):
qs = {'fields': ['_all']}
if name:
qs.update({'name': [name]})
self.checker.check_url(
'/projects/{}'.format(owner)
) and self.checker.check_query(qs)

def saved(self, id):
self.checker.check_url('/projects/{}'.format(id))

Expand Down

0 comments on commit 495f5ec

Please sign in to comment.