import os import json from pathlib import Path from ring_doorbell import Ring, Auth from oauthlib.oauth2 import MissingTokenError cache_file = Path("test_token.cache") def token_updated(token): cache_file.write_text(json.dumps(token)) def otp_callback(): auth_code = input("[INPUT] 2FA code: ") return auth_code def main(download_only=False): if cache_file.is_file(): auth = Auth("MyProject/1.0", json.loads(cache_file.read_text()), token_updated) else: username = os.environ.get('USERNAME') password = os.environ.get('PASSWORD') auth = Auth("MyProject/1.0", None, token_updated) try: auth.fetch_token(username, password) except MissingTokenError: auth.fetch_token(username, password, otp_callback()) ring = Ring(auth) ring.update_data() wait_for_update(ring, download_only=download_only)