def memoizer(*args, **kwargs): key = str(args) + str(kwargs) if key not in cache: default_log.debug("memoize cache miss") cache[key] = obj(*args, **kwargs) else: default_log.debug("memoize cache hit") return cache[key]
def create_browser(auth_required, login, password, login_handler): """ Creates a browser and logs into website or service, if auth is required. This fn is memoized, so same browser object is returned on subsequent calls with the same args. :param auth_required: boolean :param login_handler: function :param login: string :param password: string :return: """ global _browser, _browser_init_success default_log.debug("creating browser object...") _browser = browser() if auth_required: default_log.debug("logging in...") login_handler(_browser, login, password) return _browser
for form in browser.forms(): browser.form = form login_populated, password_populated = False, False for possible_login_field in ['email', 'login']: try: browser[possible_login_field] = login login_populated = True except ControlNotFoundError, e: pass if login_populated: break try: browser['password'] = password password_populated = True except ControlNotFoundError, e: pass if login_populated and password_populated: response = browser.submit() break if "Logout" in response.read(): default_log.debug("Login seemed successful") success = True else: success = False # subsequent requests using this browser will fail. oh well. :( # we can't do much about it here. default_log.error("Login seemed to fail on page %s" % (config.get('auth_url'))) return success