Skip to content

Commit

Permalink
Upgrading for Pylint and syncing with gcloud-python.
Browse files Browse the repository at this point in the history
  • Loading branch information
dhermes committed Nov 30, 2015
1 parent 0f26ad2 commit 647bcc3
Show file tree
Hide file tree
Showing 15 changed files with 83 additions and 99 deletions.
35 changes: 0 additions & 35 deletions gcloud_bigtable/_helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,41 +95,6 @@ def _pb_timestamp_to_datetime(timestamp):
)


def _require_pb_property(message_pb, property_name, value):
"""Check that a property agrees with the value on the message.
:type message_pb: :class:`google.protobuf.message.Message`
:param message_pb: The message to check for ``property_name``.
:type property_name: str
:param property_name: The property value to check against.
:type value: object or :data:`NoneType <types.NoneType>`
:param value: The value to check against the cluster. If :data:`None`,
will not be checked.
:rtype: object
:returns: The value of ``property_name`` set on ``message_pb``.
:raises: :class:`ValueError <exceptions.ValueError>` if the result returned
from the ``message_pb`` does not contain the ``property_name``
value or if the value returned disagrees with the ``value``
passed with the request (if that value is not null).
"""
# Make sure `property_name` is set on the response.
# NOTE: HasField() doesn't work in protobuf>=3.0.0a3
all_fields = set([field.name for field in message_pb._fields])
if property_name not in all_fields:
raise ValueError('Message does not contain %s.' % (property_name,))
property_val = getattr(message_pb, property_name)
if value is None:
value = property_val
elif value != property_val:
raise ValueError('Message returned %s value disagreeing '
'with value passed in.' % (property_name,))

return value


def _parse_pb_any_to_native(any_val, expected_type=None):
"""Convert a serialized "google.protobuf.Any" value to actual type.
Expand Down
6 changes: 4 additions & 2 deletions gcloud_bigtable/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,10 @@

import copy
import os
import six
import socket

import six

from oauth2client.client import GoogleCredentials
from oauth2client.client import SignedJwtAssertionCredentials
from oauth2client.client import _get_application_default_credential_from_file
Expand Down Expand Up @@ -330,7 +331,8 @@ def from_service_account_p12(cls, client_email, private_key_path,
"""
credentials = SignedJwtAssertionCredentials(
service_account_name=client_email,
private_key=_get_contents(private_key_path))
private_key=_get_contents(private_key_path),
scope=None)
return cls(credentials=credentials, project=project,
read_only=read_only, admin=admin)

Expand Down
31 changes: 26 additions & 5 deletions gcloud_bigtable/cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from gcloud_bigtable._generated import operations_pb2
from gcloud_bigtable._helpers import _parse_pb_any_to_native
from gcloud_bigtable._helpers import _pb_timestamp_to_datetime
from gcloud_bigtable._helpers import _require_pb_property
from gcloud_bigtable.table import Table


Expand All @@ -37,6 +36,30 @@
r'(?P<operation_id>\d+)$')


def _get_pb_property_value(message_pb, property_name):
"""Return a message field value.
:type message_pb: :class:`google.protobuf.message.Message`
:param message_pb: The message to check for ``property_name``.
:type property_name: str
:param property_name: The property value to check against.
:rtype: object
:returns: The value of ``property_name`` set on ``message_pb``.
:raises: :class:`ValueError <exceptions.ValueError>` if the result returned
from the ``message_pb`` does not contain the ``property_name``
value.
"""
# Make sure `property_name` is set on the response.
# NOTE: As of proto3, HasField() only works for message fields, not for
# singular (non-message) fields.
all_fields = set([field.name for field in message_pb._fields])
if property_name not in all_fields:
raise ValueError('Message does not contain %s.' % (property_name,))
return getattr(message_pb, property_name)


