From ef4249903759c9016e4156f971411db42034df72 Mon Sep 17 00:00:00 2001 From: Danny Hermes Date: Fri, 3 Jul 2015 15:43:06 -0700 Subject: [PATCH] Adding basic client class in storage. --- gcloud/storage/client.py | 43 +++++++++++++++++++++++++++++++ gcloud/storage/test_client.py | 48 +++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 gcloud/storage/client.py create mode 100644 gcloud/storage/test_client.py diff --git a/gcloud/storage/client.py b/gcloud/storage/client.py new file mode 100644 index 000000000000..7aac6e847b2f --- /dev/null +++ b/gcloud/storage/client.py @@ -0,0 +1,43 @@ +# Copyright 2015 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""gcloud storage client for interacting with API.""" + + +from gcloud.client import JSONClient +from gcloud.storage.connection import Connection + + +class Client(JSONClient): + """Client to bundle configuration needed for API requests. + + :type project: string + :param project: the project which the client acts on behalf of. Will be + passed when creating a topic. If not passed, + falls back to the default inferred from the environment. + + :type credentials: :class:`oauth2client.client.OAuth2Credentials` or + :class:`NoneType` + :param credentials: The OAuth2 Credentials to use for the connection + owned by this client. If not passed (and if no ``http`` + object is passed), falls back to the default inferred + from the environment. + + :type http: :class:`httplib2.Http` or class that defines ``request()``. + :param http: An optional HTTP object to make requests. If not passed, an + ``http`` object is created that is bound to the + ``credentials`` for the current object. + """ + + _connection_class = Connection diff --git a/gcloud/storage/test_client.py b/gcloud/storage/test_client.py new file mode 100644 index 000000000000..5e46410653d2 --- /dev/null +++ b/gcloud/storage/test_client.py @@ -0,0 +1,48 @@ +# Copyright 2015 Google Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest2 + + +class TestClient(unittest2.TestCase): + + def _getTargetClass(self): + from gcloud.storage.client import Client + return Client + + def _makeOne(self, *args, **kw): + return self._getTargetClass()(*args, **kw) + + def test_ctor_connection_type(self): + from gcloud.storage.connection import Connection + + PROJECT = object() + CREDENTIALS = _Credentials() + + client = self._makeOne(project=PROJECT, credentials=CREDENTIALS) + self.assertTrue(isinstance(client.connection, Connection)) + self.assertTrue(client.connection.credentials is CREDENTIALS) + + +class _Credentials(object): + + _scopes = None + + @staticmethod + def create_scoped_required(): + return True + + def create_scoped(self, scope): + self._scopes = scope + return self