# Tools and Tips - Google App Engine - Google Code

English ▼
Skip to page content Skip to main navigation
e.g. "templates" or "datastore"

# Tools and Tips

This page summarizes many useful tools and resources for working in App Engine. Use this document to find tools related to the following common uses or APIs.

### App Development

Name | What it is, and why use it? | More Information
--- | --- | ---

AppStats

Language: Python and Java
Description: Measure the performance of your app with Appstats. Appstats is a suite of App and API call profiling tools that record events and provide a web-based administrative interface for browsing statistics.

More Info:

- Appstats for Python
- Appstats for Java
- Easy Performance Profiling with Appstats (Google App Engine Blog)

Datastore SQLite Stub

Language: Python Only
Description: If you store a lot of data in your datastore, you can improve performance and startup times by switching to SQLite as the backend for your local datastore stub.

More Info:

- Switching to SQLite for your local Datstore
- Announcing the SQLite datastore stub... (Nick's Blog)

Local Unit Testing

Language: Java Only
Description: Write tests that use local service implementations that are bundled with the SDK.

More Info:

- Local Unit Testing

Samples for Google App Engine

Language: Python Only
Description: Check out sample applications that run on App Engine. You may check out samples from the trunk of the project.

More Info:

- Samples for Google App Engine Project Page
- Samples for Google App Engine Wiki

### App Management

Name | What it is, and why use it? | More Information
--- | --- | ---

Capabilities API

Language: Python and Java
Description: Use the Capabilities API to identify API outages and scheduled downtime.

More Info:

- Capabilities API package summary (Java)
- Capabilities API source (Python)

DoS Protection Service Configuration

Language: Python and Java
Description: Protect your application from running out of quota when subjected to DoS attacks or similar events with App Engine Denial of Service Protection Service. You can update the DoS configuration when you upload your application to App Engine, or you can update just the DoS configuration without uploading the rest of your application.

More Info:

- Uploading DoS Configuration (Java)
- Uploading DoS Configuration (Python)

Zipserve

Language: Python Only
Description: Use Zipserve to allow your app to serve static files from a zipfile. This is useful for apps that need to serve a 1000+ small static files while staying within the 1000-file limit.

More Info:

- Zipserve source

### App Performance

Name | What it is, and why use it? | More Information
--- | --- | ---

AppStats

Language: Python and Java
Description: Measure the performance of your app with Appstats. Appstats is a suite of App and API call profiling tools that record events and provide a web-based administrative interface for browsing statistics.

More Info:

- Appstats for Python
- Appstats for Java
- Easy Performance Profiling with Appstats (Google App Engine Blog)

Precompilation

Language: Python and Java
Description: Enhance the performance of your app using precompilation. Precompilation is already enabled by default, but you have the option to disable it.

More Info:

- Python Precompilation
- Java Precompilation

### App Testing

Name | What it is, and why use it? | More Information
--- | --- | ---

Local Unit Testing

Language: Java Only
Description: Write tests that use local service implementations that are bundled with the SDK.

More Info:

- Local Unit Testing

### Blobstore API

Name | What it is, and why use it? | More Information
--- | --- | ---

Blobreader and BlobstoreInputStream

Language: Python and Java
Description: Read Blobs via a file-like interface using BlobReader in Python and/or BlobstoreInputStream in Java.

More Info:

- BlobReader class (Python)
- BlobstoreInputStream class summary (Java)

### Datastore

Name | What it is, and why use it? | More Information
--- | --- | ---

Bulk Loader

Language: Python and Java
Description: Upload and download data to and from your application's datastore using the bulk loader tool. Python developers can use it directly from the `appcfg.py` command. Java developers can use `appcfg.py` from a Java app by installing the Java version of the remote_api handler.

More Info:

- Uploading and Downloading Data

Datastore Statistics

Language: Python and Java
Description: View statistics about the data stored for an application using Datastore Statistics. You can view these statistics from the Administration Console under Datastore > Statistics or access these values programmatically within your application.

More Info:

- Datastore Statistics in Python
- Datastore Statistics in Java

Datastore SQLite Stub

Language: Python Only
Description: If you store a lot of data in your datastore, you can improve performance and startup times by switching to SQLite as the backend for your local datastore stub.

More Info:

- Switching to SQLite for your local Datstore
- Announcing the SQLite datastore stub... (Nick's Blog)

Development Console

Language: Python and Java
Description: Use the development console included in the development web server to browse the local datastore.

More Info:

- The Development Console (Python)
- The Development Console (Java)

Expando Class

Language: Python Only
Description: Use dynamic properties with datastore entities.

More Info:

- The Expando Class

Mapper API

Language: Python and Java
Description: Manipulate data on a large scale using the Mapper API, which is one component of the MapReduce toolkit.

More Info:

- Introducing the Mapper API
- Exploring the new mapper API in Python (Nick's blog)
- Using the Java mapper framework (Ikai Lan's blog)
- AppEngine Mapreduce Project Page.

Remote API

Language: Python Only
Description: Access the datastore remotely while still using the standard familiar APIs with the remote_api module. This is useful when you need to manipulate the datastore in ways that are not well suited to the request/response model used for serving web applications.

More Info:

- Accessing the datastore remotely with remote_api

Transactional Tasks

Language: Python and Java
Description: Enqueue tasks as part of a datastore transaction using Transactional Tasks such that the task is only enqueued—and guaranteed to be enqueued—if the transaction is committed successfully.

More Info:

- Tasks within Transactions (Python)
- Tasks within Transactions (Java)

### Mail API

Name | What it is, and why use it? | More Information
--- | --- | ---

Ereporter

Language: Python Only
Description: Receive exception reports from your application via email by using the `google.appengine.ext.ereporter` package.

More Info:

- Recording Exceptions with ereporter

### Memcache

Name | What it is, and why use it? | More Information
--- | --- | ---

Development Console

Language: Python and Java
Description: Use the development console included in the development web server to browse the local datastore.

More Info:

- The Development Console (Python)
- The Development Console (Java)

### Task Queue

Name | What it is, and why use it? | More Information
--- | --- | ---

Deferred Library

Language: Python Only
Description: Execute arbitrary functions using the Task Queue. This can be useful for one-off or ad-hoc tasks. The Deferred library lets you bypass all the work of setting up dedicated task handlers and serializing/deserializing parameters by exposing a simple function, `deferred.defer()`.

More Info:

- Background work with the deferred library

Task Queue Storage Limits

Language: Python and Java
Description: Configure your task queue to specify or limit the total amount of storage task data that is allowed to be consumed over all queues.

More Info:

- Python Task Queue Configuration
- Java Task Queue Configuration

Transactional Tasks

Language: Python and Java
Description: Enqueue tasks as part of a datastore transaction using Transactional Tasks such that the task is only enqueued—and guaranteed to be enqueued—if the transaction is committed successfully.

More Info:

- Tasks within Transactions (Python)
- Tasks within Transactions (Java)

### Users API

Name | What it is, and why use it? | More Information
--- | --- | ---

OAuth

Language: Python and Java
Description: Allow users to grant a third party or application limited permission to access your app on his or her behalf without sharing credentials using the OAuth protocol.

More Info:

- OAuth for Python Overview
- OAuth for Java Overview

OpenID

Language: Python and Java
Description: Allow users to authenticate using their OpenID credentials by selecting Federated Login" instead of "Google Accounts" at creation time.

More Info:

- Using Federated Authentication via OpenID
- Using OpenID authentication (Nick's Blog)