示例#1
0
class TransactionUpdateRequest(messages.Message):
    type = messages.StringField(1)
    payment_type = messages.StringField(2)
    amount = messages.FloatField(3)
    transaction_date = messages.IntegerField(4)
    borrower_id = messages.StringField(5)
    interest_rate = messages.FloatField(6)
示例#2
0
class MoveRequest(messages.Message):
  board_id = messages.StringField(1)
  item_id = messages.StringField(2)
  x = messages.IntegerField(3)
  y = messages.IntegerField(4)
  z = messages.IntegerField(5)
  client_id = messages.StringField(6)
  lock_token = messages.StringField(7)
  is_release = messages.BooleanField(8, default=False)
示例#3
0
class TransactionResponse(messages.Message):
    type = messages.StringField(1)
    payment_type = messages.StringField(2)
    amount = messages.FloatField(3)
    transaction_date = messages.IntegerField(4)
    borrower_id = messages.StringField(5)
    borrower_name = messages.StringField(6)
    interest_rate = messages.FloatField(7)
    transaction_id = messages.StringField(8)
class OverviewResponse(messages.Message):
    borrower_name = messages.StringField(1)
    outstanding_principal = messages.FloatField(2)
    outstanding_interest = messages.FloatField(3)
    paid_interest = messages.FloatField(4)
    paid_principal = messages.FloatField(5)
    date = messages.IntegerField(6)
    last_transaction_date = messages.IntegerField(7)
    borrower_id = messages.StringField(8)
class MultipleParameterEndpoint(remote.Service):
    @endpoints.method(endpoints.ResourceContainer(
        message_types.VoidMessage,
        parent = messages.StringField(1, required=True),
        query = messages.StringField(2, required=False),
        child = messages.StringField(3, required=True),
        queryb = messages.StringField(4, required=True),
        querya = messages.StringField(5, required=True),
    ), message_types.VoidMessage, name='param', path='param/{parent}/{child}')
    def param(self, request):
        pass
    def testUrlGeneration(self):
        IATA_RESOURCE = resource_container.ResourceContainer(
            iata=messages.StringField(1))

        class IataParam(messages.Message):
            iata = messages.StringField(1)

        class Airport(messages.Message):
            iata = messages.StringField(1, required=True)
            name = messages.StringField(2, required=True)

        @api_config.api(name='iata', version='1.6.9')
        class IataApi(remote.Service):
            @api_config.method(IATA_RESOURCE,
                               Airport,
                               path='airport/{iata}',
                               http_method='GET',
                               name='get_airport')
            def get_airport(self, request):
                return Airport(iata=request.iata, name='irrelevant')

        doc = self.generator.get_discovery_doc([IataApi],
                                               hostname='iata.appspot.com')
        assert doc['baseUrl'] == 'https://iata.appspot.com/_ah/api/iata/v1/'
        assert doc['rootUrl'] == 'https://iata.appspot.com/_ah/api/'
        assert doc['servicePath'] == 'iata/v1/'
示例#7
0
        class AllTypes(messages.Message):
            """Contains all field types."""
            class SimpleEnum(messages.Enum):
                """Simple enumeration type."""
                VAL1 = 1
                VAL2 = 2

            bool_value = messages.BooleanField(1,
                                               variant=messages.Variant.BOOL)
            bytes_value = messages.BytesField(2,
                                              variant=messages.Variant.BYTES)
            double_value = messages.FloatField(3,
                                               variant=messages.Variant.DOUBLE)
            enum_value = messages.EnumField(SimpleEnum, 4)
            float_value = messages.FloatField(5,
                                              variant=messages.Variant.FLOAT)
            int32_value = messages.IntegerField(6,
                                                variant=messages.Variant.INT32)
            int64_value = messages.IntegerField(7,
                                                variant=messages.Variant.INT64)
            string_value = messages.StringField(
                8, variant=messages.Variant.STRING)
            uint32_value = messages.IntegerField(
                9, variant=messages.Variant.UINT32)
            uint64_value = messages.IntegerField(
                10, variant=messages.Variant.UINT64)
            int_value = messages.IntegerField(11)  # Default variant is INT64.
            datetime_value = message_types.DateTimeField(12)
            repeated_datetime_value = message_types.DateTimeField(
                13, repeated=True)
    def testDefaultScope(self):
        IATA_RESOURCE = resource_container.ResourceContainer(
            iata=messages.StringField(1))

        class IataParam(messages.Message):
            iata = messages.StringField(1)

        class Airport(messages.Message):
            iata = messages.StringField(1, required=True)
            name = messages.StringField(2, required=True)

        @api_config.api(name='iata',
                        version='v1',
                        auth_level=api_config.AUTH_LEVEL.REQUIRED,
                        allowed_client_ids=users_id_token.SKIP_CLIENT_ID_CHECK)
        class IataApi(remote.Service):
            @api_config.method(IATA_RESOURCE,
                               Airport,
                               path='airport/{iata}',
                               http_method='GET',
                               name='get_airport')
            def get_airport(self, request):
                return Airport(iata=request.iata, name='irrelevant')

        doc = self.generator.get_discovery_doc([IataApi])
        auth = doc['auth']
        assert auth == {
            'oauth2': {
                'scopes': {
                    'https://www.googleapis.com/auth/userinfo.email': {
                        'description': 'View your email address'
                    }
                }
            }
        }
