~tribaal/txaws/xss-hardening

« back to all changes in this revision

Viewing changes to txaws/s3/model.py

  • Committer: Duncan McGreggor
  • Date: 2009-11-22 02:20:42 UTC
  • mto: (44.3.2 484858-s3-scripts)
  • mto: This revision was merged to the branch mainline in revision 52.
  • Revision ID: duncan@canonical.com-20091122022042-4zi231hxni1z53xd
* Updated the LICENSE file with copyright information.
* Updated the README with license information.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2009 Canonical Ltd
2
 
# Copyright (C) 2009 Duncan McGreggor <oubiwann@adytum.us>
3
 
# Copyright (C) 2011 Drew Smathers <drew.smathers@gmail.com>
4
 
# Copyright (C) 2012 New Dream Network (DreamHost)
5
 
# Licenced under the txaws licence available at /LICENSE in the txaws source.
6
 
from txaws.util import XML
7
 
 
8
 
 
9
 
class Bucket(object):
10
 
    """
11
 
    An Amazon S3 storage bucket.
12
 
    """
13
 
    def __init__(self, name, creation_date):
14
 
        self.name = name
15
 
        self.creation_date = creation_date
16
 
 
17
 
 
18
 
class ItemOwner(object):
19
 
    """
20
 
    The owner of a content item.
21
 
    """
22
 
    def __init__(self, id, display_name):
23
 
        self.id = id
24
 
        self.display_name = display_name
25
 
 
26
 
 
27
 
class BucketItem(object):
28
 
    """
29
 
    The contents of an Amazon S3 bucket.
30
 
    """
31
 
    def __init__(self, key, modification_date, etag, size, storage_class,
32
 
                 owner=None):
33
 
        self.key = key
34
 
        self.modification_date = modification_date
35
 
        self.etag = etag
36
 
        self.size = size
37
 
        self.storage_class = storage_class
38
 
        self.owner = owner
39
 
 
40
 
 
41
 
class BucketListing(object):
42
 
    """
43
 
    A mapping for the data in a bucket listing.
44
 
    """
45
 
    def __init__(self, name, prefix, marker, max_keys, is_truncated,
46
 
                 contents=None, common_prefixes=None):
47
 
        self.name = name
48
 
        self.prefix = prefix
49
 
        self.marker = marker
50
 
        self.max_keys = max_keys
51
 
        self.is_truncated = is_truncated
52
 
        self.contents = contents
53
 
        self.common_prefixes = common_prefixes
54
 
 
55
 
 
56
 
class LifecycleConfiguration(object):
57
 
    """
58
 
    Returns the lifecycle configuration information set on the bucket.
59
 
    """
60
 
    def __init__(self, rules):
61
 
        self.rules = rules
62
 
 
63
 
 
64
 
class LifecycleConfigurationRule(object):
65
 
    """
66
 
    Container for elements that describe a lifecycle rule.
67
 
    """
68
 
    def __init__(self, id, prefix, status, expiration):
69
 
        self.id = id
70
 
        self.prefix = prefix
71
 
        self.status = status
72
 
        self.expiration = expiration
73
 
 
74
 
 
75
 
class WebsiteConfiguration(object):
76
 
    """
77
 
    A mapping for the data in a bucket website configuration.
78
 
    """
79
 
    def __init__(self, index_suffix, error_key=None):
80
 
        self.index_suffix = index_suffix
81
 
        self.error_key = error_key
82
 
 
83
 
 
84
 
class NotificationConfiguration(object):
85
 
    """
86
 
    A mapping for the data in a bucket notification configuration.
87
 
    """
88
 
    def __init__(self, topic=None, event=None):
89
 
        self.topic = topic
90
 
        self.event = event
91
 
 
92
 
 
93
 
class VersioningConfiguration(object):
94
 
    """
95
 
    Container for the bucket versioning configuration.
96
 
 
97
 
    According to Amazon:
98
 
 
99
 
    C{MfaDelete}: This element is only returned if the bucket has been
100
 
    configured with C{MfaDelete}. If the bucket has never been so configured,
101
 
    this element is not returned. The possible values are None, "Disabled" or
102
 
    "Enabled".
103
 
 
104
 
    C{Status}: If the bucket has never been so configured, this element is not
105
 
    returned. The possible values are None, "Suspended" or "Enabled".
106
 
    """
