Skip to content

Commit c55bf9d

Browse files
Added __contains__ and __delitem__ to BugManager (#315)
* updated version * added __contains__ to client-side BugManager * added __delitem__ to client-side BugManager * added __contains__ to server-side BugManager * added __delitem__ to server-side BugManager * added DELETE /bugs/:uid route to server * bug fix: wrong HTTP verb
1 parent 5957100 commit c55bf9d

File tree

5 files changed

+60
-3
lines changed

5 files changed

+60
-3
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
## 2.1.24 (XXXX-XX-XX)
2+
3+
### Features
4+
5+
* Added `__contains__` to client- and server-side `BugManager`.
6+
* Added `__delitem__` to client- and server-side `BugManager`.
7+
8+
19
## 2.1.23 (2019-02-28)
210

311
### Features

bugzoo/client/bug.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,25 @@ class BugManager(object):
2020
def __init__(self, api: APIClient) -> None:
2121
self.__api = api
2222

23+
def __contains__(self, name: str) -> bool:
24+
"""
25+
Determines whether there is a bug registered under a given name.
26+
"""
27+
r = self.__api.get('bugs/{}'.format(name))
28+
if r.status_code == 200:
29+
return True
30+
elif r.status_code == 404:
31+
return False
32+
self.__api.handle_erroneous_response(r)
33+
2334
def __getitem__(self, name: str) -> Bug:
2435
"""
2536
Retrieves the bug registered under a given name.
2637
2738
Raises:
2839
KeyError: if no bug is found with the given name.
2940
"""
30-
logger.info("Fetching information for bug: %s", name)
41+
logger.debug("Fetching information for bug: %s", name)
3142
r = self.__api.get('bugs/{}'.format(name))
3243

3344
if r.status_code == 200:
@@ -39,6 +50,20 @@ def __getitem__(self, name: str) -> Bug:
3950
logger.info("Unexpected API response when retrieving bug: %s", name)
4051
self.__api.handle_erroneous_response(r)
4152

53+
def __delitem__(self, name: str) -> None:
54+
"""
55+
Deregisters a bug under a given name.
56+
57+
Raises:
58+
KeyError: if no bug is found with the given name.
59+
"""
60+
r = self.__api.delete('bugs/{}'.format(name))
61+
if r.status_code == 204:
62+
return
63+
if r.status_code == 404:
64+
raise KeyError("no bug found with given name: {}".format(name))
65+
self.__api.handle_erroneous_response(r)
66+
4267
def __iter__(self) -> Iterator[str]:
4368
"""
4469
Returns an iterator over the names of the bugs registered with

bugzoo/mgr/bug.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ def __init__(self,
2121
self.__installation = installation
2222
self.__bugs = {}
2323

24+
def __contains__(self, name: str) -> bool:
25+
"""
26+
Determines whether a bug is registered under a given name.
27+
"""
28+
return name in self.__bugs
29+
2430
def __getitem__(self, name: str) -> Bug:
2531
"""
2632
Attempts to fetch the description of a named bug.
@@ -50,11 +56,17 @@ def register(self, bug: Bug) -> None:
5056

5157
add = register
5258

59+
def __delitem__(self, name: str) -> None:
60+
"""
61+
Attempts to deregister a bug with a given name.
62+
"""
63+
del self.__bugs[name]
64+
5365
def deregister(self, bug: Bug) -> None:
5466
"""
5567
Attempts to deregister a given bug from this manager.
5668
"""
57-
del self.__bugs[bug.name]
69+
del self[bug.name]
5870

5971
remove = deregister
6072

bugzoo/server/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,18 @@ def docker_images(name: str):
580580
return UnexpectedServerError.from_exception(ex), 500
581581

582582

583+
@app.route('/bugs/<uid>', methods=['DELETE'])
584+
@throws_errors
585+
def deregister_bug(uid: str):
586+
try:
587+
del daemon.bugs[uid]
588+
return '', 204
589+
except KeyError:
590+
return BugNotFound(uid), 404
591+
except Exception as ex:
592+
return UnexpectedServerError.from_exception(ex), 500
593+
594+
583595
def run(*,
584596
port: int = 6060,
585597
host: str = '0.0.0.0',

bugzoo/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '2.1.23'
1+
__version__ = '2.1.24'

0 commit comments

Comments
 (0)