files.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from __future__ import annotations
  2. from typing import TYPE_CHECKING, Any, cast
  3. from argparse import ArgumentParser
  4. from .._utils import get_client, print_model
  5. from .._models import BaseModel
  6. from .._progress import BufferReader
  7. if TYPE_CHECKING:
  8. from argparse import _SubParsersAction
  9. def register(subparser: _SubParsersAction[ArgumentParser]) -> None:
  10. sub = subparser.add_parser("files.create")
  11. sub.add_argument(
  12. "-f",
  13. "--file",
  14. required=True,
  15. help="File to upload",
  16. )
  17. sub.add_argument(
  18. "-p",
  19. "--purpose",
  20. help="Why are you uploading this file? (see https://platform.openai.com/docs/api-reference/ for purposes)",
  21. required=True,
  22. )
  23. sub.set_defaults(func=CLIFile.create, args_model=CLIFileCreateArgs)
  24. sub = subparser.add_parser("files.retrieve")
  25. sub.add_argument("-i", "--id", required=True, help="The files ID")
  26. sub.set_defaults(func=CLIFile.get, args_model=CLIFileCreateArgs)
  27. sub = subparser.add_parser("files.delete")
  28. sub.add_argument("-i", "--id", required=True, help="The files ID")
  29. sub.set_defaults(func=CLIFile.delete, args_model=CLIFileCreateArgs)
  30. sub = subparser.add_parser("files.list")
  31. sub.set_defaults(func=CLIFile.list)
  32. class CLIFileIDArgs(BaseModel):
  33. id: str
  34. class CLIFileCreateArgs(BaseModel):
  35. file: str
  36. purpose: str
  37. class CLIFile:
  38. @staticmethod
  39. def create(args: CLIFileCreateArgs) -> None:
  40. with open(args.file, "rb") as file_reader:
  41. buffer_reader = BufferReader(file_reader.read(), desc="Upload progress")
  42. file = get_client().files.create(
  43. file=(args.file, buffer_reader),
  44. # casts required because the API is typed for enums
  45. # but we don't want to validate that here for forwards-compat
  46. purpose=cast(Any, args.purpose),
  47. )
  48. print_model(file)
  49. @staticmethod
  50. def get(args: CLIFileIDArgs) -> None:
  51. file = get_client().files.retrieve(file_id=args.id)
  52. print_model(file)
  53. @staticmethod
  54. def delete(args: CLIFileIDArgs) -> None:
  55. file = get_client().files.delete(file_id=args.id)
  56. print_model(file)
  57. @staticmethod
  58. def list() -> None:
  59. files = get_client().files.list()
  60. for file in files:
  61. print_model(file)