¿Puede un servicio / módulo predeterminado en una aplicación de Google App Engine ser hermano de uno no predeterminado en términos de estructura de carpetas?

Actualización: los modules se llaman services estos días.

Me gustaría organizar los módulos de mi proyecto en varias subcarpetas, donde cada subcarpeta contiene el código correspondiente a cada módulo. En particular, me gustaría que la carpeta que contiene el módulo predeterminado esté en el mismo nivel que otros módulos (es decir, todos son hermanos). Estoy siguiendo el diagtwig que se muestra en la documentación de los módulos :

diagrama

Sin embargo, lo que me confunde es la afirmación ” Importante: el archivo app.yaml debe estar ubicado en el directorio raíz de la aplicación “. ¿Esto implica que el módulo predeterminado (y su app.yaml) debe estar en el directorio raíz del proyecto y, por lo tanto, ser el padre de los módulos no predeterminados?

Todos los módulos pueden estar uno al lado del otro. El .yaml para cada uno puede estar dentro del module dir.

La nota sobre el archivo app.yaml es engañosa, realmente se aplica solo a aplicaciones de un solo módulo (muchas piezas de la documentación no se actualizaron para aplicaciones de varios módulos).

El archivo de configuración del módulo default ni siquiera tiene que llamarse app.yaml (o su directorio llamado default ). Mantendría los archivos de configuración a nivel de aplicación ( cron.yaml , dispatch.yaml , queue.yaml e index.yaml ) en el nivel superior, y finalmente los vinculará a los módulos predeterminados (u otros) según sea necesario (algunos las herramientas pueden quejarse de lo contrario).

Aquí está, por ejemplo, la estructura que obtuve para una de mis aplicaciones (el directorio main contiene el módulo default ):

 cron.yaml dispatch.yaml queue.yaml index.yaml main/cron.yaml -> ../cron.yaml main/index.yaml -> ../index.yaml main/main.yaml main/queue.yaml -> ../queue.yaml buildin/buildin.yaml buildin/index.yaml -> ../index.yaml buildin/queue.yaml-> ../queue.yaml 

Solo necesita prestar atención cuando invoque las herramientas relacionadas. Esta es mi hoja de referencia para esa aplicación, ejecutada desde el directorio de la aplicación, parte de ella también se refleja en la configuración del proyecto pycharm (estoy ejecutando el servidor de desarrollo dentro de pycharm):

 appcfg.py update main/main.yaml buildin/buildin.yaml appcfg.py update_dispatch . appcfg.py update_indexes -A  main appcfg.py update_cron -A  . appcfg.py update_queues -A  . 

Para ejecutar el devserver:

 dev_appserver.py --host 0.0.0.0 --log_level=debug dispatch.yaml main/main.yaml buildin/buildin.yaml 

Actualización: agregué algunos de mis archivos de configuración, según lo solicitado.

El archivo dispatch.yaml , que se ocupa del enrutamiento del módulo buildin tanto en el dominio de appspot como en mi dominio personalizado (todo lo demás se enruta automáticamente al módulo predeterminado):

 application:  dispatch: - url: "buildin.my_domain.com/*" module: buildin - url: "buildin-dot-my_app.appspot.com/*" module: buildin - url: "*/buildin/*" module: buildin 

El archivo main.yaml :

 application: my_app module: default version: 1 runtime: python27 api_version: 1 threadsafe: true handlers: - url: /(.*\.min\.css)$ static_files: stylesheets/\1 upload: stylesheets/.*\.min\.css$ secure: always - url: /(.*\.(ico|gif|png|jpg|svg))$ static_files: images/\1 upload: images/.*\.(ico|gif|png|jpg|svg)$ secure: always - url: .* script: main.app secure: always libraries: - name: webapp2 version: "2.5.2" - name: jinja2 version: "2.6" - name: pycrypto version: "2.6" 

El archivo buildin.yaml :

 application: my_app module: buildin version: 1 runtime: python27 api_version: 1 threadsafe: true instance_class: B2 handlers: - url: /(.*\.min\.js)$ static_files: scripts/\1 upload: scripts/.*\.min\.js$ secure: always - url: /(.*\.min\.css)$ static_files: stylesheets/\1 upload: stylesheets/.*\.min\.css$ secure: always - url: /(.*\.(ico|gif|png|jpg|svg))$ static_files: images/\1 upload: images/.*\.(ico|gif|png|jpg|svg)$ secure: always - url: /buildin/cron* script: buildin.app login: admin - url: .* script: buildin.app secure: always libraries: - name: webapp2 version: "2.5.2" - name: jinja2 version: "2.6" - name: pycrypto version: "2.6"