54 lines
1.4 KiB
Python
Executable File
54 lines
1.4 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright(c) 2022 Meta
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
"""Format HTTP Status codes for use in a C header
|
|
|
|
This script extracts HTTP status codes from mozilla.org
|
|
and formats them to fit inside of a C enum along with
|
|
comments.
|
|
|
|
The output may appear somewhat redundant but it strives
|
|
to
|
|
a) be human readable
|
|
b) eliminate the need to look up status manually,
|
|
c) be machine parseable for table generation
|
|
|
|
The output is sorted for convenience.
|
|
|
|
Usage:
|
|
./scripts/net/enumerate_http_status.py
|
|
HTTP_100_CONTINUE = 100, /**< Continue */
|
|
...
|
|
HTTP_418_IM_A_TEAPOT = 418, /**< I'm a teapot */
|
|
...
|
|
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511, /**< Network Authentication Required */
|
|
"""
|
|
|
|
from lxml import html
|
|
import requests
|
|
import re
|
|
|
|
page = requests.get('https://developer.mozilla.org/en-US/docs/Web/HTTP/Status')
|
|
tree = html.fromstring(page.content)
|
|
|
|
codes = tree.xpath('//code/text()')
|
|
|
|
codes2 = {}
|
|
for c in codes:
|
|
if re.match('[0-9][0-9][0-9] [a-zA-Z].*', c):
|
|
key = int(c[0:3])
|
|
val = c[4:]
|
|
codes2[key] = val
|
|
|
|
keys = sorted(codes2.keys())
|
|
for key in keys:
|
|
val = codes2[key]
|
|
enum_head = 'HTTP'
|
|
enum_body = f'{key}'
|
|
enum_tail = val.upper().replace(' ', '_').replace("'", '').replace('-', '_')
|
|
enum_label = '_'.join([enum_head, enum_body, enum_tail])
|
|
comment = f'/**< {val} */'
|
|
|
|
print(f'{enum_label} = {key}, {comment}')
|