to the POST or PUT request which starts the operation. The following
operations can then be used to retrieve status:
-GET /operations/$HANDLE?t=status&output=HTML
-GET /operations/$HANDLE?t=status&output=JSON
+GET /operations/$HANDLE?output=HTML (with or without t=status)
+GET /operations/$HANDLE?output=JSON (same)
These two retrieve the current status of the given operation. Each operation
presents a different sort of information, but in general the page retrieved
cancelled. If the operation handle has already expired (see below), this
POST will return a 404, which indicates that the operation is no longer
running (either it was completed or terminated). The response body will be
- the same as a t=status on this operation handle, and the handle will be
- expired immediately afterwards.
+ the same as a GET /operations/$HANDLE on this operation handle, and the
+ handle will be expired immediately afterwards.
The operation handle will eventually expire, to avoid consuming an unbounded
amount of memory. The handle's time-to-live can be reset at any time, by
passing a retain-for= argument (with a count of seconds) to either the
-initial POST that starts the operation, or the subsequent 'GET t=status'
-request which asks about the operation. For example, if a 'GET
-/operations/$HANDLE?t=status&output=JSON&retain-for=600' query is performed,
-the handle will remain active for 600 seconds (10 minutes) after the GET was
+initial POST that starts the operation, or the subsequent GET request which
+asks about the operation. For example, if a 'GET
+/operations/$HANDLE?output=JSON&retain-for=600' query is performed, the
+handle will remain active for 600 seconds (10 minutes) after the GET was
received.
-In addition, if the GET t=status includes a release-after-complete=True
-argument, and the operation has completed, the operation handle will be
-released immediately.
+In addition, if the GET includes a release-after-complete=True argument, and
+the operation has completed, the operation handle will be released
+immediately.
If a retain-for= argument is not used, the default handle lifetimes are:
* handles will remain valid at least until their operation finishes
* uncollected handles for finished operations (i.e. handles for operations
- which have finished but for which the t=status page has not been accessed
- since completion) will remain valid for one hour, or for the total time
- consumed by the operation, whichever is greater.
- * collected handles (i.e. the t=status page has been retrieved at least once
+ which have finished but for which the GET page has not been accessed since
+ completion) will remain valid for one hour, or for the total time consumed
+ by the operation, whichever is greater.
+ * collected handles (i.e. the GET page has been retrieved at least once
since the operation completed) will remain valid for ten minutes.
deep-check operation will continue to run in the background, and the
/operations page should be used to find out when the operation is done.
- The HTML /operations/$HANDLE?t=status page for incomplete operations will
- contain a meta-refresh tag, set to 60 seconds, so that a browser which uses
+ The HTML /operations/$HANDLE page for incomplete operations will contain a
+ meta-refresh tag, set to 60 seconds, so that a browser which uses
deep-check will automatically poll until the operation has completed.
- The JSON page (/options/$HANDLE?t=status&output=JSON) will contain a
+ The JSON page (/options/$HANDLE?output=JSON) will contain a
machine-readable JSON dictionary with the following keys:
finished: a boolean, True if the operation is complete, else False. Some
gives immediate access to every object in the virtual filesystem subtree.
This operation uses the same ophandle= mechanism as deep-check. The
- corresponding /operations/$HANDLE?t=status page has three different forms.
- The default is output=HTML.
+ corresponding /operations/$HANDLE page has three different forms. The
+ default is output=HTML.
If output=text is added to the query args, the results will be a text/plain
list. The first line is special: it is either "finished: yes" or "finished:
take expansion or encoding overhead into account. Later versions of the
code may improve this estimate upwards.
- The t=status output consists of two lines of text:
+ The /operations/$HANDLE status output consists of two lines of text:
finished: yes
size: 1234
self.failUnless(self._sub_uri in manifest)
self.failUnless("<td>sub/baz.txt</td>" in manifest)
d.addCallback(_got_html)
+
+ # both t=status and unadorned GET should be identical
+ d.addCallback(lambda res: self.GET("/operations/125"))
+ d.addCallback(_got_html)
+
d.addCallback(getman, "html")
d.addCallback(_got_html)
d.addCallback(getman, "text")
def test_POST_DIRURL_deepcheck(self):
def _check_redirect(statuscode, target):
self.failUnlessEqual(statuscode, str(http.FOUND))
- self.failUnless(target.endswith("/operations/123?t=status"))
+ self.failUnless(target.endswith("/operations/123"))
d = self.shouldRedirect2("test_POST_DIRURL_deepcheck", _check_redirect,
self.POST, self.public_url,
t="start-deep-check", ophandle="123")
def redirect_to(self, ctx):
ophandle = get_arg(ctx, "ophandle")
assert ophandle
- target = get_root(ctx) + "/operations/" + ophandle + "?t=status"
+ target = get_root(ctx) + "/operations/" + ophandle
output = get_arg(ctx, "output")
if output:
- target = target + "&output=%s" % output
+ target = target + "?output=%s" % output
return url.URL.fromString(target)
def childFactory(self, ctx, name):
NOT_FOUND)
(monitor, renderer, when_added) = self.handles[ophandle]
+ request = IRequest(ctx)
t = get_arg(ctx, "t", "status")
- if t == "cancel":
+ if t == "cancel" and request.method == "POST":
monitor.cancel()
# return the status anyways, but release the handle
self._release_ophandle(ophandle)
# url.gethere would break a proxy, so the correct thing to do is
# req.path[-1] + queryargs
ophandle = req.prepath[-1]
- reload_target = ophandle + "?t=status&output=html"
+ reload_target = ophandle + "?output=html"
cancel_target = ophandle + "?t=cancel"
cancel_button = T.form(action=cancel_target, method="POST",
enctype="multipart/form-data")[