desmos-computer/cli/cli.py

88 lines
2.6 KiB
Python
Raw Normal View History

from .lib.server import DesmosGraphServer
from .lib.graphparser import DesmosGraph, DesmosGraphOverride
from .lib.clientside import payload as JSGraphPayload
2024-06-16 20:12:08 -05:00
from .data.computer import payload as ComputerPayload
from .data.testing import payload as TestingPayload
import pyperclip
import argparse
def handle_sync(parser):
if parser.copy_userscript:
pyperclip.copy(JSGraphPayload)
print("copied userscript to clipboard")
if parser.filename:
graph = DesmosGraph.from_file(parser.filename)
if parser.override:
override = DesmosGraphOverride.from_file(parser.override)
graph.include_override(override)
server = DesmosGraphServer()
server.instructions_to_run = []
server.append_inst({
"type": "insert_graph",
"graph": graph,
})
server.start(no_stop=True)
def handle_data(parser):
if parser.dataname:
if parser.dataname == "computer.desmos":
print(ComputerPayload)
elif parser.dataname == "testing.desmos":
print(TestingPayload)
return
if parser.list:
parsers = ["computer.desmos", "testing.desmos"]
print('\n'.join(parsers))
def main():
2024-06-16 20:12:08 -05:00
parser = argparse.ArgumentParser(
prog="desmosisa",
description="a smörgåsbord of utilities for desmos, including some implementations of an desmos-based isa",
)
subparsers = parser.add_subparsers(dest="subparser_name")
sync_parser = subparsers.add_parser("sync", help="desmos calculator synchronization utilities")
sync_parser.add_argument(
'filename',
nargs='?',
help="filename of DesmosExpressions to synchronize with client"
)
sync_parser.add_argument(
'-o', '--override',
help="filename of DesmosOverride file, to override certain expressions in the DesmosExpression file",
action="store"
)
sync_parser.add_argument(
'-c', '--copy-userscript',
help="copy the userscript to the clipboard, to be pasted into the JS console within the calculator.",
action="store_true"
)
data_parser = subparsers.add_parser("data", help="access various prebuilt files")
data_parser.add_argument(
'dataname',
nargs='?',
help='name of the datafile requested'
)
data_parser.add_argument(
'-l', '--list',
help='list available datafiles',
action='store_true'
)
args = parser.parse_args()
if args.subparser_name == "sync":
handle_sync(args)
if args.subparser_name == "data":
handle_data(args)
if __name__ == "__main__":
main()