httpcode-0.6/0000755000076500000240000000000013070464725014003 5ustar rspivakstaff00000000000000httpcode-0.6/CHANGES.rst0000644000076500000240000000127313070454716015607 0ustar rspivakstaff00000000000000Change History ============== 0.6 (2017-04-03) ---------------- - Use argparse instead of optparse - Declare as Python 2.7+ and Python 3 compatible 0.5 (2011-12-30) ---------------- - Colorize HTTP codes 0.4 (2011-12-27) ---------------- - regex and 'x' can be used as part of an HTTP code https://github.com/rspivak/httpcode/pull/6 0.3 (2011-12-22) ---------------- - Add -s/--search option to search for code by description https://github.com/rspivak/httpcode/pull/3 0.2 (2011-12-21) ---------------- - Add HTTP code 418 (I'm a teapot): https://github.com/rspivak/httpcode/pull/2 - Bugfix: https://github.com/rspivak/httpcode/issues/1 0.1 (2011-12-21) ---------------- - Initial release httpcode-0.6/MANIFEST.in0000644000076500000240000000003613070453652015535 0ustar rspivakstaff00000000000000include README.rst CHANGES.rsthttpcode-0.6/PKG-INFO0000644000076500000240000001211313070464725015076 0ustar rspivakstaff00000000000000Metadata-Version: 1.1 Name: httpcode Version: 0.6 Summary: httpcode - explain HTTP status code Home-page: http://github.com/rspivak/httpcode Author: Ruslan Spivak Author-email: ruslan.spivak@gmail.com License: MIT Description: :: _ _ _____ _____ ____ ____ ___ ____ _____ | | | |_ _|_ _| _ \ / ___/ _ \| _ \| ____| | |_| | | | | | | |_) | | | | | | | | | _| | _ | | | | | | __/| |__| |_| | |_| | |___ |_| |_| |_| |_| |_| \____\___/|____/|_____| `httpcode` is a little utility that explains the meaning of an HTTP status code on the command line. `http://httpcode.readthedocs.org `_ Installation ------------ :: $ [sudo] pip install httpcode There is also an official DEB package available at `http://packages.debian.org/sid/httpcode `_ Usage ----- Explain 405 status code :: $ hc 405 Status code 405 Message: Method Not Allowed Code explanation: Specified method is invalid for this resource. Or 418 status code :) :: $ hc 418 Status code 418 Message: I'm a teapot Code explanation: The HTCPCP server is a teapot List all codes :: $ hc Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Status code 200 Message: OK Code explanation: Request fulfilled, document follows ... Search code(s) by description (case-insensitive) :: $ hc -s too Status code 413 Message: Request Entity Too Large Code explanation: Entity is too large. Status code 414 Message: Request-URI Too Long Code explanation: URI is too long. Filter codes with a regex :: $ hc 30[12] Status code 301 Message: Moved Permanently Code explanation: Object moved permanently -- see URI list Status code 302 Message: Found Code explanation: Object moved temporarily -- see URI list Use an 'x' for any digit :: $ hc 1xx Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Show help :: $ hc -h Usage: hc [code] [options] code may contain regular expression or use 'x' to denote any digit code examples: 418, 30[12], 3.*, 1xx Without parameters lists all available HTTP status codes and their description Options: -h, --help show this help message and exit -s SEARCH, --search=SEARCH Search for a code by name or description. Search text may contain regular expressions. Roadmap ------- Add more codes Change History ============== 0.6 (2017-04-03) ---------------- - Use argparse instead of optparse - Declare as Python 2.7+ and Python 3 compatible 0.5 (2011-12-30) ---------------- - Colorize HTTP codes 0.4 (2011-12-27) ---------------- - regex and 'x' can be used as part of an HTTP code https://github.com/rspivak/httpcode/pull/6 0.3 (2011-12-22) ---------------- - Add -s/--search option to search for code by description https://github.com/rspivak/httpcode/pull/3 0.2 (2011-12-21) ---------------- - Add HTTP code 418 (I'm a teapot): https://github.com/rspivak/httpcode/pull/2 - Bugfix: https://github.com/rspivak/httpcode/issues/1 0.1 (2011-12-21) ---------------- - Initial release Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Internet :: WWW/HTTP Classifier: Operating System :: Unix httpcode-0.6/README.rst0000644000076500000240000000513513070453652015473 0ustar rspivakstaff00000000000000:: _ _ _____ _____ ____ ____ ___ ____ _____ | | | |_ _|_ _| _ \ / ___/ _ \| _ \| ____| | |_| | | | | | | |_) | | | | | | | | | _| | _ | | | | | | __/| |__| |_| | |_| | |___ |_| |_| |_| |_| |_| \____\___/|____/|_____| `httpcode` is a little utility that explains the meaning of an HTTP status code on the command line. `http://httpcode.readthedocs.org `_ Installation ------------ :: $ [sudo] pip install httpcode There is also an official DEB package available at `http://packages.debian.org/sid/httpcode `_ Usage ----- Explain 405 status code :: $ hc 405 Status code 405 Message: Method Not Allowed Code explanation: Specified method is invalid for this resource. Or 418 status code :) :: $ hc 418 Status code 418 Message: I'm a teapot Code explanation: The HTCPCP server is a teapot List all codes :: $ hc Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Status code 200 Message: OK Code explanation: Request fulfilled, document follows ... Search code(s) by description (case-insensitive) :: $ hc -s too Status code 413 Message: Request Entity Too Large Code explanation: Entity is too large. Status code 414 Message: Request-URI Too Long Code explanation: URI is too long. Filter codes with a regex :: $ hc 30[12] Status code 301 Message: Moved Permanently Code explanation: Object moved permanently -- see URI list Status code 302 Message: Found Code explanation: Object moved temporarily -- see URI list Use an 'x' for any digit :: $ hc 1xx Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Show help :: $ hc -h Usage: hc [code] [options] code may contain regular expression or use 'x' to denote any digit code examples: 418, 30[12], 3.*, 1xx Without parameters lists all available HTTP status codes and their description Options: -h, --help show this help message and exit -s SEARCH, --search=SEARCH Search for a code by name or description. Search text may contain regular expressions. Roadmap ------- Add more codes httpcode-0.6/setup.cfg0000644000076500000240000000004613070464725015624 0ustar rspivakstaff00000000000000[egg_info] tag_build = tag_date = 0 httpcode-0.6/setup.py0000644000076500000240000000176313070454705015521 0ustar rspivakstaff00000000000000import os from setuptools import setup, find_packages classifiers = """\ Intended Audience :: Developers License :: OSI Approved :: MIT License Programming Language :: Python Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 Topic :: Internet :: WWW/HTTP Operating System :: Unix """ def read(*rel_names): return open(os.path.join(os.path.dirname(__file__), *rel_names)).read() setup( name='httpcode', version='0.6', url='http://github.com/rspivak/httpcode', license='MIT', description='httpcode - explain HTTP status code', author='Ruslan Spivak', author_email='ruslan.spivak@gmail.com', packages=find_packages('src'), package_dir={'': 'src'}, install_requires=['colorama'], zip_safe=False, entry_points="""\ [console_scripts] hc = httpcode:main """, classifiers=filter(None, classifiers.split('\n')), long_description=read('README.rst') + '\n\n' + read('CHANGES.rst'), extras_require={'test': []} ) httpcode-0.6/src/0000755000076500000240000000000013070464725014572 5ustar rspivakstaff00000000000000httpcode-0.6/src/httpcode/0000755000076500000240000000000013070464725016404 5ustar rspivakstaff00000000000000httpcode-0.6/src/httpcode/__init__.py0000644000076500000240000002251413070463336020516 0ustar rspivakstaff00000000000000############################################################################### # # Copyright (c) 2011 - 2017 Ruslan Spivak # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. # ############################################################################### __author__ = 'Ruslan Spivak ' import sys import argparse import textwrap import re from colorama import Style, init, deinit # Codes with messages are taken verbatim from BaseHTTPServer.py # Table mapping response codes to messages; entries have the # form {code: (shortmessage, longmessage)}. # See RFC 2616. STATUS_CODES = { 100: ('Continue', 'Request received, please continue'), 101: ('Switching Protocols', 'Switching to new protocol; obey Upgrade header'), 102: ('Processing', 'WebDAV; RFC 2518'), 200: ('OK', 'Request fulfilled, document follows'), 201: ('Created', 'Document created, URL follows'), 202: ('Accepted', 'Request accepted, processing continues off-line'), 203: ('Non-Authoritative Information', 'Request fulfilled from cache'), 204: ('No Content', 'Request fulfilled, nothing follows'), 205: ('Reset Content', 'Clear input form for further input.'), 206: ('Partial Content', 'Partial content follows.'), 207: ('Multi-Status', 'WebDAV; RFC 4918'), 208: ('Already Reported', 'WebDAV; RFC 5842'), 226: ('IM Used', 'RFC 3229'), 300: ('Multiple Choices', 'Object has several resources -- see URI list'), 301: ('Moved Permanently', 'Object moved permanently -- see URI list'), 302: ('Found', 'Object moved temporarily -- see URI list'), 303: ('See Other', 'Object moved -- see Method and URL list'), 304: ('Not Modified', 'Document has not changed since given time'), 305: ('Use Proxy', 'You must use proxy specified in Location to access this ' 'resource.'), 306: ('Switch Proxy', 'Subsequent requests should use the specified proxy'), 307: ('Temporary Redirect', 'Object moved temporarily -- see URI list'), 308: ('Permanent Redirect', 'Object moved permanently'), 400: ('Bad Request', 'Bad request syntax or unsupported method'), 401: ('Unauthorized', 'No permission -- see authorization schemes'), 402: ('Payment Required', 'No payment -- see charging schemes'), 403: ('Forbidden', 'Request forbidden -- authorization will not help'), 404: ('Not Found', 'Nothing matches the given URI'), 405: ('Method Not Allowed', 'Specified method is invalid for this resource.'), 406: ('Not Acceptable', 'URI not available in preferred format.'), 407: ('Proxy Authentication Required', 'You must authenticate with ' 'this proxy before proceeding.'), 408: ('Request Timeout', 'Request timed out; try again later.'), 409: ('Conflict', 'Request conflict.'), 410: ('Gone', 'URI no longer exists and has been permanently removed.'), 411: ('Length Required', 'Client must specify Content-Length.'), 412: ('Precondition Failed', 'Precondition in headers is false.'), 413: ('Payload Too Large', 'Payload is too large.'), 414: ('Request-URI Too Long', 'URI is too long.'), 415: ('Unsupported Media Type', 'Entity body in unsupported format.'), 416: ('Requested Range Not Satisfiable', 'Cannot satisfy request range.'), 417: ('Expectation Failed', 'Expect condition could not be satisfied.'), 418: ("I'm a teapot", 'The HTCPCP server is a teapot'), 419: ('Authentication Timeout', 'previously valid authentication has expired'), 420: ('Method Failure / Enhance Your Calm', 'Spring Framework / Twitter'), 422: ('Unprocessable Entity', 'WebDAV; RFC 4918'), 423: ('Locked', 'WebDAV; RFC 4918'), 424: ('Failed Dependency / Method Failure', 'WebDAV; RFC 4918'), 425: ('Unordered Collection', 'Internet draft'), 426: ('Upgrade Required', 'client should switch to a different protocol'), 428: ('Precondition Required', 'RFC 6585'), 429: ('Too Many Requests', 'RFC 6585'), 431: ('Request Header Fields Too Large', 'RFC 6585'), 440: ('Login Timeout', 'Microsoft'), 444: ('No Response', 'Nginx'), 449: ('Retry With', 'Microsoft'), 450: ('Blocked by Windows Parental Controls', 'Microsoft'), 451: ('Unavailable For Legal Reasons', 'RFC 7725'), 494: ('Request Header Too Large', 'Nginx'), 495: ('Cert Error', 'Nginx'), 496: ('No Cert', 'Nginx'), 497: ('HTTP to HTTPS', 'Nginx'), 498: ('Token expired/invalid', 'Esri'), 499: ('Client Closed Request', 'Nginx'), 500: ('Internal Server Error', 'Server got itself in trouble'), 501: ('Not Implemented', 'Server does not support this operation'), 502: ('Bad Gateway', 'Invalid responses from another server/proxy.'), 503: ('Service Unavailable', 'The server cannot process the request due to a high load'), 504: ('Gateway Timeout', 'The gateway server did not receive a timely response'), 505: ('HTTP Version Not Supported', 'Cannot fulfill request.'), 506: ('Variant Also Negotiates', 'RFC 2295'), 507: ('Insufficient Storage', 'WebDAV; RFC 4918'), 508: ('Loop Detected', 'WebDAV; RFC 5842'), 509: ('Bandwidth Limit Exceeded', 'Apache bw/limited extension'), 510: ('Not Extended', 'RFC 2774'), 511: ('Network Authentication Required', 'RFC 6585'), 598: ('Network read timeout error', 'Unknown'), 599: ('Network connect timeout error', 'Unknown'), } MSG_FMT = """\ Status code {code} Message: {message} Code explanation: {explain} """ _IS_THREE_DIGIT_CODE = re.compile(r'\d{3}$').match def _colorize(text): return Style.BRIGHT + text + Style.RESET_ALL def _exit(msg): sys.stderr.write(msg) # stop colorama deinit() sys.exit(-1) def _print_filtered_codes(code): """Search and print codes based on passed regexp. Examples of codes with regexps: $ hc 30[12] $ hc 3.. Special case, use 'x' for any digit $ hc 1xx """ _has_code_match = re.compile(code.replace('x', '\d') + '$').match found_codes = [c for c in STATUS_CODES if _has_code_match(str(c))] if not found_codes: _exit('No code found corresponding to: %s\n' % code) _print_codes(codes=found_codes) def _print_search(text, noformat=False): """Search for a code by description and print it.""" _is_text_found = re.compile(text, re.IGNORECASE).search found_codes = [ code for code, (short, long) in STATUS_CODES.items() if _is_text_found(short + long) ] if found_codes: _print_codes(codes=found_codes, noformat=noformat) else: _exit('No status code found for search: %s\n' % text) def _print_codes(codes=STATUS_CODES.keys(), noformat=False): for code in sorted(codes): _print_code(code, noformat) def _print_code(code, noformat=False): try: short, long = STATUS_CODES[code] except KeyError as e: _exit('No description found for code: %s\n' % code) else: # colorize code code = str(code) if noformat else _colorize(str(code)) msg = MSG_FMT.format(code=code, message=short, explain=long) sys.stdout.write(msg) def main(): usage = """\ usage: hc [code] [options] Without parameters lists all available HTTP status codes and their description """ parser = argparse.ArgumentParser(usage=textwrap.dedent(usage)) parser.add_argument( 'code', nargs='?', help=("Code may contain regular expression or use 'x' to denote " "any digit. Code examples: 418, 30[12], 3.*, 1xx") ) parser.add_argument( '-s', '--search', dest='search', help=('Search for a code by name or description. ' 'Search text may contain regular expressions.') ) parser.add_argument( '-p', '--plain', action='store_true', dest='noformat', default=False, help=( 'Disable formatting of output') ) args = parser.parse_args() # initialize colorama init() if args.search is not None: _print_search(args.search, noformat=args.noformat) elif args.code: code = args.code if _IS_THREE_DIGIT_CODE(code): _print_code(int(code), args.noformat) else: _print_filtered_codes(code) else: _print_codes(noformat=args.noformat) if __name__ == '__main__': main() httpcode-0.6/src/httpcode.egg-info/0000755000076500000240000000000013070464725020076 5ustar rspivakstaff00000000000000httpcode-0.6/src/httpcode.egg-info/dependency_links.txt0000644000076500000240000000000113070464725024144 0ustar rspivakstaff00000000000000 httpcode-0.6/src/httpcode.egg-info/entry_points.txt0000644000076500000240000000006113070464725023371 0ustar rspivakstaff00000000000000 [console_scripts] hc = httpcode:main httpcode-0.6/src/httpcode.egg-info/not-zip-safe0000644000076500000240000000000113070454752022323 0ustar rspivakstaff00000000000000 httpcode-0.6/src/httpcode.egg-info/PKG-INFO0000644000076500000240000001211313070464725021171 0ustar rspivakstaff00000000000000Metadata-Version: 1.1 Name: httpcode Version: 0.6 Summary: httpcode - explain HTTP status code Home-page: http://github.com/rspivak/httpcode Author: Ruslan Spivak Author-email: ruslan.spivak@gmail.com License: MIT Description: :: _ _ _____ _____ ____ ____ ___ ____ _____ | | | |_ _|_ _| _ \ / ___/ _ \| _ \| ____| | |_| | | | | | | |_) | | | | | | | | | _| | _ | | | | | | __/| |__| |_| | |_| | |___ |_| |_| |_| |_| |_| \____\___/|____/|_____| `httpcode` is a little utility that explains the meaning of an HTTP status code on the command line. `http://httpcode.readthedocs.org `_ Installation ------------ :: $ [sudo] pip install httpcode There is also an official DEB package available at `http://packages.debian.org/sid/httpcode `_ Usage ----- Explain 405 status code :: $ hc 405 Status code 405 Message: Method Not Allowed Code explanation: Specified method is invalid for this resource. Or 418 status code :) :: $ hc 418 Status code 418 Message: I'm a teapot Code explanation: The HTCPCP server is a teapot List all codes :: $ hc Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Status code 200 Message: OK Code explanation: Request fulfilled, document follows ... Search code(s) by description (case-insensitive) :: $ hc -s too Status code 413 Message: Request Entity Too Large Code explanation: Entity is too large. Status code 414 Message: Request-URI Too Long Code explanation: URI is too long. Filter codes with a regex :: $ hc 30[12] Status code 301 Message: Moved Permanently Code explanation: Object moved permanently -- see URI list Status code 302 Message: Found Code explanation: Object moved temporarily -- see URI list Use an 'x' for any digit :: $ hc 1xx Status code 100 Message: Continue Code explanation: Request received, please continue Status code 101 Message: Switching Protocols Code explanation: Switching to new protocol; obey Upgrade header Show help :: $ hc -h Usage: hc [code] [options] code may contain regular expression or use 'x' to denote any digit code examples: 418, 30[12], 3.*, 1xx Without parameters lists all available HTTP status codes and their description Options: -h, --help show this help message and exit -s SEARCH, --search=SEARCH Search for a code by name or description. Search text may contain regular expressions. Roadmap ------- Add more codes Change History ============== 0.6 (2017-04-03) ---------------- - Use argparse instead of optparse - Declare as Python 2.7+ and Python 3 compatible 0.5 (2011-12-30) ---------------- - Colorize HTTP codes 0.4 (2011-12-27) ---------------- - regex and 'x' can be used as part of an HTTP code https://github.com/rspivak/httpcode/pull/6 0.3 (2011-12-22) ---------------- - Add -s/--search option to search for code by description https://github.com/rspivak/httpcode/pull/3 0.2 (2011-12-21) ---------------- - Add HTTP code 418 (I'm a teapot): https://github.com/rspivak/httpcode/pull/2 - Bugfix: https://github.com/rspivak/httpcode/issues/1 0.1 (2011-12-21) ---------------- - Initial release Platform: UNKNOWN Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Internet :: WWW/HTTP Classifier: Operating System :: Unix httpcode-0.6/src/httpcode.egg-info/requires.txt0000644000076500000240000000002113070464725022467 0ustar rspivakstaff00000000000000colorama [test] httpcode-0.6/src/httpcode.egg-info/SOURCES.txt0000644000076500000240000000050113070464725021756 0ustar rspivakstaff00000000000000CHANGES.rst MANIFEST.in README.rst setup.py src/httpcode/__init__.py src/httpcode.egg-info/PKG-INFO src/httpcode.egg-info/SOURCES.txt src/httpcode.egg-info/dependency_links.txt src/httpcode.egg-info/entry_points.txt src/httpcode.egg-info/not-zip-safe src/httpcode.egg-info/requires.txt src/httpcode.egg-info/top_level.txthttpcode-0.6/src/httpcode.egg-info/top_level.txt0000644000076500000240000000001113070464725022620 0ustar rspivakstaff00000000000000httpcode