Skip to content

Commit

Permalink
Merge pull request #2826 from daspecster/vision-switch-to-enums
Browse files Browse the repository at this point in the history
Switch to enums and clean up names.
  • Loading branch information
daspecster committed Dec 6, 2016
2 parents 6109bb2 + e343dae commit 279d583
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 22 deletions.
28 changes: 13 additions & 15 deletions packages/google-cloud-vision/google/cloud/vision/face.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
"""Face class representing the Vision API's face detection response."""


from enum import Enum

from google.cloud.vision.geometry import BoundsBase
from google.cloud.vision.likelihood import Likelihood
from google.cloud.vision.geometry import Position
Expand Down Expand Up @@ -91,11 +93,10 @@ def from_api_repr(cls, response):
:rtype: :class:`~google.cloud.vision.face.Emotions`
:returns: Populated instance of `Emotions`.
"""
joy_likelihood = getattr(Likelihood, response['joyLikelihood'])
sorrow_likelihood = getattr(Likelihood, response['sorrowLikelihood'])
surprise_likelihood = getattr(Likelihood,
response['surpriseLikelihood'])
anger_likelihood = getattr(Likelihood, response['angerLikelihood'])
joy_likelihood = Likelihood[response['joyLikelihood']]
sorrow_likelihood = Likelihood[response['sorrowLikelihood']]
surprise_likelihood = Likelihood[response['surpriseLikelihood']]
anger_likelihood = Likelihood[response['angerLikelihood']]

return cls(joy_likelihood, sorrow_likelihood, surprise_likelihood,
anger_likelihood)
Expand Down Expand Up @@ -172,8 +173,7 @@ def from_api_repr(cls, response):
detection_confidence = response['detectionConfidence']
emotions = Emotions.from_api_repr(response)
fd_bounds = FDBounds.from_api_repr(response['fdBoundingPoly'])
headwear_likelihood = getattr(Likelihood,
response['headwearLikelihood'])
headwear_likelihood = Likelihood[response['headwearLikelihood']]
image_properties = FaceImageProperties.from_api_repr(response)
landmarks = Landmarks(response['landmarks'])
landmarking_confidence = response['landmarkingConfidence']
Expand Down Expand Up @@ -321,12 +321,10 @@ def from_api_repr(cls, response):
:rtype: :class:`~google.cloud.vision.face.FaceImageProperties`
:returns: Instance populated with image property data.
"""
blurred_likelihood = getattr(Likelihood,
response['blurredLikelihood'])
underexposed_likelihood = getattr(Likelihood,
response['underExposedLikelihood'])
blurred = Likelihood[response['blurredLikelihood']]
underexposed = Likelihood[response['underExposedLikelihood']]

return cls(blurred_likelihood, underexposed_likelihood)
return cls(blurred, underexposed)

@property
def blurred(self):
Expand All @@ -349,7 +347,7 @@ def underexposed(self):
return self._underexposed_likelihood


class FaceLandmarkTypes(object):
class LandmarkTypes(Enum):
"""A representation of the face detection landmark types.
See:
Expand Down Expand Up @@ -413,7 +411,7 @@ def from_api_repr(cls, response_landmark):
:returns: Populated instance of `Landmark`.
"""
position = Position.from_api_repr(response_landmark['position'])
landmark_type = getattr(FaceLandmarkTypes, response_landmark['type'])
landmark_type = LandmarkTypes[response_landmark['type']]
return cls(position, landmark_type)

@property
Expand All @@ -440,4 +438,4 @@ class Landmarks(object):
def __init__(self, landmarks):
for landmark_response in landmarks:
landmark = Landmark.from_api_repr(landmark_response)
setattr(self, landmark.landmark_type.lower(), landmark)
setattr(self, landmark.landmark_type.value.lower(), landmark)
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
"""Likelihood constants returned from Vision API."""


class Likelihood(object):
from enum import Enum


class Likelihood(Enum):
"""A representation of likelihood to give stable results across upgrades.
See:
Expand Down
1 change: 1 addition & 0 deletions packages/google-cloud-vision/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@


REQUIREMENTS = [
'enum34',
'google-cloud-core >= 0.21.0, < 0.22dev',
]

Expand Down
1 change: 1 addition & 0 deletions packages/google-cloud-vision/tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ localdeps =
pip install --quiet --upgrade {toxinidir}/../core
deps =
{toxinidir}/../core
enum34
mock
pytest
covercmd =
Expand Down
9 changes: 5 additions & 4 deletions packages/google-cloud-vision/unit_tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,7 @@ def test_text_detection_from_source(self):
self.assertEqual(694, text[0].bounds.vertices[0].y_coordinate)

def test_safe_search_detection_from_source(self):
from google.cloud.vision.likelihood import Likelihood
from google.cloud.vision.safe import SafeSearchAnnotation
from unit_tests._fixtures import SAFE_SEARCH_DETECTION_RESPONSE

Expand All @@ -373,10 +374,10 @@ def test_safe_search_detection_from_source(self):
image_request = client._connection._requested[0]['data']['requests'][0]
self.assertEqual(IMAGE_SOURCE,
image_request['image']['source']['gcs_image_uri'])
self.assertEqual('VERY_UNLIKELY', safe_search.adult)
self.assertEqual('UNLIKELY', safe_search.spoof)
self.assertEqual('POSSIBLE', safe_search.medical)
self.assertEqual('VERY_UNLIKELY', safe_search.violence)
self.assertEqual(safe_search.adult, Likelihood.VERY_UNLIKELY)
self.assertEqual(safe_search.spoof, Likelihood.UNLIKELY)
self.assertEqual(safe_search.medical, Likelihood.POSSIBLE)
self.assertEqual(safe_search.violence, Likelihood.VERY_UNLIKELY)

def test_safe_search_no_results(self):
RETURNED = {
Expand Down
6 changes: 4 additions & 2 deletions packages/google-cloud-vision/unit_tests/test_face.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ def setUp(self):
self.FACE_ANNOTATIONS['faceAnnotations'][0])

def test_face_landmarks(self):
from google.cloud.vision.face import LandmarkTypes

self.assertEqual(0.54453093, self.face.landmarking_confidence)
self.assertEqual(0.9863683, self.face.detection_confidence)
self.assertTrue(hasattr(self.face.landmarks, 'left_eye'))
Expand All @@ -38,8 +40,8 @@ def test_face_landmarks(self):
self.face.landmarks.left_eye.position.y_coordinate)
self.assertEqual(0.0016593217,
self.face.landmarks.left_eye.position.z_coordinate)
self.assertEqual('LEFT_EYE',
self.face.landmarks.left_eye.landmark_type)
self.assertEqual(self.face.landmarks.left_eye.landmark_type,
LandmarkTypes.LEFT_EYE)

def test_facial_emotions(self):
from google.cloud.vision.face import Likelihood
Expand Down

0 comments on commit 279d583

Please sign in to comment.