def _prepare_create_request(cluster):
"""Creates a protobuf request for a CreateCluster request.
Expand Down Expand Up @@ -136,10 +159,8 @@ def __init__(self, zone, cluster_id, client,
self._operation_begin = None

def _update_from_pb(self, cluster_pb):
self.display_name = _require_pb_property(
cluster_pb, 'display_name', None)
self.serve_nodes = _require_pb_property(
cluster_pb, 'serve_nodes', None)
self.display_name = _get_pb_property_value(cluster_pb, 'display_name')
self.serve_nodes = _get_pb_property_value(cluster_pb, 'serve_nodes')

@classmethod
def from_pb(cls, cluster_pb, client):
Expand Down
2 changes: 2 additions & 0 deletions gcloud_bigtable/happybase/connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,12 @@ def _parse_family_option(option):
"""
result = option
if isinstance(result, dict):
# pylint: disable=unneeded-not
if not set(result.keys()) <= set(['max_versions', 'time_to_live']):
raise ValueError('Cloud Bigtable only supports max_versions and '
'time_to_live column family settings',
'Received', result.keys())
# pylint: enable=unneeded-not

max_num_versions = result.get('max_versions')
max_age = None
Expand Down
3 changes: 2 additions & 1 deletion gcloud_bigtable/happybase/pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,10 @@


import contextlib
import six
import threading

import six

from gcloud_bigtable.happybase.connection import Connection
from gcloud_bigtable.happybase.connection import _get_cluster

Expand Down
3 changes: 2 additions & 1 deletion gcloud_bigtable/happybase/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
"""Google Cloud Bigtable HappyBase table module."""


import six
import struct

import six

from gcloud_bigtable._helpers import _microseconds_to_timestamp
from gcloud_bigtable._helpers import _timestamp_to_microseconds
from gcloud_bigtable._helpers import _to_bytes
Expand Down
3 changes: 2 additions & 1 deletion gcloud_bigtable/row.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
"""User friendly container for Google Cloud Bigtable Row."""


import six
import struct

import six

from gcloud_bigtable._generated import bigtable_data_pb2 as data_pb2
from gcloud_bigtable._generated import (
bigtable_service_messages_pb2 as messages_pb2)
Expand Down
42 changes: 0 additions & 42 deletions gcloud_bigtable/test__helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,48 +94,6 @@ def test_it(self):
self.assertEqual(self._callFUT(timestamp), dt_stamp)


class Test__require_pb_property(unittest2.TestCase):

def _callFUT(self, message_pb, property_name, value):
from gcloud_bigtable._helpers import _require_pb_property
return _require_pb_property(message_pb, property_name, value)

