import asyncio
import os
from dotenv import load_dotenv
from mirage import MountMode, Workspace
from mirage.resource.gsheets import GSheetsConfig, GSheetsResource
load_dotenv(".env.development")
config = GSheetsConfig(
client_id=os.environ["GOOGLE_CLIENT_ID"],
client_secret=os.environ["GOOGLE_CLIENT_SECRET"],
refresh_token=os.environ["GOOGLE_REFRESH_TOKEN"],
)
resource = GSheetsResource(config=config)
async def main():
ws = Workspace({"/gsheets": resource}, mode=MountMode.READ)
# List structure
r = await ws.execute("ls /gsheets/")
print(await r.stdout_str())
# List owned spreadsheets
r = await ws.execute("ls /gsheets/owned/")
print(await r.stdout_str())
# Read a spreadsheet
r = await ws.execute(
"cat /gsheets/owned/2026-04-04_Roadmap__1AbCdEf.gsheet.json")
print(await r.stdout_str())
# Extract title with jq
r = await ws.execute(
'jq ".properties.title"'
" /gsheets/owned/2026-04-04_Roadmap__1AbCdEf.gsheet.json")
print(await r.stdout_str())
# Search across all spreadsheets
r = await ws.execute('rg "revenue" /gsheets/owned/')
print(await r.stdout_str())
# Tree view
r = await ws.execute("tree -L 1 /gsheets/")
print(await r.stdout_str())
# Read cell values
r = await ws.execute(
'gws-sheets-read --spreadsheet 1AbCdEf --range "Sheet1!A1:C3"')
print(await r.stdout_str())
# Append rows
r = await ws.execute(
"gws-sheets-append --spreadsheet 1AbCdEf --values Alice,30,NYC")
print(await r.stdout_str())
# Create a new spreadsheet
r = await ws.execute(
'gws-sheets-spreadsheets-create'
' --json \'{"properties":{"title":"MIRAGE Sheet"}}\'')
print(await r.stdout_str())
if __name__ == "__main__":
asyncio.run(main())