示例#9
0
        class AllFields(messages.Message):
            """Documentation for AllFields."""
            string = messages.StringField(1)
            string_required = messages.StringField(2, required=True)
            string_default_required = messages.StringField(3,
                                                           required=True,
                                                           default='Foo')
            string_repeated = messages.StringField(4, repeated=True)

            class SimpleEnum(messages.Enum):
                """Simple enumeration type."""
                VAL1 = 1
                VAL2 = 2

            enum_value = messages.EnumField(SimpleEnum,
                                            5,
                                            default=SimpleEnum.VAL2)
def make_collection(cls):
    return type(
        'Collection_{}'.format(cls.__name__),
        (messages.Message,),
        {
            'items': messages.MessageField(cls, 1, repeated=True),
            'nextPageToken': messages.StringField(2)
        })
示例#11
0
class AllBasicFields(messages.Message):
    """Contains all field types."""

    bool_value = messages.BooleanField(1, variant=messages.Variant.BOOL)
    bytes_value = messages.BytesField(2, variant=messages.Variant.BYTES)
    double_value = messages.FloatField(3, variant=messages.Variant.DOUBLE)
    float_value = messages.FloatField(5, variant=messages.Variant.FLOAT)
    int32_value = messages.IntegerField(6, variant=messages.Variant.INT32)
    int64_value = messages.IntegerField(7, variant=messages.Variant.INT64)
    string_value = messages.StringField(8, variant=messages.Variant.STRING)
    uint32_value = messages.IntegerField(9, variant=messages.Variant.UINT32)
    uint64_value = messages.IntegerField(10, variant=messages.Variant.UINT64)
    sint32_value = messages.IntegerField(11, variant=messages.Variant.SINT32)
    sint64_value = messages.IntegerField(12, variant=messages.Variant.SINT64)
    datetime_value = message_types.DateTimeField(14)
    def testMultipleClassService(self):
        '''If multiple classes of a single service are passed to the
    generator, the document should show all methods from all
    classes.'''
        class Airport(messages.Message):
            iata = messages.StringField(1, required=True)
            name = messages.StringField(2, required=True)

        IATA_RESOURCE = resource_container.ResourceContainer(
            iata=messages.StringField(1, required=True))

        class AirportList(messages.Message):
            airports = messages.MessageField(Airport, 1, repeated=True)

        @api_config.api(name='iata', version='v1')
        class ServicePart1(remote.Service):
            @api_config.method(message_types.VoidMessage,
                               AirportList,
                               path='airports',
                               http_method='GET',
                               name='list_airports')
            def list_airports(self, request):
                return AirportList(airports=[
                    Airport(iata=u'DEN', name=u'Denver International Airport'),
                    Airport(iata=u'SEA',
                            name=u'Seattle Tacoma International Airport'),
                ])

        @api_config.api(name='iata', version='v1')
        class ServicePart2(remote.Service):
            @api_config.method(IATA_RESOURCE,
                               Airport,
                               path='airport/{iata}',
                               http_method='GET',
                               name='get_airport')
            def get_airport(self, request):
                airports = {'DEN': 'Denver International Airport'}
                if request.iata not in airports:
                    raise endpoints.NotFoundException()
                return Airport(iata=request.iata, name=airports[request.iata])

        doc = self.generator.get_discovery_doc([ServicePart1, ServicePart2])
        self.assertItemsEqual(doc['methods'].keys(),
                              [u'get_airport', u'list_airports'])
    def testCustomScope(self):
        SCOPE = endpoints_types.OAuth2Scope(
            scope='https://www.googleapis.com/auth/santa',
            description='Access your letter to Santa')

        IATA_RESOURCE = resource_container.ResourceContainer(
            iata=messages.StringField(1))

        class IataParam(messages.Message):
            iata = messages.StringField(1)

        class Airport(messages.Message):
            iata = messages.StringField(1, required=True)
            name = messages.StringField(2, required=True)

        @api_config.api(name='iata',
                        version='v1',
                        scopes=[SCOPE],
                        auth_level=api_config.AUTH_LEVEL.REQUIRED,
                        allowed_client_ids=users_id_token.SKIP_CLIENT_ID_CHECK)
        class IataApi(remote.Service):
            @api_config.method(IATA_RESOURCE,
                               Airport,
                               path='airport/{iata}',
                               http_method='GET',
                               name='get_airport')
            def get_airport(self, request):
                return Airport(iata=request.iata, name='irrelevant')

        doc = self.generator.get_discovery_doc([IataApi])
        auth = doc['auth']
        assert auth == {
            'oauth2': {
                'scopes': {
                    SCOPE.scope: {
                        'description': SCOPE.description
                    }
                }
            }
        }
