52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
"""
|
|
Stub implementation of programs service for acceptance tests
|
|
"""
|
|
import re
|
|
import urlparse
|
|
|
|
from .http import StubHttpRequestHandler, StubHttpService
|
|
|
|
|
|
class StubProgramsServiceHandler(StubHttpRequestHandler): # pylint: disable=missing-docstring
|
|
|
|
def do_GET(self): # pylint: disable=invalid-name, missing-docstring
|
|
pattern_handlers = {
|
|
r'/api/v1/programs/$': self.get_programs_list,
|
|
r'/api/v1/programs/(\d+)/$': self.get_program_details,
|
|
}
|
|
|
|
if self.match_pattern(pattern_handlers):
|
|
return
|
|
|
|
self.send_response(404, content="404 Not Found")
|
|
|
|
def match_pattern(self, pattern_handlers):
|
|
"""
|
|
Find the correct handler method given the path info from the HTTP request.
|
|
"""
|
|
path = urlparse.urlparse(self.path).path
|
|
for pattern in pattern_handlers:
|
|
match = re.match(pattern, path)
|
|
if match:
|
|
pattern_handlers[pattern](*match.groups())
|
|
return True
|
|
return None
|
|
|
|
def get_programs_list(self):
|
|
"""
|
|
Stubs the programs list endpoint.
|
|
"""
|
|
programs = self.server.config.get('programs', [])
|
|
self.send_json_response(programs)
|
|
|
|
def get_program_details(self, program_id):
|
|
"""
|
|
Stubs a program details endpoint.
|
|
"""
|
|
program = self.server.config.get('programs.{}'.format(program_id), [])
|
|
self.send_json_response(program)
|
|
|
|
|
|
class StubProgramsService(StubHttpService): # pylint: disable=missing-docstring
|
|
HANDLER_CLASS = StubProgramsServiceHandler
|