diff --git a/.gitignore b/.gitignore index a8b3cf4a28..2bc8efba56 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,6 @@ __pycache__ /public/dist .idea -.python-version \ No newline at end of file +.python-version +build/ +dist/ \ No newline at end of file diff --git a/openai/__init__.py b/openai/__init__.py index 694db8ba3b..4905cebc98 100644 --- a/openai/__init__.py +++ b/openai/__init__.py @@ -27,6 +27,4 @@ log = None # API resources -from openai.api_resources import * # noqa - -from openai.error import OpenAIError, APIError, InvalidRequestError +from openai.api_resources import * # noqa \ No newline at end of file diff --git a/openai/api_requestor.py b/openai/api_requestor.py index 186bdd284a..79ef29d9d8 100644 --- a/openai/api_requestor.py +++ b/openai/api_requestor.py @@ -7,7 +7,6 @@ import time import uuid import warnings -import gzip from io import BytesIO from collections import OrderedDict @@ -18,13 +17,11 @@ from openai.openai_response import OpenAIResponse from openai.upload_progress import BufferReader - def _encode_datetime(dttime): if dttime.tzinfo and dttime.tzinfo.utcoffset(dttime) is not None: utc_timestamp = calendar.timegm(dttime.utctimetuple()) else: utc_timestamp = time.mktime(dttime.timetuple()) - return int(utc_timestamp) @@ -41,23 +38,23 @@ def _api_encode(data): if value is None: continue elif hasattr(value, "openai_id"): - yield (key, value.openai_id) + yield key, value.openai_id elif isinstance(value, list) or isinstance(value, tuple): for i, sv in enumerate(value): if isinstance(sv, dict): subdict = _encode_nested_dict("%s[%d]" % (key, i), sv) for k, v in _api_encode(subdict): - yield (k, v) + yield k, v else: - yield ("%s[%d]" % (key, i), util.utf8(sv)) + yield "%s[%d]" % (key, i), util.utf8(sv) elif isinstance(value, dict): subdict = _encode_nested_dict(key, value) for subkey, subvalue in _api_encode(subdict): - yield (subkey, subvalue) + yield subkey, subvalue elif isinstance(value, datetime.datetime): - yield (key, _encode_datetime(value)) + yield key, _encode_datetime(value) else: - yield (key, util.utf8(value)) + yield key, util.utf8(value) def _build_api_url(url, query): @@ -258,10 +255,10 @@ def request_raw( if my_api_key is None: raise error.AuthenticationError( "No API key provided. (HINT: set your API key using in code using " - '"openai.api_key = ", or you can set the environment variable OPENAI_API_KEY=). You can generate API keys ' + '"openai.api_key = ", or you can set the environment variable OPENAI_API_KEY=). ' + 'You can generate API keys ' "in the OpenAI web interface. See https://onboard.openai.com " - "for details, or email support@openai.com if you have any " - "questions." + "for details, or email support@openai.com if you have any questions" ) abs_url = "%s%s" % (self.api_base, url) @@ -313,9 +310,9 @@ def request_raw( post_data = GZIPCompressedStream(post_data, compression_level=9) else: raise error.APIConnectionError( - "Unrecognized HTTP method %r. This may indicate a bug in the " + "Unrecognized HTTP method {}. This may indicate a bug in the " "OpenAI bindings. Please contact support@openai.com for " - "assistance." % (method,) + "assistance.".format(method) ) headers = self.request_headers(my_api_key, method, headers) diff --git a/openai/api_resources/engine.py b/openai/api_resources/engine.py index 7b62c1c15b..5e7558a1aa 100644 --- a/openai/api_resources/engine.py +++ b/openai/api_resources/engine.py @@ -2,7 +2,7 @@ import time -from openai import api_requestor, util +from openai import util from openai.api_resources.abstract import ( ListableAPIResource, UpdateableAPIResource, diff --git a/openai/api_resources/fine_tune.py b/openai/api_resources/fine_tune.py index da888a17d8..0f34b45747 100644 --- a/openai/api_resources/fine_tune.py +++ b/openai/api_resources/fine_tune.py @@ -18,4 +18,4 @@ def cancel(cls, id, api_key=None, request_id=None, **params): url = "%s/%s/cancel" % (base, extn) instance = cls(id, api_key, **params) headers = util.populate_headers(request_id=request_id) - return instance.request("post", url, headers=headers) \ No newline at end of file + return instance.request("post", url, headers=headers) diff --git a/openai/api_resources/list_object.py b/openai/api_resources/list_object.py index 9696b67b40..29dc71de29 100644 --- a/openai/api_resources/list_object.py +++ b/openai/api_resources/list_object.py @@ -1,8 +1,6 @@ from __future__ import absolute_import, division, print_function - from openai import api_requestor, six, util from openai.openai_object import OpenAIObject - from openai.six.moves.urllib.parse import quote_plus @@ -67,7 +65,7 @@ def _request( openai_account = openai_account or self.openai_account requestor = api_requestor.APIRequestor( - api_key, api_version=openai_version, account=openai_account + api_key, api_version=openai_version ) headers = util.populate_headers(idempotency_key) response, api_key = requestor.request(method_, url_, params, headers) diff --git a/openai/api_resources/snapshot.py b/openai/api_resources/snapshot.py index a8cd46d92e..41ab51521f 100644 --- a/openai/api_resources/snapshot.py +++ b/openai/api_resources/snapshot.py @@ -1,4 +1,3 @@ -from openai.api_resources.abstract.engine_api_resource import EngineAPIResource from openai.api_resources.abstract import ( ListableAPIResource, DeletableAPIResource, diff --git a/openai/cli.py b/openai/cli.py index fb210c507e..fee572a4ec 100644 --- a/openai/cli.py +++ b/openai/cli.py @@ -1,7 +1,6 @@ import json import sys import warnings - import openai diff --git a/openai/multipart_data_generator.py b/openai/multipart_data_generator.py index 93a683ee7b..643a03e115 100644 --- a/openai/multipart_data_generator.py +++ b/openai/multipart_data_generator.py @@ -1,23 +1,27 @@ from __future__ import absolute_import, division, print_function - import random import io - import openai import re +from openai import six + + +def initialize_boundary(): + return random.randint(0, 2 ** 63) + + +def remove_array_element(input_string): + match = re.match(r"^(.*)\[.*\]$", input_string) + return match[1] if match else input_string class MultipartDataGenerator(object): def __init__(self, chunk_size=1028): self.data = io.BytesIO() self.line_break = "\r\n" - self.boundary = self._initialize_boundary() + self.boundary = initialize_boundary() self.chunk_size = chunk_size - def _remove_array_element(self, input_string): - match = re.match(r"^(.*)\[.*\]$", input_string) - return match[1] if match else input_string - def add_params(self, params): # Flatten parameters first params = dict(openai.api_requestor._api_encode(params)) @@ -25,7 +29,7 @@ def add_params(self, params): for key, value in openai.six.iteritems(params): # strip array elements if present from key - key = self._remove_array_element(key) + key = remove_array_element(key) if value is None: continue @@ -87,6 +91,3 @@ def _write_file(self, f): if not file_contents: break self._write(file_contents) - - def _initialize_boundary(self): - return random.randint(0, 2 ** 63) diff --git a/openai/object_classes.py b/openai/object_classes.py index c3a47577bb..a2da952eeb 100644 --- a/openai/object_classes.py +++ b/openai/object_classes.py @@ -1,5 +1,4 @@ from __future__ import absolute_import, division, print_function - from openai import api_resources from openai.api_resources.experimental.completion_config import CompletionConfig diff --git a/openai/openai_object.py b/openai/openai_object.py index 1f70915305..e234101a14 100644 --- a/openai/openai_object.py +++ b/openai/openai_object.py @@ -1,9 +1,7 @@ from __future__ import absolute_import, division, print_function - import datetime import json from copy import deepcopy - import openai from openai import api_requestor, util, six diff --git a/openai/openai_response.py b/openai/openai_response.py index 4550c22ec0..71d74a337c 100644 --- a/openai/openai_response.py +++ b/openai/openai_response.py @@ -1,5 +1,4 @@ from __future__ import absolute_import, division, print_function - import json diff --git a/openai/upload_progress.py b/openai/upload_progress.py index 4214202c63..deb484d3c7 100644 --- a/openai/upload_progress.py +++ b/openai/upload_progress.py @@ -1,4 +1,3 @@ -import requests import io diff --git a/openai/util.py b/openai/util.py index 7295710c44..4d5bd0368d 100644 --- a/openai/util.py +++ b/openai/util.py @@ -1,5 +1,4 @@ from __future__ import absolute_import, division, print_function - import functools import hmac import io @@ -7,10 +6,8 @@ import sys import os import re - import openai from openai import six -from openai.six.moves.urllib.parse import parse_qsl OPENAI_LOG = os.environ.get("OPENAI_LOG") @@ -19,13 +16,13 @@ __all__ = [ "io", - "parse_qsl", "utf8", "log_info", "log_debug", "log_warn", "dashboard_link", "logfmt", + "merge_dicts" ] @@ -64,10 +61,11 @@ def log_info(message, **params): print(msg, file=sys.stderr) logger.info(msg) + def log_warn(message, **params): msg = logfmt(dict(message=message, **params)) print(msg, file=sys.stderr) - logger.warn(msg) + logger.warning(msg) def _test_or_live_environment(): @@ -87,7 +85,7 @@ def dashboard_link(request_id): def logfmt(props): def fmt(key, val): - # Handle case where val is a bytes or bytesarray + # Handle case where val is a bytes or bytes array if six.PY3 and hasattr(val, "decode"): val = val.decode("utf-8") # Check if val is already a string to avoid re-encoding into diff --git a/setup.py b/setup.py index 21d5f70f98..c3e169275c 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,4 @@ import os - from setuptools import find_packages, setup version_contents = {}