示例#14
0
class EchoResponse(messages.Message):
    """A proto Message that contains a simple string field."""
    message = messages.StringField(1)
示例#15
0
class Foo(messages.Message):
    name = messages.StringField(1)
    value = messages.IntegerField(2, variant=messages.Variant.INT32)
示例#16
0
class Bar(messages.Message):
    name = messages.StringField(1, default='Jimothy')
    value = messages.IntegerField(2,
                                  default=42,
                                  variant=messages.Variant.INT32)
    active = messages.BooleanField(3, default=True)
示例#17
0
        with open(test_file) as f:
            return json.loads(f.read())
    except IOError as e:
        print 'Could not find expected output file ' + test_file
        raise e


class Foo(messages.Message):
    name = messages.StringField(1)
    value = messages.IntegerField(2, variant=messages.Variant.INT32)


FooCollection = make_collection(Foo)
FooResource = endpoints.ResourceContainer(
    Foo,
    id=messages.StringField(1, required=True),
)
FooIdResource = endpoints.ResourceContainer(
    message_types.VoidMessage,
    id=messages.StringField(1, required=True),
)
FooNResource = endpoints.ResourceContainer(
    message_types.VoidMessage,
    n=messages.IntegerField(1, required=True, variant=messages.Variant.INT32),
)