def test_it(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
serve_nodes = 119
cluster_pb = data_pb2.Cluster(serve_nodes=serve_nodes)
result = self._callFUT(cluster_pb, 'serve_nodes', serve_nodes)
self.assertEqual(result, serve_nodes)

def test_with_null_value_passed_in(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
serve_nodes = None
actual_serve_nodes = 119
cluster_pb = data_pb2.Cluster(serve_nodes=actual_serve_nodes)
result = self._callFUT(cluster_pb, 'serve_nodes', serve_nodes)
self.assertEqual(result, actual_serve_nodes)

def test_with_value_unset_on_pb(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
serve_nodes = 119
cluster_pb = data_pb2.Cluster()
with self.assertRaises(ValueError):
self._callFUT(cluster_pb, 'serve_nodes', serve_nodes)

def test_with_values_disagreeing(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
serve_nodes = 119
other_serve_nodes = 1000
self.assertNotEqual(serve_nodes, other_serve_nodes)
cluster_pb = data_pb2.Cluster(serve_nodes=other_serve_nodes)
with self.assertRaises(ValueError):
self._callFUT(cluster_pb, 'serve_nodes', serve_nodes)


class Test__parse_pb_any_to_native(unittest2.TestCase):

def _callFUT(self, any_val, expected_type=None):
Expand Down
1 change: 1 addition & 0 deletions gcloud_bigtable/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ def test_from_service_account_p12(self):
signed_creds_kw = {
'private_key': private_key,
'service_account_name': client_email,
'scope': None,
}
signed_creds.check_called(self, [()], [signed_creds_kw])
# Load private key (via _get_contents) from the key path.
Expand Down
22 changes: 22 additions & 0 deletions gcloud_bigtable/test_cluster.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,28 @@
CLUSTER_ID = 'cluster-id'


class Test__get_pb_property_value(unittest2.TestCase):

def _callFUT(self, message_pb, property_name):
from gcloud_bigtable.cluster import _get_pb_property_value
return _get_pb_property_value(message_pb, property_name)

def test_it(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
serve_nodes = 119
cluster_pb = data_pb2.Cluster(serve_nodes=serve_nodes)
result = self._callFUT(cluster_pb, 'serve_nodes')
self.assertEqual(result, serve_nodes)

def test_with_value_unset_on_pb(self):
from gcloud_bigtable._generated import (
bigtable_cluster_data_pb2 as data_pb2)
cluster_pb = data_pb2.Cluster()
with self.assertRaises(ValueError):
self._callFUT(cluster_pb, 'serve_nodes')


class Test__prepare_create_request(unittest2.TestCase):

def _callFUT(self, cluster):
Expand Down
8 changes: 7 additions & 1 deletion pylintrc_default
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,11 @@ load-plugins=pylint.extensions.check_docs
# @_lazy_property_deco
# def dataset_id():
# ...
# - redefined-variable-type: This error is overzealous and complains at e.g.
# if some_prop:
# return int(value)
# else:
# return float(value)
disable =
maybe-no-member,
no-member,
Expand All @@ -104,6 +109,7 @@ disable =
similarities,
star-args,
method-hidden,
redefined-variable-type,


[REPORTS]
Expand Down Expand Up @@ -199,7 +205,7 @@ no-space-check =
# Maximum number of lines in a module
# DEFAULT: max-module-lines=1000
# RATIONALE: API-mapping
max-module-lines=1500
max-module-lines=1540

# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
# tab).
Expand Down
1 change: 1 addition & 0 deletions run_pylint.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
'too-many-locals',
'too-many-public-methods',
'unbalanced-tuple-unpacking',
'abstract-method',
]
TEST_RC_ADDITIONS = {
'MESSAGES CONTROL': {
Expand Down
21 changes: 11 additions & 10 deletions system_tests/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
import datetime
import operator
import os
import pytz
import time

import pytz
import unittest2

from oauth2client.client import GoogleCredentials
Expand Down Expand Up @@ -165,13 +166,13 @@ def test_update(self):
class TestTableAdminAPI(unittest2.TestCase):

@classmethod
def setUpClass(self):
self._table = CLUSTER.table(TABLE_ID)
self._table.create()
def setUpClass(cls):
cls._table = CLUSTER.table(TABLE_ID)
cls._table.create()

@classmethod
def tearDownClass(self):
self._table.delete()
def tearDownClass(cls):
cls._table.delete()

def setUp(self):
self.tables_to_delete = []
Expand Down Expand Up @@ -245,16 +246,16 @@ def test_delete_column_family(self):
class TestDataAPI(unittest2.TestCase):

@classmethod
def setUpClass(self):
self._table = table = CLUSTER.table(TABLE_ID)
def setUpClass(cls):
cls._table = table = CLUSTER.table(TABLE_ID)
table.create()
table.column_family(COLUMN_FAMILY_ID1).create()
table.column_family(COLUMN_FAMILY_ID2).create()

@classmethod
def tearDownClass(self):
def tearDownClass(cls):
# Will also delete any data contained in the table.
self._table.delete()
cls._table.delete()

def setUp(self):
self.rows_to_delete = []
Expand Down
2 changes: 2 additions & 0 deletions system_tests/run_happybase.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,11 @@ def set_hbase_connection():


def set_cloud_bigtable_connection():
# pylint: disable=no-name-in-module
from grpc.framework.interfaces.face.face import NetworkError
from gcloud_bigtable import client as client_mod
from gcloud_bigtable.happybase import Connection
# pylint: enable=no-name-in-module

client_mod.PROJECT_ENV_VAR = 'GCLOUD_TESTS_PROJECT_ID'
client = client_mod.Client(admin=True)
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ commands =
python run_pylint.py
deps =
pep8
-ehg+https://bitbucket.org/logilab/pylint@33e334be064c#egg=pylint
pylint
unittest2
passenv = GCLOUD_*

Expand Down

0 comments on commit 647bcc3

Please sign in to comment.