Unable to include interactive python shell in flask app for GAE - python

I am using flask and the python 2.7 GAE SDK. I am trying to include an interactive shell, in my app.
I am trying to include the following interactive python shell in my app, so that I can interact with the GAE API while development - http://code.google.com/p/google-app-engine-samples/source/browse/trunk/shell/
As instructed I have copied the static/ and templates/ folders, and shell.py to the root of my app.
I have also added the url route ONLY to my app.yaml (shell)-
application: myflaskonappengineapp
version: 1
runtime: python27
api_version: 1
threadsafe: false
default_expiration: "5d"
builtins:
- appstats: on
- admin_redirect: on
- deferred: on
- remote_api: on
libraries:
- name: jinja2
version: "2.6"
- name: markupsafe
version: "0.15"
- name: lxml
version: "2.3"
- name: numpy
version: "1.6.1"
- name: PIL
version: "1.1.7"
- name: pycrypto
version: "2.3"
- name: setuptools
version: "0.6c11"
- name: webapp2
version: "2.3"
- name: webob
version: "1.1.1"
- name: yaml
version: "3.10"
inbound_services:
- warmup
handlers:
- url: /favicon.ico
static_files: application/static/img/favicon.ico
upload: application/static/img/favicon.ico
- url: /robots.txt
static_files: application/static/robots.txt
upload: application/static/robots.txt
- url: /_gae_mini_profiler/static
static_dir: packages/flaskext/gae_mini_profiler/static
- url: /static
static_dir: application/static
#interactive shell
- url: /shell
script: shell.py
- url: /remote_api
script: /opt/google_appengine/google/appengine/ext/remote_api/handler.py
- url: .*
script: application.app
However when I try to access the url /shell, I get a 404 error ? Do I need to configure flask also for routing ? Why is flask handling this url instead of shell.py?

You need to modify the shell.py to handle the URL '/shell' as well as app.yaml.
In particular, you need to edit the line 303 of the shell.py.
from
[('/', FrontPageHandler),
to
[('/shell', FrontPageHandler),
You also need to update your app.yaml like(add wildcard):
- url: /shell.*
script: shell.py
Please consider adding login:admin to the shell handler, otherwise you will open up the shell capability to everyone in the world.

Related

from oauth2client.contrib.appengine import AppAssertionCredentials ImportError: No module named appengine

We are trying to import AppAssertionCredentials from oauth2client. We are using python27 standard google app engine.
Our appengine_config.py is as follows
from google.appengine.ext import vendor
# Add any libraries installed in the "lib" folder.
vendor.add('lib')
The import statement in one of our modules is this.
# from oauth2client.appengine import AppAssertionCredentials
import httplib2
from oauth2client.client import GoogleCredentials
from oauth2client.contrib.appengine import AppAssertionCredentials
We checked the "lib" folder in our application. It has oauth2client in it. It also has contrib which has the appengine.py file. We did the following to install our requirements.
google-endpoints==4.8.0
google-endpoints-api-management==1.11.0
apiclient
firebase_admin
sendgrid==5.2.0
google.auth
jinja2
pytz
stripe
twilio
httplib2
oauth2client==3.0.0
GoogleAppEngineCloudStorageClient
For some reason when we execute endpointscfg.py it is throwing this error. The endpointscfg.py is from here.
from oauth2client.contrib.appengine import AppAssertionCredentials ImportError: No module named appengine
Updated
Our app.yaml is as follows -
runtime: python27
api_version: 1
threadsafe: true
instance_class: F2
automatic_scaling:
max_instances: 100
min_pending_latency: 30ms # default value
max_pending_latency: automatic
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
- name: pycrypto
version: 2.6
- name: PIL
version: 1.1.7
- name: ssl
version: 2.7.11
inbound_services:
- channel_presence
handlers:
- url: /stylesheets
static_dir: stylesheets
- url: /images
static_dir: images
- url: /javascripts
static_dir: javascripts
- url: /static
static_dir: static
application_readable: true
- url: /sakthihemaadmin
script: main.app
secure: always
- url: /sakthihemaadmindisplay
script: main.app
- url: /signup
script: main.app
secure: always
- url: /login
script: main.app
secure: always
- url: /forgot
script: main.app
secure: always
- url: /initprogram
script: main.app
secure: always
- url: /debugprogram
script: main.app
secure: always
# Endpoints handler: this must be /_ah/spi for Endpoints, NOT /_ah/api!
- url: /_ah/api/.*
# script: cloudendpointapi.APPLICATION
script: main.api
# Required for deferred
- url: /_ah/queue/deferred
script: google.appengine.ext.deferred.deferred.application
login: admin
- url: .*
script: main.app
We are not creating OpenAPI document but rather creating the client libraries as listed here.
endpointscfg.py get_discovery_doc
Instead of using endpointscfg.py get_discovery_doc please use $ lib/endpoints/endpointscfg.py .
I guess there was another version of endpointscfg.py in my environment that was causing the issue.
This helped me resolve the issue.

Google App Engine Error at yaml_error

Following error as shown in screen-shot,occurs when i try to run my helloworld.py script in Google App engine from terminal.
#My Operating system:Ubuntu.14.#
And Here is my file app.yaml.
application: #My project Id.
version: 1
runtime: python27
threadsafe: true
api_version: 1
handlers:
- url: /static
static_dir: static
- url: /
static_files: static/index.html
upload: static/index\.html
secure: always
- url: /_ah/spi/.*
script: helloworld_api.app
libraries:
- name: endpoints
version: 1.0
The Problem is that i can't deploy my code on local machine.
Any helps would be Appreciated.Thanks :)
I had check Online Yaml parser and it shows its Valid too.
You're missing the libraries line, the endpoints library are actually interpreted as part of the handlers list, which is incorrect.
Should look like this:
...
- url: /_ah/spi/.*
script: helloworld_api.app
libraries:
- name: endpoints
version: 1.0

google-app-engine The library "endpoints" is not supported.

I'm attempting to create endpoints for my google-app-engine in Python. I've followed the directions on https://developers.google.com/appengine/docs/python/endpoints/ and when I attempt to upload I am getting the following message:
Host: appengine.google.com Error parsing yaml file: the library
"endpoints" is not supported in "guestbook/app.yaml", line 22,
column 1
I believe I've got everything configured correctly, can anyone point me in the right direction? I believe having the library import for "endpoints" is critical for this to function.
Here is my app.yaml file:
application: xxxxxxx
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /_ah/spi/.*
script: enders.application
- url: /stylesheets
static_dir: stylesheets
- url: /.*
script: main.app
secure: always
libraries:
- name: endpoints
version: "1.0"
- name: pycrypto
version: "2.6"
- name: webapp2
version: latest
- name: jinja2
version: latest
Make sure you're using the most recent version of the AppEngine SDK. Cloud Endpoints was moved to a library in version 1.8.5.
lucemia pushed me down the right path. I had two versions of the SDK so I removed the older version and voila, problem solved.

login: admin is simply ignored

I have this app.yaml:
application: xyz
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /static
static_dir: static
- url: /admin/.*
script: admin.app
login: admin
- url: /.*
script: main.app
libraries:
- name: webapp2
version: latest
- name: jinja2
version: latest
when I access /admin/, both the dev server and appengine display the contents without asking for authentication. What gives?
I've run into this before. Try clearing your cookies. Clearing the cookies also helps if you accidentally forgot to check "log in as administrator" when the dev server prompts you for the fake login info.

Static files not working on GAE

I'm using the following yaml configuration:
application: xxxxxxxx
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /bootstrap
static_dir: static/bootstrap
- url: /fonts
static_dir: static/fonts
- url: /js
static_dir: static/js
- url: /images
static_dir: static/images
- url: /css
static_dir: static/css
- url: /favicon\.ico
static_files: ./static/favicon.ico
upload: ./static/favicon\.ico
- url: /.*
script: main.app
libraries:
- name: django
version: "1.3"
And my folder structure is like this:
\
....static
..........bootstrap
...................css
...................js
...................img
..........css
..........fonts
..........images
..........js
In the development environment it works fine (using latest version available), but when I deploy the app it doesn't. I know the filenames are case sensitive on gae, but I've already checked that.
What else can be wrong?
Please Help.
Thanks
As stupid it may seems but removing the project from GAE Launcher and adding it back again and re-deploy it solved the issue.

Categories

Resources