[LayoutTests] Convert http/tests/blink convert PHP to Python
[WebKit-https.git] / LayoutTests / http / tests / resources / portabilityLayer.py
1 # Copyright (C) 2021 Apple Inc. All rights reserved.
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions
5 # are met:
6 # 1.  Redistributions of source code must retain the above copyright
7 #     notice, this list of conditions and the following disclaimer.
8 # 2.  Redistributions in binary form must reproduce the above copyright
9 #     notice, this list of conditions and the following disclaimer in the
10 #     documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS "AS IS" AND
13 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15 # DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
16 # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
18 # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
19 # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
20 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
21 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22
23 import cgi
24 import os
25 from urllib.parse import parse_qs
26
27 query = parse_qs(os.environ.get('QUERY_STRING', ''), keep_blank_values=True)
28 post_data = {}
29
30
31 def get_cookies():
32     cookies = {}
33     if 'HTTP_COOKIE' in os.environ:
34         header_cookies = os.environ['HTTP_COOKIE']
35         header_cookies = header_cookies.split('; ')
36
37         for cookie in header_cookies:
38             cookie = cookie.split('=')
39             cookies[cookie[0]] = cookie[1]
40
41     return cookies
42
43
44 def get_post_data():
45     request_method = os.environ.get('REQUEST_METHOD', '')
46     if request_method == 'POST':
47         form = cgi.FieldStorage()
48         for key in form.keys():
49             if key not in query.keys():
50                 post_data.update({key: form.getvalue(key)})
51
52     return post_data
53
54
55 def get_request():
56     request = {}
57     for key in query.keys():
58         request.update({key: query[key][0]})
59
60     # request.update(get_post_data())
61     request.update(get_cookies())
62     return request
63
64
65 def get_count(file):
66     if not os.path.isfile(file):
67         with open(file, 'w') as open_file:
68             open_file.write('0')
69             return '0'
70
71     with open(file, 'r') as open_file:
72         return open_file.read()
73
74
75 def get_state(file, default='Uninitialized'):
76     if not os.path.isfile(file):
77         return default
78     with open(file, 'r') as file:
79         return file.read()
80
81
82 def set_state(state, file):
83     with open(file, 'w') as open_file:
84         open_file.write(state)
85     return state
86
87
88 def step_state(file):
89     state = get_count(file)
90     with open(file, 'w') as open_file:
91         open_file.write(f'{int(state) + 1}')
92     return state