openai/openai-python

Public

mirrored from https://github.com/openai/openai-pythonAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
v0.23.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

openai/api_resources/abstract/nested_resource_class_methods.py

102lines · modeblame

40c32f9fRachel Lim5 years ago1from urllib.parse import quote_plus
3c6d4cd6Greg Brockman5 years ago2
3from openai import api_requestor, util
4
5
6def nested_resource_class_methods(
7resource, path=None, operations=None, resource_plural=None
8):
9if resource_plural is None:
10resource_plural = "%ss" % resource
11if path is None:
12path = resource_plural
13if operations is None:
14raise ValueError("operations list required")
15
16def wrapper(cls):
17def nested_resource_url(cls, id, nested_id=None):
18url = "%s/%s/%s" % (cls.class_url(), quote_plus(id), quote_plus(path))
19if nested_id is not None:
20url += "/%s" % quote_plus(nested_id)
21return url
22
23resource_url_method = "%ss_url" % resource
24setattr(cls, resource_url_method, classmethod(nested_resource_url))
25
26def nested_resource_request(
27cls,
28method,
29url,
30api_key=None,
31request_id=None,
32api_version=None,
33organization=None,
40c32f9fRachel Lim5 years ago34**params,
3c6d4cd6Greg Brockman5 years ago35):
36requestor = api_requestor.APIRequestor(
37api_key, api_version=api_version, organization=organization
38)
62f8d40fMadeleine Thompson4 years ago39response, _, api_key = requestor.request(
40method, url, params, request_id=request_id
41)
3c6d4cd6Greg Brockman5 years ago42return util.convert_to_openai_object(
43response, api_key, api_version, organization
44)
45
46resource_request_method = "%ss_request" % resource
47setattr(cls, resource_request_method, classmethod(nested_resource_request))
48
49for operation in operations:
50if operation == "create":
51
52def create_nested_resource(cls, id, **params):
53url = getattr(cls, resource_url_method)(id)
54return getattr(cls, resource_request_method)("post", url, **params)
55
56create_method = "create_%s" % resource
57setattr(cls, create_method, classmethod(create_nested_resource))
58
59elif operation == "retrieve":
60
61def retrieve_nested_resource(cls, id, nested_id, **params):
62url = getattr(cls, resource_url_method)(id, nested_id)
63return getattr(cls, resource_request_method)("get", url, **params)
64
65retrieve_method = "retrieve_%s" % resource
66setattr(cls, retrieve_method, classmethod(retrieve_nested_resource))
67
68elif operation == "update":
69
70def modify_nested_resource(cls, id, nested_id, **params):
71url = getattr(cls, resource_url_method)(id, nested_id)
72return getattr(cls, resource_request_method)("post", url, **params)
73
74modify_method = "modify_%s" % resource
75setattr(cls, modify_method, classmethod(modify_nested_resource))
76
77elif operation == "delete":
78
79def delete_nested_resource(cls, id, nested_id, **params):
80url = getattr(cls, resource_url_method)(id, nested_id)
81return getattr(cls, resource_request_method)(
82"delete", url, **params
83)
84
85delete_method = "delete_%s" % resource
86setattr(cls, delete_method, classmethod(delete_nested_resource))
87
88elif operation == "list":
89
90def list_nested_resources(cls, id, **params):
91url = getattr(cls, resource_url_method)(id)
92return getattr(cls, resource_request_method)("get", url, **params)
93
94list_method = "list_%s" % resource_plural
95setattr(cls, list_method, classmethod(list_nested_resources))
96
97else:
98raise ValueError("Unknown operation: %s" % operation)
99
100return cls
101
102return wrapper