mini_buildd.httpd module

class mini_buildd.httpd.Site(resource, requestFactory=None, *args, **kwargs)

Bases: Site

class mini_buildd.httpd.RootResource(wsgi_resource)

Bases: Resource

Twisted root resource needed to mix static and wsgi resources

getChild(path, request)

Retrieve a ‘child’ resource from me.

Implement this to create dynamic resource generation – resources which are always available may be registered with self.putChild().

This will not be called if the class-level variable ‘isLeaf’ is set in your subclass; instead, the ‘postpath’ attribute of the request will be left as a list of the remaining path elements.

For example, the URL /foo/bar/baz will normally be:

| site.resource.getChild('foo').getChild('bar').getChild('baz').

However, if the resource returned by ‘bar’ has isLeaf set to true, then the getChild call will never be made on it.

Parameters and return value have the same meaning and requirements as those defined by L{IResource.getChildWithDefault}.

mini_buildd.httpd.mbd_is_ssl(request)

For workarounds only. Does not work with twisted 24

class mini_buildd.httpd.FileResource(*args, mbd_uri=None, mbd_path=None, **kwargs)

Bases: File

Twisted static resource enhanced with switchable index and regex matching support

directoryListing()

Return a resource that generates an HTML listing of the directory this path represents.

@return: A resource that renders the directory to HTML. @rtype: L{DirectoryLister}

getChild(path, request)

Custom getChild implementation

NEEDS_PRODUCER_WORKAROUND = False
classmethod mbd_producer_workaround(request)

Attention

compat (twisted): Always unregister producer (avoids random static file error)

Avoids seemingly random:

RuntimeError: Cannot register producer <twisted.web.static.NoRangeStaticProducer object at 0xfoo>, because producer <twisted.internet._producer_helpers._PullToPush object at 0xbar> was never unregistered.

errors from twisted. This in turn randomly breaks apt update calls with (slightly misleading) ‘size mismatch’ errors.

Rare enough to never ever have shown in testsuite runs, but on bigger repos (with many (parallel?) apt calls), it’s almost certain to appear.

render(request)

Render a given resource. See L{IResource}’s render method.

I delegate to methods of self with the form ‘render_METHOD’ where METHOD is the HTTP that was used to make the request. Examples: render_GET, render_HEAD, render_POST, and so on. Generally you should implement those methods instead of overriding this one.

render_METHOD methods are expected to return a byte string which will be the rendered page, unless the return value is C{server.NOT_DONE_YET}, in which case it is this class’s responsibility to write the results using C{request.write(data)} and then call C{request.finish()}.

Old code that overrides render() directly is likewise expected to return a byte string or NOT_DONE_YET.

@see: L{IResource.render}

class mini_buildd.httpd.Events

Bases: Resource

NEEDS_SSL_WORKAROUND = False
classmethod mbd_ssl_workaround(request)

Attention

compat (twisted < 22.2): SSL timeout workaround (avoids spurious disconnects w/ SSL)

WTF: When using SSL, (event queue) connections spuriously disconnect (twisted: “Forcibly timing out client”), even though no timeout has been specified (timeOut=None). Manually disabling ‘abortTimeout’ as well (which otherwise defaults to 15 seconds) seems to fix the SSL case (and hopefully has no other bad effects).

Retests with twisted 22.2 could not (yet) reproduce this behaviour. So I guess it would be fine to remove this once we can pimp the dependency in debian/control.

Retests with twisted 22.4 occasionally also showed (twisted: “Timing out client”), so I added setTimeout(None) as well. I.e., I had no such failures with that workaround, however I also had some successful testsuite runs w/o that workaround.

render_GET(request)
class mini_buildd.httpd.HttpD(wsgi_app, minthreads=0, maxthreads=10)

Bases: Thread

shutdown()
mbd_run()