__filename__ = "httpcodes.py" __author__ = "Bob Mottram" __license__ = "AGPL3+" __version__ = "1.5.0" __maintainer__ = "Bob Mottram" __email__ = "bob@libreserver.org" __status__ = "Production" __module_group__ = "Core" import time def write2(self, msg) -> bool: tries = 0 while tries < 5: try: self.wfile.write(msg) return True except BrokenPipeError as ex: if self.server.debug: print('EX: _write error ' + str(tries) + ' ' + str(ex)) break except BaseException as ex: print('EX: _write error ' + str(tries) + ' ' + str(ex)) time.sleep(0.5) tries += 1 return False def _http_return_code(self, http_code: int, http_description: str, long_description: str, etag: str) -> None: msg = \ '' + str(http_code) + '' + \ '' + \ '
' + str(http_code) + '
' + \ '

' + str(http_description) + \ '

' + \ '
' + \ str(long_description) + '
' msg = msg.encode('utf-8') self.send_response(http_code) self.send_header('Content-Type', 'text/html; charset=utf-8') msg_len_str = str(len(msg)) self.send_header('Content-Length', msg_len_str) if etag: self.send_header('ETag', etag) self.end_headers() if not write2(self, msg): print('Error when showing ' + str(http_code)) def http_200(self) -> None: if self.server.translate: ok_str = self.server.translate['This is nothing ' + 'less than an utter triumph'] _http_return_code(self, 200, self.server.translate['Ok'], ok_str, None) else: _http_return_code(self, 200, 'Ok', 'This is nothing less ' + 'than an utter triumph', None) def http_401(self, post_msg: str) -> None: if self.server.translate: if self.server.translate.get(post_msg): ok_str = self.server.translate[post_msg] else: ok_str = post_msg _http_return_code(self, 401, self.server.translate['Unauthorized'], ok_str, None) else: _http_return_code(self, 401, 'Unauthorized', post_msg, None) def http_402(self) -> None: if self.server.translate: text = self.server.translate["It's time to splash that cash"] _http_return_code(self, 402, self.server.translate['Payment required'], text, None) else: text = "It's time to splash that cash" _http_return_code(self, 402, 'Payment required', text, None) def http_201(self, etag: str) -> None: if self.server.translate: done_str = self.server.translate['It is done'] _http_return_code(self, 201, self.server.translate['Created'], done_str, etag) else: _http_return_code(self, 201, 'Created', 'It is done', etag) def http_207(self) -> None: if self.server.translate: multi_str = self.server.translate['Lots of things'] _http_return_code(self, 207, self.server.translate['Multi Status'], multi_str, None) else: _http_return_code(self, 207, 'Multi Status', 'Lots of things', None) def http_403(self) -> None: if self.server.translate: _http_return_code(self, 403, self.server.translate['Forbidden'], self.server.translate["You're not allowed"], None) else: _http_return_code(self, 403, 'Forbidden', "You're not allowed", None) def http_404(self, ref: int) -> None: if self.server.translate: text = \ self.server.translate['These are not the ' + 'droids you are ' + 'looking for'] + \ ' ' + str(ref) _http_return_code(self, 404, self.server.translate['Not Found'], text, None) else: text = \ 'These are not the droids you are looking for ' + str(ref) _http_return_code(self, 404, 'Not Found', text, None) def http_304(self) -> None: if self.server.translate: _http_return_code(self, 304, self.server.translate['Not changed'], self.server.translate['The contents of ' + 'your local cache ' + 'are up to date'], None) else: _http_return_code(self, 304, 'Not changed', 'The contents of ' + 'your local cache ' + 'are up to date', None) def http_400(self) -> None: if self.server.translate: _http_return_code(self, 400, self.server.translate['Bad Request'], self.server.translate['Better luck ' + 'next time'], None) else: _http_return_code(self, 400, 'Bad Request', 'Better luck next time', None) def http_503(self) -> None: if self.server.translate: busy_str = \ self.server.translate['The server is busy. ' + 'Please try again later'] _http_return_code(self, 503, self.server.translate['Unavailable'], busy_str, None) else: _http_return_code(self, 503, 'Unavailable', 'The server is busy. Please try again ' + 'later', None)