@endpoints.api(name='foo',
               version='v1',
               audiences=['audiences'],
               title='The Foo API',
示例#18
0
def add_event_request_type():
    """"Return the request object for addEvent API method"""

    return endpoints.ResourceContainer(
        AddEventRequest, customerId=messages.StringField(1))
class ReviewMessage(messages.Message):
    message = messages.StringField(1)
class ReviewRequest(messages.Message):
    product_id = messages.IntegerField(1, required=True)
    name = messages.StringField(2, required=True)
    review = messages.StringField(3, required=True)
    stars = messages.IntegerField(4, required=True)
示例#21
0
class EchoRequest(messages.Message):
    message = messages.StringField(1)
class Recursive(messages.Message):
    """Message which can contain itself."""
    desc = messages.StringField(1)
    subrecursive = messages.MessageField('Recursive', 2, repeated=True)
示例#23
0
class Greeting(messages.Message):
    """Greeting that stores a message."""
    message = messages.StringField(1)
    def testAllFieldTypes(self):
        class PutRequest(messages.Message):
            """Message with just a body field."""
            body = messages.MessageField(AllFields, 1)

        # pylint: disable=invalid-name
        class ItemsPutRequest(messages.Message):
            """Message with path params and a body field."""
            body = messages.MessageField(AllFields, 1)
            entryId = messages.StringField(2, required=True)

        class ItemsPutRequestForContainer(messages.Message):
            """Message with path params and a body field."""
            body = messages.MessageField(AllFields, 1)

        items_put_request_container = resource_container.ResourceContainer(
            ItemsPutRequestForContainer,
            entryId=messages.StringField(2, required=True))

        # pylint: disable=invalid-name
        class EntryPublishRequest(messages.Message):
            """Message with two required params, one in path, one in body."""
            title = messages.StringField(1, required=True)
            entryId = messages.StringField(2, required=True)

        class EntryPublishRequestForContainer(messages.Message):
            """Message with two required params, one in path, one in body."""
            title = messages.StringField(1, required=True)

        entry_publish_request_container = resource_container.ResourceContainer(
            EntryPublishRequestForContainer,
            entryId=messages.StringField(2, required=True))

        class BooleanMessageResponse(messages.Message):
            result = messages.BooleanField(1, required=True)

        @api_config.api(name='root',
                        hostname='example.appspot.com',
                        version='v1',
                        description='This is an API')
        class MyService(remote.Service):
            """Describes MyService."""
            @api_config.method(message_types.VoidMessage,
                               BooleanMessageResponse,
                               path='toplevel:withcolon',
                               http_method='GET',
                               name='toplevelwithcolon')
            def toplevel(self, unused_request):
                return BooleanMessageResponse(result=True)

            @api_config.method(AllFields,
                               message_types.VoidMessage,
                               path='entries',
                               http_method='GET',
                               name='entries.get')
            def entries_get(self, unused_request):
                """All field types in the query parameters."""
                return message_types.VoidMessage()

            @api_config.method(ALL_FIELDS_AS_PARAMETERS,
                               message_types.VoidMessage,
                               path='entries/container',
                               http_method='GET',
                               name='entries.getContainer')
            def entries_get_container(self, unused_request):
                """All field types in the query parameters."""
                return message_types.VoidMessage()

            @api_config.method(PutRequest,
                               BooleanMessageResponse,
                               path='entries',
                               name='entries.put')
            def entries_put(self, unused_request):
                """Request body is in the body field."""
                return BooleanMessageResponse(result=True)

            @api_config.method(AllFields,
                               message_types.VoidMessage,
                               path='process',
                               name='entries.process')
            def entries_process(self, unused_request):
                """Message is the request body."""
                return message_types.VoidMessage()

            @api_config.method(message_types.VoidMessage,
                               message_types.VoidMessage,
                               name='entries.nested.collection.action',
                               path='nested')
            def entries_nested_collection_action(self, unused_request):
                """A VoidMessage for a request body."""
                return message_types.VoidMessage()

            @api_config.method(AllFields,
                               AllFields,
                               name='entries.roundtrip',
                               path='roundtrip')
            def entries_roundtrip(self, unused_request):
                """All field types in the request and response."""
                pass

            # Test a method with a required parameter in the request body.
            @api_config.method(EntryPublishRequest,
                               message_types.VoidMessage,
                               path='entries/{entryId}/publish',
                               name='entries.publish')
            def entries_publish(self, unused_request):
                """Path has a parameter and request body has a required param."""
                return message_types.VoidMessage()

            @api_config.method(entry_publish_request_container,
                               message_types.VoidMessage,
                               path='entries/container/{entryId}/publish',
                               name='entries.publishContainer')
            def entries_publish_container(self, unused_request):
                """Path has a parameter and request body has a required param."""
                return message_types.VoidMessage()

            # Test a method with a parameter in the path and a request body.
            @api_config.method(ItemsPutRequest,
                               message_types.VoidMessage,
                               path='entries/{entryId}/items',
                               name='entries.items.put')
            def items_put(self, unused_request):
                """Path has a parameter and request body is in the body field."""
                return message_types.VoidMessage()

            @api_config.method(items_put_request_container,
                               message_types.VoidMessage,
                               path='entries/container/{entryId}/items',
                               name='entries.items.putContainer')
            def items_put_container(self, unused_request):
                """Path has a parameter and request body is in the body field."""
                return message_types.VoidMessage()

        api = json.loads(self.generator.pretty_print_config_to_json(MyService))

        try:
            pwd = os.path.dirname(os.path.realpath(__file__))
            test_file = os.path.join(pwd, 'testdata', 'discovery',
                                     'allfields.json')
            with open(test_file) as f:
                expected_discovery = json.loads(f.read())
        except IOError as e:
            print 'Could not find expected output file ' + test_file
            raise e

        test_util.AssertDictEqual(expected_discovery, api, self)
class Review(messages.Message):
    name = messages.StringField(1)
    review = messages.StringField(2)
    stars = messages.IntegerField(3)
    date = message_types.DateTimeField(4)
 class ItemsPutRequest(messages.Message):
     """Message with path params and a body field."""
     body = messages.MessageField(AllFields, 1)
     entryId = messages.StringField(2, required=True)
示例#27
0
class AddEventRequest(messages.Message):
    """"Request object for addEvent API method"""

    content_id = messages.StringField(1)
    time = messages.FloatField(2)
    user_info = messages.MessageField(UserInfo.__name__, 3)
示例#28
0
"""This is a sample Airport Information service implemented using
Google Cloud Endpoints Frameworks for Python."""

# [START imports]
import endpoints
from endpoints import message_types
from endpoints import messages
from endpoints import remote

from data import AIRPORTS
# [END imports]

# [START messages]
IATA_RESOURCE = endpoints.ResourceContainer(
    iata=messages.StringField(1, required=True)
)


class Airport(messages.Message):
    iata = messages.StringField(1, required=True)
    name = messages.StringField(2, required=True)


IATA_AIRPORT_RESOURCE = endpoints.ResourceContainer(
    Airport,
    iata=messages.StringField(1, required=True)
)


class AirportList(messages.Message):
示例#29
0
class UserInfo(messages.Message):
    """"User information of request object for addEvent API method"""

    ip = messages.StringField(1)
    user_agent = messages.StringField(2)
    location = messages.StringField(3)
示例#30
0
class Airport(messages.Message):
    iata = messages.StringField(1, required=True)
    name = messages.StringField(2, required=True)