Skip to content

Instantly share code, notes, and snippets.

@spectras
Created October 12, 2015 19:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spectras/15ead9dbbc019d1cf84c to your computer and use it in GitHub Desktop.
Save spectras/15ead9dbbc019d1cf84c to your computer and use it in GitHub Desktop.
Template function pattern
#!/usr/bin/env python
# See http://stackoverflow.com/questions/32885753/
class BaseRequestProcessor(object):
# Template class.
# The request processor gets some query, parses it into a request, executes it
# then saves the result and writes some logging info.
def get_query(self):
raise NotImplementedError()
def make_request(self, query):
raise NotImplementedError()
def make_api_call(self, request):
raise NotImplementedError()
def process_response(self, response):
raise NotImplementedError()
def populate_database(self, details):
raise NotImplementedError()
def log_status(self, status):
pass
def __call__(self):
try:
query = self.get_query()
request = self.make_request(query)
response = self.make_api_call(request)
details = self.process_response(response)
status = self.populate_database(details)
except Exception:
import traceback
status = 'Error, traceback follows:\n' + traceback.format_exc()
self.log_status(status)
class ConsoleRequest(BaseRequestProcessor):
# Implements handling request directly from the console
def get_query(self):
return input('Your query: ')
def populate_database(self, details):
print(details)
return 'Success, I could populate user\'s brain'
def log_status(self, status):
print(status)
class StringQuery(BaseRequestProcessor):
# Converts request to a list of string / response to a string
def make_request(self, query):
return query.split(' ')
def process_response(self, response):
return 'The result was: {}'.format(response)
class MultiplierProcessor(BaseRequestProcessor):
# Given a list of arguments, multiply them
def make_api_call(self, request):
result = 1
for argument in request:
result *= int(argument)
return result
class MyDemoProcessor(ConsoleRequest, StringQuery, MultiplierProcessor, BaseRequestProcessor):
pass
if __name__ == '__main__':
processor = MyDemoProcessor()
while True:
processor()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment