1.9.5


git-svn-id: http://googleappengine.googlecode.com/svn/trunk@436 80f5ef21-4148-0410-bacc-cfb02402ada8
App Engine Python SDK version 1.9.5

git-svn-id: http://googleappengine.googlecode.com/svn/trunk@437 80f5ef21-4148-0410-bacc-cfb02402ada8
Add lint_blacklist.txt

Test Plan: None
Add README.md

Test Plan: None
Fix small README.md formatting issue

Test Plan: None
HE COMES

Test Plan: None
Fix task queue behavior when running behind nginx

Summary:
This change assigns task queue requests with an unrecognized Host header to the
default module instead of dropping them.

Test Plan: None. We've been using this patch for months now.

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9086
Add change detection logging to the mtime and inotify file watchers

Summary:
The mtime and inotify file watchers will now emit a log message containing the
path of the changed file that is triggering a reload.

I'll do the same for the fsevents file watcher when I restore it but I'm not
going to touch the win32 file watcher.

Test Plan:
I tested the mtime file watcher on my Mac.

1. Started dev_appserver.py with the usual arguments for serving webapp
2. Ran `touch Makefile` and saw the log message "Detected change in Makefile"
3. Deleted and re-added the Makefile and saw the same log message for both
4. Ran `touch content/models.py` and saw log messages for content, content/models.py, and genfiles/kake-server.log

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9084
Ignore changes in Emacs files prefixed with ".#"

Test Plan:
1. Start dev_appserver.py
2. `touch Makefile`, see a reload
3. `touch ".#foo"`, don't see a reload

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9089
Restore the FSEvents-based file watcher.

Summary:
In this change I did the following:

1. Restored fsevents_file_watcher.py from the last upstream revision before it was deleted
2. Brought it up-to-date with the latest upstream revision of the SDK
3. Added the logging that I added for the other file watchers in D9084
4. Integrated it with watcher_common.ignore_file()

I did not integrate it with watcher_common._IGNORED_DIRS because, as it turns
out, none of the other file watchers respect that at all. Our plan is to
introduce new ignoring logic that respects app.yaml's skip_files directives and
works across all file watchers, so this is just an intermediate situation.

Test Plan:
1. Removed pyobjc-framework-FSEvents from my system, started dev_appserver.py, saw the warning that I needed to install the package
2. Started dev_appserver.py, touched/created/removed some files and directories, saw the appropriate logging messages
3. Started dev_appserver.py, touched a .pyc file, saw that it correctly ignored that change because .pyc is listed in watcher_common._IGNORED_FILE_SUFFIXES

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9088
Remove the win32 file watcher

Summary:
Our changes have almost certainly broken the win32 file watcher, which we can't
easily test or fix. But we don't really care because we don't support
developing on Windows anyway.

Test Plan: `ack --python win32_file_watcher`

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9185
Rewrite common file ignoring logic to look at app.yaml's skip_files directive

Summary:
This turned out to be a bit easier than we'd hoped because the appserver has
a completely separate loop for detecting changes in yaml files that, as far as
I could tell by inspecting the code and sticking in logging statements, is
always called in a single thread. So whenever that code re-parses app.yaml, I
stick the skip_files regular expression into a global in watcher_common.

watcher_common then uses that skip_files regexp, and another one representing
the old lists of ignored directories, prefixes, and suffixes, within a new
function called ignore_path(). ignore_path() never ignores a top-level yaml
file; this is not strictly necessary because of the aforementioned separate
configuration file change detection routine, but it ensures that we'll always
restart the server when there is a configuration change, which we probably
always want to do anyway. ignore_path() also looks at every component of the
path in question when matching against the skip_files regexp because a
directory in skip_files, e.g. "^datastore$", is supposed to match everything
within it, e.g. "datastore/current.sqlite".

I made the mtime, inotify, and fsevents file watchers use this new
ignore_path(). The win32 file watcher is most likely broken so I added a TODO
to remove it from frankenserver. We don't support developing on Windows anyway.

Test Plan:
I tested the mtime and fsevents file watchers (but not the inotify one).

Tested that modifying these paths (among others) caused a restart:
    - app.yaml
    - main.py
    - content/
    - content/models.py

Tested that modifying these paths (among others) did not cause a restart:
    - datastore/
    - datastore/current.sqlite
    - Makefile
    - main.pyc
    - .git/
    - .git/foo
    - .#foo

Reviewers: csilvers

Reviewed By: csilvers

Differential Revision: http://phabricator.khanacademy.org/D9172
Add missing __init__.py

python/google/appengine/dist27/gae_override/__init__.py was missing from the
upstream SVN repo. I'll be filing a bug with them about that.

Test Plan: No longer get an ImportError on startup when running webapp.

Auditors: csilvers
Rebase, not fetch

Test Plan: N/A

Auditors: csilvers