107
 
    def __init__(self, mfa_delete=None, status=None):
108
 
        self.mfa_delete = mfa_delete
109
 
        self.status = status
110
 
 
111
 
 
112
 
class FileChunk(object):
113
 
    """
114
 
    An Amazon S3 file chunk.
115
 
 
116
 
    S3 returns file chunks, 10 MB at a time, until the entire file is returned.
117
 
    These chunks need to be assembled once they are all returned.
118
 
    """
119
 
 
120
 
 
121
 
class RequestPayment(object):
122
 
    """
123
 
    A payment request.
124
 
 
125
 
    @param payer: One of 'Requester' or 'BucketOwner'.
126
 
    """
127
 
 
128
 
    payer_choices = ("Requester", "BucketOwner")
129
 
 
130
 
    def __init__(self, payer):
131
 
        if payer not in self.payer_choices:
132
 
            raise ValueError("Invalid value for payer: `%s`. Must be one of "
133
 
                             "%s." % (payer, ",".join(self.payer_choices)))
134
 
        self.payer = payer
135
 
 
136
 
    def to_xml(self):
137
 
        """
138
 
        Convert this request into a C{RequestPaymentConfiguration} XML
139
 
        document.
140
 
        """
141
 
        return ("<RequestPaymentConfiguration "
142
 
                  'xmlns="http://s3.amazonaws.com/doc/2006-03-01/">\n'
143
 
                "  <Payer>%s</Payer>\n"
144
 
                "</RequestPaymentConfiguration>" % self.payer)
145
 
 
146
 
    @classmethod
147
 
    def from_xml(cls, xml_bytes):
148
 
        """
149
 
        Create an instance from a C{RequestPaymentConfiguration} XML document.
150
 
        """
151
 
        root = XML(xml_bytes)
152
 
        return cls(root.findtext("Payer"))
153
 
 
154
 
 
155
 
class MultipartInitiationResponse(object):
156
 
    """
157
 
    A response to Initiate Multipart Upload
158
 
    """
159
 
 
160
 
    def __init__(self, bucket, object_name, upload_id):
161
 
        """
162
 
        @param bucket: The bucket name
163
 
        @param object_name: The object name
164
 
        @param upload_id: The upload id
165
 
        """
166
 
        self.bucket = bucket
167
 
        self.object_name = object_name
168
 
        self.upload_id = upload_id
169
 
 
170
 
    @classmethod
171
 
    def from_xml(cls, xml_bytes):
172
 
        """
173
 
        Create an instance of this from XML bytes.
174
 
 
175
 
        @param xml_bytes: C{str} bytes of XML to parse
176
 
        @return: an instance of L{MultipartInitiationResponse}
177
 
        """
178
 
        root = XML(xml_bytes)
179
 
        return cls(root.findtext('Bucket'),
180
 
                   root.findtext('Key'),
181
 
                   root.findtext('UploadId'))
182
 
 
183
 
 
184
 
class MultipartCompletionResponse(object):
185
 
    """
186
 
    Represents a response to Complete Multipart Upload
187
 
    """
188
 
 
189
 
    def __init__(self, location, bucket, object_name, etag):
190
 
        """
191
 
        @param location: The URI identifying newly created object
192
 
        @param bucket: The bucket name
193
 
        @param object_name: The object name / key
194
 
        @param etag: The entity tag
195
 
        """
196
 
        self.location = location
197
 
        self.bucket = bucket
198
 
        self.object_name = object_name
199
 
        self.etag = etag
200
 
 
201
 
    @classmethod
202
 
    def from_xml(cls, xml_bytes):
203
 
        """
204
 
        Create an instance of this class from XML bytes.
205
 
 
206
 
        @param xml_bytes: C{str} bytes of XML to parse
207
 
        @return: an instance of L{MultipartCompletionResponse}
208
 
        """
209
 
        root = XML(xml_bytes)
210
 
        return cls(root.findtext('Location'),
211
 
                   root.findtext('Bucket'),
212
 
                   root.findtext('Key'),
213
 
                   root.findtext('ETag'))
214