38
38
then uploads it to the W3C validator.
39
39
"""
40
40
41
- import urllib
42
- import urllib2
43
- import mimetools , mimetypes
41
+ import urllib .request , urllib .parse , urllib .error
42
+ import urllib .request , urllib .error , urllib .parse
43
+ #import mimetools
44
+ import mimetypes
44
45
import os , stat
46
+ import string
47
+ import random
45
48
46
49
class Callable :
47
50
def __init__ (self , anycallable ):
@@ -51,40 +54,43 @@ def __init__(self, anycallable):
51
54
# assigning a sequence.
52
55
doseq = 1
53
56
54
- class MultipartPostHandler (urllib2 .BaseHandler ):
55
- handler_order = urllib2 .HTTPHandler .handler_order - 10 # needs to run first
57
+ class MultipartPostHandler (urllib . request .BaseHandler ):
58
+ handler_order = urllib . request .HTTPHandler .handler_order - 10 # needs to run first
56
59
57
60
def http_request (self , request ):
58
61
data = request .get_data ()
59
62
if data is not None and type (data ) != str :
60
63
v_files = []
61
64
v_vars = []
62
65
try :
63
- for (key , value ) in data .items ():
66
+ for (key , value ) in list ( data .items () ):
64
67
if type (value ) == file :
65
68
v_files .append ((key , value ))
66
69
else :
67
70
v_vars .append ((key , value ))
68
71
except TypeError :
69
72
systype , value , traceback = sys .exc_info ()
70
- raise TypeError , "not a valid non-string sequence or mapping object" , traceback
73
+ raise TypeError ( "not a valid non-string sequence or mapping object" ). with_traceback ( traceback )
71
74
72
75
if len (v_files ) == 0 :
73
- data = urllib .urlencode (v_vars , doseq )
76
+ data = urllib .parse . urlencode (v_vars , doseq )
74
77
else :
75
78
boundary , data = self .multipart_encode (v_vars , v_files )
76
79
contenttype = 'multipart/form-data; boundary=%s' % boundary
77
80
if (request .has_header ('Content-Type' )
78
81
and request .get_header ('Content-Type' ).find ('multipart/form-data' ) != 0 ):
79
- print "Replacing %s with %s" % (request .get_header ('content-type' ), 'multipart/form-data' )
82
+ print ( "Replacing %s with %s" % (request .get_header ('content-type' ), 'multipart/form-data' ) )
80
83
request .add_unredirected_header ('Content-Type' , contenttype )
81
84
82
85
request .add_data (data )
83
86
return request
84
87
88
+ def id_generator (size = 10 , chars = string .ascii_uppercase + string .digits ):
89
+ return '' .join (random .choice (chars ) for _ in range (size ))
90
+
85
91
def multipart_encode (vars , files , boundary = None , buffer = None ):
86
92
if boundary is None :
87
- boundary = mimetools . choose_boundary ()
93
+ boundary = id_generator ()
88
94
if buffer is None :
89
95
buffer = ''
90
96
for (key , value ) in vars :
@@ -103,23 +109,23 @@ def multipart_encode(vars, files, boundary = None, buffer = None):
103
109
buffer += '\r \n ' + fd .read () + '\r \n '
104
110
buffer += '--%s--\r \n \r \n ' % boundary
105
111
return boundary , buffer
106
-
8000
multipart_encode = Callable (multipart_encode )
107
112
113
+ multipart_encode = Callable (multipart_encode )
108
114
https_request = http_request
109
115
110
116
def main ():
111
117
import tempfile , sys
112
118
113
119
validatorURL = "http://validator.w3.org/check"
114
- opener = urllib2 .build_opener (MultipartPostHandler )
120
+ opener = urllib . request .build_opener (MultipartPostHandler )
115
121
116
122
def validateFile (url ):
117
123
temp = tempfile .mkstemp (suffix = ".html" )
118
124
os .write (temp [0 ], opener .open (url ).read ())
119
125
params = { "ss" : "0" , # show source
120
126
"doctype" : "Inline" ,
121
127
"uploaded_file" : open (temp [1 ], "rb" ) }
122
- print opener .open (validatorURL , params ).read ()
128
+ print ( opener .open (validatorURL , params ).read () )
123
129
os .remove (temp [1 ])
124
130
125
131
if len (sys .argv [1 :]) > 0 :
0 commit comments