Comment 5 for bug 662912

ProxyClientFactory was the trick.

Apparently, we don't have the librarian files on staging, unless the diff is made. We forward to production with a proxy. In c/librarian/web.py:

        if self.storage.hasFile(dbcontentID) or self.upstreamHost is None:
            ...
        else:
            return proxy.ReverseProxyResource(self.upstreamHost,
                                              self.upstreamPort, request.path)

I verified with a LOSA that self.storage.hasFile(dbcontentID) returns True on production for the main example I've been using for this debugging, and False on staging.

That ReverseProxyResource is not set up to handle restricted files. To make MPs work on staging, I think that's what needs to happen. That would be relatively easy to do, given the current structure. However, lifeless warns that the new token story may change the solution; also, we may want to completely change MPs' usage of the librarian to make it not proxy through Zope. So we should just hold off on this.

It seems likely that MPs on staging that have been copied over from production have not worked since they started using the restricted librarian.

Lifeless points out that a reasonable work-around for doing QA is to push a new branch to qastaging/staging. Then the file will be local, and everything will work.

Because there is a workaround, and because the way forward is not clear, I'm marking this low and taking myself off of it.