The following syntax is an example of a virtual import:
from httpout import request
As its name implies, it doesn’t actually import from a file, it just magically retrieves the current request object.
Since httpout uses file-based routing, this is the only viable way I can think of to interact with objects like request
, response
, etc., by leveraging the import syntax.
I am not aware if there are other tools/frameworks that do something like this, so I just call it virtual import. No, it does not rely on threading.local at all!
The objects that can be imported are mostly from the built-in:
from httpout import (
request,
response,
websocket,
print,
run,
wait,
context, # request-level context
__server__,
__globals__ # worker-level context
)
While __main__ can be imported in this way:
import __main__
Well, to use print, there is no need to do so, unless on other built-ins like run or wait.
It is useful to avoid linter errors:
F821 undefined name 'run'
F821 undefined name '__globals__'
Last but not least, importing httpout
means importing the current module.
import httpout
assert httpout is __server__['modules'][__name__]