1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import gzipstream
20
21 from rhn import rpclib
22 from spacewalk.satellite_tools import constants
23
24 __version__ = "0.1"
25
26
28 user_agent = "satellite-sync/%s" % __version__
29
36
38
39 content_type = self.headers_in.get('Content-Type', 'text/xml')
40 content_encoding = self.headers_in.get('Content-Encoding')
41
42 if content_encoding == 'gzip':
43
44
45
46 fd = CompressedStream(fd)
47
48 if content_type == 'text/xml':
49
50
51 try:
52 ret = self.parse_response(fd)
53 except:
54 fd.close()
55 connection.close()
56 raise
57 fd.close()
58 connection.close()
59 return ret
60
61
62 if content_type in ('application/xml', 'application/octet-stream',
63 'application/x-rpm'):
64 f = rpclib.transports.File(fd)
65
66
67
68
69
70 f.close = connection.close
71 return f
72
73 connection.close()
74 raise Exception("Unknown response type: " + content_type)
75
76
79
80
83
84
87
88
97
98
107
108
110
111 """ class rpclib.GETServer with overriden default transports classes """
112 _transport_class = Transport
113 _transport_class_https = SafeTransport
114 _transport_class_proxy = ProxyTransport
115 _transport_class_https_proxy = SafeProxyTransport
116
117 - def __init__(self, uri, transport=None, proxy=None, username=None,
118 password=None, client_version=2, headers=None, refreshCallback=None,
119 progressCallback=None, xml_dump_version=constants.PROTOCOL_VERSION,
120 timeout=None):
121 if headers is None:
122 headers = {}
123 rpclib.GETServer.__init__(self, uri,
124 transport=transport,
125 proxy=proxy,
126 username=username,
127 password=password,
128 client_version=client_version,
129 headers=headers,
130 refreshCallback=refreshCallback,
131 timeout=timeout)
132 self.add_header("X-RHN-Satellite-XML-Dump-Version", xml_dump_version)
133
136
137
139
140 """
141 GzipStream will not close the connection by itself, so we have to keep the
142 underlying stream around
143 """
144
148 self._real_stream = stream
149
150 self._real_stream.flush = noop
151 self.stream = self._real_stream
152 if not isinstance(self._real_stream, gzipstream.GzipStream):
153 self.stream = gzipstream.GzipStream(stream=self._real_stream, mode="r")
154
156 if self.stream:
157 self.stream.close()
158 self.stream = None
159 if self._real_stream:
160 self._real_stream.close()
161 self._real_stream = None
162
164 return getattr(self.stream, name)
165
167 return "<_CompressedStream at %s>" % id(self)
168
169 if __name__ == '__main__':
170 pass
171