Skip to content

Commit

Permalink
merge branch feature/project-tags into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
Nemanja Boskovic committed Mar 2, 2021
2 parents 290486f + b711782 commit 59607fc
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 4 deletions.
5 changes: 5 additions & 0 deletions docs/quickstart.rst
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,11 @@ object:
# Query projects by project category
project_list = api.projects.query(category=project_category)
.. code:: python
# List projects that have both tags 'tagA' and 'tagB'
project_list = api.projects.query(tags=['tagA', 'tagB'])
.. code:: python
# Iterate through all my projects and print their name and id
Expand Down
11 changes: 11 additions & 0 deletions sevenbridges/meta/transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,3 +305,14 @@ def to_async_job(async_job):
return async_job
else:
raise SbgError('Invalid async job parameter!')

@staticmethod
def to_tags(tags):
if not isinstance(tags, list):
raise SbgError('Tags argument must be a list.')
tag_list = []
for tag in tags:
if "," in tag:
raise SbgError('Tags must not contain comma character.')
tag_list.append(tag)
return tag_list
5 changes: 4 additions & 1 deletion sevenbridges/models/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def __eq__(self, other):

@classmethod
def query(cls, owner=None, name=None, offset=None, limit=None, api=None,
category=None):
category=None, tags=None):
"""
Query (List) projects
:param owner: Owner username.
Expand All @@ -63,6 +63,7 @@ def query(cls, owner=None, name=None, offset=None, limit=None, api=None,
:param limit: Pagination limit.
:param api: Api instance.
:param category: Project category.
:param tags: Project tags.
:return: Collection object.
"""
api = api if api else cls._API
Expand All @@ -75,6 +76,8 @@ def query(cls, owner=None, name=None, offset=None, limit=None, api=None,
query_params['name'] = name
if category:
query_params['category'] = category
if tags:
query_params['tags'] = Transform.to_tags(tags)
return super()._query(
url=url, offset=offset, limit=limit, fields='_all',
api=api, **query_params
Expand Down
3 changes: 2 additions & 1 deletion tests/providers.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ def default_project():
'name': generator.user_name(),
'billing_group': generator.uuid4(),
'category': generator.user_name(),
'settings': {}
'settings': {},
'tags': []
}

def exists(self, **kwargs):
Expand Down
23 changes: 22 additions & 1 deletion tests/test_projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,18 +70,23 @@ def test_modify_project(api, given, verifier):
id = f'{owner}/{project_short_name}'
given.project.exists(id=id)
new_name = generator.name()
tags = [generator.slug()]
new_category = generator.name()
given.project.can_be_saved(id=id, name=new_name, category=new_category)
given.project.can_be_saved(
id=id, name=new_name, category=new_category, tags=tags
)

# action
project = api.projects.get(id)

# verification
project.name = new_name
project.category = new_category
project.tags = tags
project.save()
assert project.name == new_name
assert project.category == new_category
assert project.tags == tags
verifier.project.saved(id=project.id)


Expand Down Expand Up @@ -327,3 +332,19 @@ def test_query_projects_with_name_owner(api, given, verifier):
# verification
assert len(projects) == 4
verifier.project.query_owner(owner=owner, name=name)


def test_query_projects_with_tags(api, given, verifier):
# preconditions
tag1 = generator.slug()
tag2 = generator.slug()
tags = [tag1, tag2]
given.project.query(total=3, tags=tags)
given.project.query(total=3)

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

# verification
assert len(projects) == 3
verifier.project.query(tags=tags)
4 changes: 3 additions & 1 deletion tests/verifiers.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,14 @@ def queried(self, offset, limit):
def created(self):
self.checker.check_url('/projects')

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

def query_owner(self, owner, name=None):
Expand Down

0 comments on commit 59607fc

Please sign in to comment.