~launchpad-pqm/launchpad/devel

« back to all changes in this revision

Viewing changes to lib/canonical/librarian/libraryprotocol.py

  • Committer: Stuart Bishop
  • Date: 2011-09-28 12:49:24 UTC
  • mfrom: (9893.10.1 trivial)
  • mto: This revision was merged to the branch mainline in revision 14178.
  • Revision ID: stuart.bishop@canonical.com-20110928124924-m5a22fymqghw6c5i
Merged trivial into distinct-db-users.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2009 Canonical Ltd.  This software is licensed under the
 
1
# Copyright 2009-2011 Canonical Ltd.  This software is licensed under the
2
2
# GNU Affero General Public License version 3 (see the file LICENSE).
3
3
 
4
4
__metaclass__ = type
5
5
 
6
6
from datetime import datetime
 
7
 
7
8
from pytz import utc
8
 
import sys
9
 
 
10
9
from twisted.internet import protocol
11
10
from twisted.internet.threads import deferToThread
12
11
from twisted.protocols import basic
40
39
 
41
40
    Recognised headers are:
42
41
      :Content-Type: a mime-type to associate with the file
43
 
      :File-Content-ID: if specified, the integer file id for this file.  If not
44
 
        specified, the server will generate one.
45
 
      :File-Alias-ID: if specified, the integer file alias id for this file.  If
46
 
        not specified, the server will generate one.
 
42
      :File-Content-ID: if specified, the integer file id for this file.
 
43
        If not specified, the server will generate one.
 
44
      :File-Alias-ID: if specified, the integer file alias id for this file.
 
45
        If not specified, the server will generate one.
47
46
      :File-Expires: if specified, the expiry time of this alias in ISO 8601
48
47
        format. As per LibrarianGarbageCollection.
49
48
      :Database-Name: if specified, the name of the database the client is
55
54
 
56
55
    Unrecognised headers will be ignored.
57
56
 
58
 
    If something goes wrong, the server will reply with a 400 (bad request, i.e.
59
 
    client error) or 500 (internal server error) response codes instead, and an
60
 
    appropriate message.
 
57
    If something goes wrong, the server will reply with a 400 (bad request,
 
58
    i.e.  client error) or 500 (internal server error) response codes instead,
 
59
    and an appropriate message.
61
60
 
62
61
    Once the server has replied, the client may re-use the connection as if it
63
62
    were just established to start a new upload.
209
208
        self.newFile.append(realdata)
210
209
 
211
210
        if self.bytesLeft == 0:
212
 
            # Store file
 
211
            # Store file.
213
212
            deferred = self._storeFile()
 
213
 
214
214
            def _sendID((fileID, aliasID)):
215
 
                # Send ID to client
 
215
                # Send ID to client.
216
216
                if self.newFile.contentID is None:
217
 
                    # Respond with deprecated server-generated IDs
 
217
                    # Respond with deprecated server-generated IDs.
218
218
                    self.sendLine('200 %s/%s' % (fileID, aliasID))
219
219
                else:
220
220
                    self.sendLine('200')
224
224
            deferred.addErrback(self.protocolErrors)
225
225
            deferred.addErrback(self.unknownError)
226
226
 
227
 
            # Treat remaining bytes (if any) as a new command
 
227
            # Treat remaining bytes (if any) as a new command.
228
228
            self.state = 'command'
229
229
            self.setLineMode(rest)
230
230
 
240
240
 
241
241
class FileUploadFactory(protocol.Factory):
242
242
    protocol = FileUploadProtocol
 
243
 
243
244
    def __init__(self, fileLibrary):
244
245
        self.fileLibrary = fileLibrary