Skip to content

Commit

Permalink
feat: add base_url beta and logout support
Browse files Browse the repository at this point in the history
  • Loading branch information
utkarsh-dixit committed Apr 6, 2024
1 parent d139b19 commit 4e825fc
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 15 deletions.
22 changes: 22 additions & 0 deletions core/composio/composio_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,34 @@ def parse_arguments():
list_triggers_parser.add_argument('app_name', type=str, help='Name of the app to list triggers for')
list_triggers_parser.set_defaults(func=list_triggers)

# Beta command group
beta_parser = subparsers.add_parser('beta', help='Beta features commands')
beta_subparsers = beta_parser.add_subparsers(help='beta commands', dest='beta_command')
beta_subparsers.required = True

# Update base_url command under beta
update_base_url_parser = beta_subparsers.add_parser('update-base-url', help='Update the base URL for API calls')
update_base_url_parser.add_argument('base_url', type=str, help='The new base URL to use for API calls')
update_base_url_parser.set_defaults(func=update_base_url)

# Generate enums command
generate_enums_parser = subparsers.add_parser('update', help='Update enums for apps and actions')
generate_enums_parser.set_defaults(func=handle_update)

return parser.parse_args()

def update_base_url(args):
client = ComposioCore()
auth_user(client)
base_url = args.base_url
console.print(f"\n[green]> Updating base URL to: {base_url}...[/green]\n")
try:
client.set_base_url(base_url)
console.print(f"\n[green]✔ Base URL updated successfully![/green]\n")
except Exception as e:
console.print(f"[red] Error occurred during updating base URL: {e}[/red]")
sys.exit(1)

def list_triggers(args):
client = ComposioCore()
auth_user(client)
Expand Down
18 changes: 16 additions & 2 deletions core/composio/sdk/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from .utils import get_git_user_info
from .sdk import ConnectionRequest, ConnectedAccount
from .storage import get_user_connection, get_api_key, save_api_key
from .storage import delete_user_connections, get_base_url, get_user_connection, get_api_key, load_user_data, save_api_key, save_user_data, set_base_url
from .sdk import Composio
from .enums import TestIntegration, Action
from enum import Enum
Expand All @@ -18,7 +18,7 @@ class ComposioCore:
sdk: Composio = None
framework: FrameworkEnum = None

def __init__(self, base_url = "https://backend.composio.dev/api", manage_auth = True, framework: FrameworkEnum = None):
def __init__(self, base_url = get_base_url(), manage_auth = True, framework: FrameworkEnum = None):
global __IS_FIRST_TIME__

self.base_url = base_url
Expand Down Expand Up @@ -51,6 +51,20 @@ def __init__(self, base_url = "https://backend.composio.dev/api", manage_auth =
except:
pass

def set_base_url(self, base_url: str):
self.base_url = base_url
set_base_url(base_url, force_reset=True)
self.http_client.headers.update({
'Content-Type': 'application/json'
})

def logout(self):
self.http_client.headers.pop('x-api-key')
user_data = load_user_data()
user_data.pop('api_key')
delete_user_connections()
save_user_data(user_data)

def authenticate(self, hash: str):
resp = self.http_client.post(f"{self.base_url}/v1/client/auth/identify", json={
"hash": hash,
Expand Down
3 changes: 2 additions & 1 deletion core/composio/sdk/sdk.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from pydantic import BaseModel, ConfigDict

from .enums import Action, App, TestIntegration
from .storage import get_base_url
from openai.types.chat.chat_completion import ChatCompletion
from openai.types.beta.threads import run
from openai import Client
Expand Down Expand Up @@ -175,7 +176,7 @@ def get_required_variables(self):

class Composio:
def __init__(
self, api_key: str = None, base_url="https://backend.composio.dev/api"
self, api_key: str = None, base_url=get_base_url()
):
self.base_url = base_url
self.api_key = api_key
Expand Down
48 changes: 36 additions & 12 deletions core/composio/sdk/storage.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,33 @@
import json
import os

def save_api_key(api_key):
user_data = {'api_key': api_key}
def load_user_data():
user_data_path = os.path.join(os.path.dirname(__file__), 'user_data.json')
if os.path.exists(user_data_path):
with open(user_data_path, 'r') as infile:
return json.load(infile)
return {}

def save_user_data(user_data):
user_data_path = os.path.join(os.path.dirname(__file__), 'user_data.json')
with open(user_data_path, 'w') as outfile:
json.dump(user_data, outfile)

def save_api_key(api_key):
user_data = load_user_data()
user_data['api_key'] = api_key
save_user_data(user_data)

def get_api_key():
user_data_path = os.path.join(os.path.dirname(__file__), 'user_data.json')
if os.path.exists(user_data_path):
with open(user_data_path, 'r') as infile:
user_data = json.load(infile)
return user_data.get('api_key')
return None
user_data = load_user_data()
return user_data.get('api_key')

def save_user_connection(connection_id: str, tool_name: str) -> None:
user_data = {}
user_data_path = os.path.join(os.path.dirname(__file__), 'connection_data.json')
user_data = {}
if os.path.exists(user_data_path):
user_data = json.load(open(user_data_path, 'r'))
with open(user_data_path, 'r') as infile:
user_data = json.load(infile)

user_data[tool_name] = connection_id
with open(user_data_path, 'w') as outfile:
Expand All @@ -30,6 +38,22 @@ def get_user_connection(tool_name: str) -> str:
if os.path.exists(user_data_path):
with open(user_data_path, 'r') as infile:
user_data = json.load(infile)

return user_data.get(tool_name)
return None
return None

def delete_user_connections():
user_data_path = os.path.join(os.path.dirname(__file__), 'connection_data.json')
if os.path.exists(user_data_path):
os.remove(user_data_path)

def set_base_url(base_url: str, force_reset: bool = False):
user_data = {} if force_reset else load_user_data()
user_data['base_url'] = base_url
save_user_data(user_data)

def get_base_url():
user_data = load_user_data()
delete_user_connections()
if 'base_url' in user_data:
return user_data['base_url']
return 'https://backend.composio.dev/api'

0 comments on commit 4e825fc

Please sign in to comment.