Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/boto/cloudfront/invalidation.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
comparison
equal
deleted
inserted
replaced
4:79f47841a781 | 5:9b1c78e6ba9c |
---|---|
1 # Copyright (c) 2006-2010 Chris Moyer http://coredumped.org/ | |
2 # | |
3 # Permission is hereby granted, free of charge, to any person obtaining a | |
4 # copy of this software and associated documentation files (the | |
5 # "Software"), to deal in the Software without restriction, including | |
6 # without limitation the rights to use, copy, modify, merge, publish, dis- | |
7 # tribute, sublicense, and/or sell copies of the Software, and to permit | |
8 # persons to whom the Software is furnished to do so, subject to the fol- | |
9 # lowing conditions: | |
10 # | |
11 # The above copyright notice and this permission notice shall be included | |
12 # in all copies or substantial portions of the Software. | |
13 # | |
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | |
15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- | |
16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT | |
17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS | |
20 # IN THE SOFTWARE. | |
21 | |
22 import uuid | |
23 | |
24 from boto.compat import urllib | |
25 from boto.resultset import ResultSet | |
26 | |
27 | |
28 class InvalidationBatch(object): | |
29 """A simple invalidation request. | |
30 :see: http://docs.amazonwebservices.com/AmazonCloudFront/2010-08-01/APIReference/index.html?InvalidationBatchDatatype.html | |
31 """ | |
32 | |
33 def __init__(self, paths=None, connection=None, distribution=None, caller_reference=''): | |
34 """Create a new invalidation request: | |
35 :paths: An array of paths to invalidate | |
36 """ | |
37 self.paths = paths or [] | |
38 self.distribution = distribution | |
39 self.caller_reference = caller_reference | |
40 if not self.caller_reference: | |
41 self.caller_reference = str(uuid.uuid4()) | |
42 | |
43 # If we passed in a distribution, | |
44 # then we use that as the connection object | |
45 if distribution: | |
46 self.connection = distribution | |
47 else: | |
48 self.connection = connection | |
49 | |
50 def __repr__(self): | |
51 return '<InvalidationBatch: %s>' % self.id | |
52 | |
53 def add(self, path): | |
54 """Add another path to this invalidation request""" | |
55 return self.paths.append(path) | |
56 | |
57 def remove(self, path): | |
58 """Remove a path from this invalidation request""" | |
59 return self.paths.remove(path) | |
60 | |
61 def __iter__(self): | |
62 return iter(self.paths) | |
63 | |
64 def __getitem__(self, i): | |
65 return self.paths[i] | |
66 | |
67 def __setitem__(self, k, v): | |
68 self.paths[k] = v | |
69 | |
70 def escape(self, p): | |
71 """Escape a path, make sure it begins with a slash and contains no invalid characters. Retain literal wildcard characters.""" | |
72 if not p[0] == "/": | |
73 p = "/%s" % p | |
74 return urllib.parse.quote(p, safe = "/*") | |
75 | |
76 def to_xml(self): | |
77 """Get this batch as XML""" | |
78 assert self.connection is not None | |
79 s = '<?xml version="1.0" encoding="UTF-8"?>\n' | |
80 s += '<InvalidationBatch xmlns="http://cloudfront.amazonaws.com/doc/%s/">\n' % self.connection.Version | |
81 for p in self.paths: | |
82 s += ' <Path>%s</Path>\n' % self.escape(p) | |
83 s += ' <CallerReference>%s</CallerReference>\n' % self.caller_reference | |
84 s += '</InvalidationBatch>\n' | |
85 return s | |
86 | |
87 def startElement(self, name, attrs, connection): | |
88 if name == "InvalidationBatch": | |
89 self.paths = [] | |
90 return None | |
91 | |
92 def endElement(self, name, value, connection): | |
93 if name == 'Path': | |
94 self.paths.append(value) | |
95 elif name == "Status": | |
96 self.status = value | |
97 elif name == "Id": | |
98 self.id = value | |
99 elif name == "CreateTime": | |
100 self.create_time = value | |
101 elif name == "CallerReference": | |
102 self.caller_reference = value | |
103 return None | |
104 | |
105 | |
106 class InvalidationListResultSet(object): | |
107 """ | |
108 A resultset for listing invalidations on a given CloudFront distribution. | |
109 Implements the iterator interface and transparently handles paging results | |
110 from CF so even if you have many thousands of invalidations on the | |
111 distribution you can iterate over all invalidations in a reasonably | |
112 efficient manner. | |
113 """ | |
114 def __init__(self, markers=None, connection=None, distribution_id=None, | |
115 invalidations=None, marker='', next_marker=None, | |
116 max_items=None, is_truncated=False): | |
117 self.markers = markers or [] | |
118 self.connection = connection | |
119 self.distribution_id = distribution_id | |
120 self.marker = marker | |
121 self.next_marker = next_marker | |
122 self.max_items = max_items | |
123 self.auto_paginate = max_items is None | |
124 self.is_truncated = is_truncated | |
125 self._inval_cache = invalidations or [] | |
126 | |
127 def __iter__(self): | |
128 """ | |
129 A generator function for listing invalidation requests for a given | |
130 CloudFront distribution. | |
131 """ | |
132 conn = self.connection | |
133 distribution_id = self.distribution_id | |
134 result_set = self | |
135 for inval in result_set._inval_cache: | |
136 yield inval | |
137 if not self.auto_paginate: | |
138 return | |
139 while result_set.is_truncated: | |
140 result_set = conn.get_invalidation_requests(distribution_id, | |
141 marker=result_set.next_marker, | |
142 max_items=result_set.max_items) | |
143 for i in result_set._inval_cache: | |
144 yield i | |
145 | |
146 def startElement(self, name, attrs, connection): | |
147 for root_elem, handler in self.markers: | |
148 if name == root_elem: | |
149 obj = handler(connection, distribution_id=self.distribution_id) | |
150 self._inval_cache.append(obj) | |
151 return obj | |
152 | |
153 def endElement(self, name, value, connection): | |
154 if name == 'IsTruncated': | |
155 self.is_truncated = self.to_boolean(value) | |
156 elif name == 'Marker': | |
157 self.marker = value | |
158 elif name == 'NextMarker': | |
159 self.next_marker = value | |
160 elif name == 'MaxItems': | |
161 self.max_items = int(value) | |
162 | |
163 def to_boolean(self, value, true_value='true'): | |
164 if value == true_value: | |
165 return True | |
166 else: | |
167 return False | |
168 | |
169 class InvalidationSummary(object): | |
170 """ | |
171 Represents InvalidationSummary complex type in CloudFront API that lists | |
172 the id and status of a given invalidation request. | |
173 """ | |
174 def __init__(self, connection=None, distribution_id=None, id='', | |
175 status=''): | |
176 self.connection = connection | |
177 self.distribution_id = distribution_id | |
178 self.id = id | |
179 self.status = status | |
180 | |
181 def __repr__(self): | |
182 return '<InvalidationSummary: %s>' % self.id | |
183 | |
184 def startElement(self, name, attrs, connection): | |
185 pass | |
186 | |
187 def endElement(self, name, value, connection): | |
188 if name == 'Id': | |
189 self.id = value | |
190 elif name == 'Status': | |
191 self.status = value | |
192 | |
193 def get_distribution(self): | |
194 """ | |
195 Returns a Distribution object representing the parent CloudFront | |
196 distribution of the invalidation request listed in the | |
197 InvalidationSummary. | |
198 | |
199 :rtype: :class:`boto.cloudfront.distribution.Distribution` | |
200 :returns: A Distribution object representing the parent CloudFront | |
201 distribution of the invalidation request listed in the | |
202 InvalidationSummary | |
203 """ | |
204 return self.connection.get_distribution_info(self.distribution_id) | |
205 | |
206 def get_invalidation_request(self): | |
207 """ | |
208 Returns an InvalidationBatch object representing the invalidation | |
209 request referred to in the InvalidationSummary. | |
210 | |
211 :rtype: :class:`boto.cloudfront.invalidation.InvalidationBatch` | |
212 :returns: An InvalidationBatch object representing the invalidation | |
213 request referred to by the InvalidationSummary | |
214 """ | |
215 return self.connection.invalidation_request_status( | |
216 self.distribution_id, self.id) |