async def register_user(client: AsyncClient, email: EmailStr, password: SecretStr): path = "/auth/register" await client.post( path, json={ "email": email, "password": password.get_secret_value(), "confirm": password.get_secret_value(), "invitation": "", }, )
class TwitterCredentials(BaseSettings): bearer_token: Optional[SecretStr] = Field(None, env="twitter_bearer_token") consumer_key: Optional[SecretStr] = Field(None, env="twitter_consumer_key") consumer_secret: Optional[SecretStr] = Field(None, env="twitter_consumer_secret") endpoint: str = Field("https://api.twitter.com/2/tweets/search/recent", env="twitter_endpoint") extra_headers_dict: Optional[Dict[str, Any]] = None def __init__(self, **data: Any): super().__init__(**data) if self.bearer_token is None: if self.consumer_key is None and self.consumer_secret is None: raise AttributeError( "consumer_key and consumer_secret required to generate bearer_token via Twitter" ) self.bearer_token = SecretStr(self.generate_bearer_token()) def get_twitter_credentials(self): if self.bearer_token is None: self.bearer_token = self.generate_bearer_token() return { "bearer_token": self.bearer_token.get_secret_value(), "endpoint": self.endpoint, "extra_headers_dict": self.extra_headers_dict, } # Copied from Twitter searchtweets-v2 lib def generate_bearer_token(self): """ Return the bearer token for a given pair of consumer key and secret values. """ data = [("grant_type", "client_credentials")] resp = requests.post( TWITTER_OAUTH_ENDPOINT, data=data, auth=( self.consumer_key.get_secret_value(), self.consumer_secret.get_secret_value(), ), ) logger.warning("Grabbing bearer token from OAUTH") if resp.status_code >= 400: logger.error(resp.text) resp.raise_for_status() return resp.json()["access_token"] class Config: arbitrary_types_allowed = True
async def login_user(client: AsyncClient, email: EmailStr, password: SecretStr): typer.secho( f"loging user {email}", ) path = "/auth/login" r = await client.post( path, json={"email": email, "password": password.get_secret_value()} ) r.raise_for_status() typer.secho( f"user {email} logged in", fg=typer.colors.YELLOW, )