Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Configurar la Advanced I/O Function

Comencemos a programar la aplicación Alien City configurando el componente de función.

El directorio de la función Python (functions/alien_city_function) contiene los siguientes archivos:

  • El archivo principal de la función main.py

  • El archivo de configuración catalyst-config.json

  • El archivo requirements.txt para mencionar cualquier biblioteca externa que puedas agregar.

Agregarás código en el archivo principal de la función main.py.

Las dos APIs en la Advanced I/O function que manejan el enrutamiento entre el servidor y el Data Store son:

  • GET /alien: Para verificar si hay alienígenas presentes en una ciudad

  • POST /alien: Para reportar la presencia de alienígenas en una ciudad

Ahora agreguemos el código en el archivo de la función.

Copia el código que se muestra a continuación y pégalo en main.py en el directorio functions/alien_city_function de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu preferencia para trabajar con los archivos de la aplicación.

Nota: Por favor, revisa el código en esta sección para asegurarte de que lo comprendes completamente.
main.py
copy
import json
import zcatalyst_sdk
import logging
from flask import Request, make_response, jsonify
tableName = 'AlienCity'  # La tabla creada en el Data Store
columnName = 'CityName'  # La columna creada en la tabla
def handler(request: Request):
    try:
        app = zcatalyst_sdk.initialize()    # Inicializando el SDK de Catalyst
        logger = logging.getLogger()
        if request.path == "/alien" and request.method == 'POST':   # La API POST que reporta el encuentro con alienígenas para una ciudad en particular
            req_data = request.get_json()
            name = req_data.get('city_name')
            rowid = getAlienCountFromCatalystDataStore(name)    # Consulta la tabla del Catalyst Data Store y verifica si existe una fila para la ciudad dada
            if len(rowid) == 0:         # Si la fila no está presente, entonces se inserta una nueva fila
                logger.info("Alien alert!")     # Se escribe en los logs. Puedes ver este log desde Logs en la sección Monitor de la consola
                datastore_service = app.datastore()
                table_service = datastore_service.table(tableName)
                row_data = {
                    columnName:name
                    }
                table_service.insert_row(row_data)  # Inserta el nombre de la ciudad como una fila en la tabla del Catalyst Data Store
                response = make_response(jsonify({
                "message": "Thanks for reporting!"
            }), 200)
            else:       # Si la fila está presente, entonces se envía un mensaje indicando duplicación
                response = make_response(jsonify({
                "message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!"
            }), 200)
            return response
        elif request.path == "/alien" and request.method == 'GET':  # La API GET que verifica la tabla en busca de un encuentro con alienígenas en esa ciudad
            name = request.args.get('city_name')
            rowid = getAlienCountFromCatalystDataStore(name)    # Consulta la tabla del Catalyst Data Store y verifica si existe una fila para la ciudad dada
            if len(rowid) == 0:
                response = make_response({
                    "message": "Hurray! No alien encounters in this city yet!",
                    "signal": "negative"
                }, 200)
            else:
                response = make_response(jsonify({
                "message":  "Uh oh! Looks like there are aliens in this city!",
                "signal": "positive"
            }), 200)
            return response    
        else:
            response = make_response("Error. Invalid Request")
            response.status_code = 404
            return response
    except Exception as err:    # Envía una respuesta de error
        logger.error(f"Exception in AlienCityAIO :{err}")
        response = make_response(jsonify({
                 "error": "Internal server error occurred. Please try again in some time."
            }), 500)
        return response
def getAlienCountFromCatalystDataStore(cityname):   # Verifica si ya se reportó un encuentro con alienígenas para la ciudad dada consultando la tabla del Data Store
        app = zcatalyst_sdk.initialize()   
        zcql_service = app.zcql()
        query = f"SELECT * FROM {tableName} WHERE {columnName} = '{cityname}'"
        output = zcql_service.execute_query(query)
        return output
View more

La Advanced I/O function está ahora configurada. Discutiremos la arquitectura de la función y el client en la siguiente sección.


Última actualización 2026-03-20 21:51:56 +0530 IST