Что делает этот код из AuthKit? (где эти функции и методы определены?)

Я пытаюсь реализовать свой собственный метод аутентификации для AuthKit и пытаюсь выяснить, как работают некоторые из встроенных методов. В частности, я пытаюсь выяснить, как обновить REMOTE_USER за environ правильно.

Вот как это происходит внутри authkit.authenticate.basic но это довольно запутанно. Я не могу найти место, где REMOTE_USER а также AUTH_TYPE определены. Здесь происходит что-то странное, и если да, то что это?

def __call__(self, environ, start_response):
    environ['authkit.users'] = self.users
    result = self.authenticate(environ)
    if isinstance(result, str):
        AUTH_TYPE.update(environ, 'basic')
        REMOTE_USER.update(environ, result)
    return self.application(environ, start_response)

На самом деле есть множество таких заглавных букв, для которых я не могу найти определение. Например, где AUTHORIZATION прийти снизу:

def authenticate(self, environ):
    authorization = AUTHORIZATION(environ)
    if not authorization:
        return self.build_authentication()
    (authmeth, auth) = authorization.split(' ',1)
    if 'basic' != authmeth.lower():
        return self.build_authentication()
    auth = auth.strip().decode('base64')
    username, password = auth.split(':',1)
    if self.authfunc(environ, username, password):
        return username
    return self.build_authentication()

Я чувствую, что, возможно, мне не хватает специальной обработки синтаксиса для environ Да, но вполне возможно, что здесь происходит нечто действительно странное, что не сразу становится очевидным для такого нового для Python человека, как я.

1 ответ

Решение

Глядя на этот источник, я вижу, что у него есть (зло)

from paste.httpheaders import *

это один из способов, с помощью которых в коде могут внезапно появиться загадочные голые имена (именно поэтому эта идиома очень, очень плохая практика). Я не могу быть уверен, что именно так эти идентификаторы неожиданно и необъяснимо материализуются, но это возможно.

Другие вопросы по тегам