0
class Patient(EndpointsModel): 
    user = EndpointsUserProperty(required=True, raise_unauthorized=True) 
    date_of_birth = EndpointsDateProperty() 
    age = ndb.IntegerProperty() 

    def calculate_age(self): 
     today = date.today() 
     birthday = self.date_of_birth 
     self.age = today.year - birthday.year - ((today.month, today.day) < (birthday.month , birthday.day)) 

    def _pre_put_hook(self): 
     if self.date_of_birth: 
      self.calculate_age() 

.... 
api_root = endpoints.api(name='ffsapi', version='vGDL', 
        description='API for whole app') 


@api_root.api_class(resource_name="patient") 
class PatientApi(remote.Service): 

    @Patient.method(
        request_fields=('name', 'date_of_birth'), 
        name='insert', 
        path='patient', 
        http_method='POST') 
    def insert_patient(self,patient): 
     if patient.date_of_birth: # TODO find a better way 
      if patient.date_of_birth.year <1900: 
       raise endpoints.BadRequestException('date <= 1900') 
     patient.put() 
     return patient 

    @Patient.query_method(user_required=True, 
          query_fields=['name'], 
          name='query', 
          path='patient') 
    def query_patient(self,query): 
     return query 
.... 
application = endpoints.api_server([api_root], restricted=False) 

Ceci est mon fichier lorsque j'exécute endpointscfg.py il me dit que ce n'est pas un service ProtoRPC. J'ai essayé l'application, api_root, et ffsapi. Le code déploie bien fonctionne bien ne peut pas obtenir la compilation des bibliothèques pour fonctionner.Impossible d'obtenir des bibliothèques pour compiler des points de terminaison cloud python

Voici le fichier YAML si cela aide

application: ******(im just hiding it) 
version: 1 
runtime: python27 
api_version: 1 
threadsafe: yes 

handlers: 
- url: /favicon\.ico 
    static_files: favicon.ico 
    upload: favicon\.ico 

- url: .* 
    script: main.application 

# Endpoints handler 
- url: /_ah/spi/.* 
    script: main.application 


libraries: 
- name: webapp2 
    version: "2.5.2" 
# Needed for endpoints/users_id_token.py. 
- name: pycrypto 
    version: "2.6" 
- name: endpoints 
    version: 1.0 

Répondre

0

Dans ce cas, parce que vous êtes seulement la mise en œuvre de l'API avec une classe, vous devez décorer la classe PatientApi avec le décorateur @endpoints.api au lieu d'appeler endpoints.api() séparément et affecter le résultat à une variable. Ensuite, vous souhaitez créer le serveur API avec:

application = endpoints.api_server([PatientApi], restricted=False)

Enfin, pour générer la spécification Open API utilisant endpointscfg.py, vous passerais dans main.PatientApi (en supposant que votre fichier source est appelé main.py) .