diff --git a/Makefile b/Makefile index 0c2eeaa..e88e4d1 100644 --- a/Makefile +++ b/Makefile @@ -14,9 +14,11 @@ prerelease: python2.4 runtests.py tests --exit_on_failure python2.6 runtests.py tests --exit_on_failure python2.7 runtests.py tests --exit_on_failure - -rm -rf dist/* - python setup.py clean - python setup.py sdist --formats=gztar,zip + -sudo rm -rf dist/ + -sudo rm -rf snapshot/ + python expand-symlinks.py + cd snapshot; python setup.py clean + cd snapshot; python setup.py sdist --formats=gztar,zip .PHONY: release release: prerelease @@ -24,7 +26,7 @@ release: prerelease @echo "Are you sure you want to proceed? (yes/no)" @read yn; [ "yes" == $$yn ] @echo "Here we go..." - python setup.py sdist --formats=gztar,zip register upload + cd snapshot; python setup.py sdist --formats=gztar,zip register upload wget "http://support.googlecode.com/svn/trunk/scripts/googlecode_upload.py" -O googlecode_upload.py - python googlecode_upload.py --summary="Version $(shell python setup.py --version)" --project=google-api-python-client dist/*.tar.gz - python googlecode_upload.py --summary="Version $(shell python setup.py --version)" --project=google-api-python-client dist/*.zip + python googlecode_upload.py --summary="Version $(shell python setup.py --version)" --project=google-api-python-client snapshot/dist/*.tar.gz + python googlecode_upload.py --summary="Version $(shell python setup.py --version)" --project=google-api-python-client snapshot/dist/*.zip diff --git a/bin/enable-app-engine-project b/bin/enable-app-engine-project old mode 100644 new mode 100755 index 07dfb7b..8a53ec2 --- a/bin/enable-app-engine-project +++ b/bin/enable-app-engine-project @@ -16,9 +16,12 @@ """Copy the sources for google-api-python-client into an App Engine project. -Copies, or symbolically links the sources of the google-api-python-client +Copies the sources of the google-api-python-client library into a Google App Engine project. This is necessary so that the source can be uploaded when the application is deployed. + + $ enable-app-engine-project [flags] directory + """ __author__ = 'jcgregorio@google.com (Joe Gregorio)' @@ -53,6 +56,15 @@ gflags.DEFINE_boolean('force', 'False', gflags.DEFINE_boolean('dry_run', 'False', 'Don\'t actually do anything.') def find_source(module): + """Find the absolute path for the source of a module. + + Args: + module: str, Name of the module. + Returns: + A tuple of (isdir, location), a boolean indicating if it + is a directory (True) or a single file module (False), and + the absolute path of the source. + """ isdir = False location = '' m = __import__(module) @@ -71,7 +83,11 @@ def main(argv): try: argv = FLAGS(argv) except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) + print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) + sys.exit(1) + + if len(argv) == 1: + print 'Usage: %s ARGS\n%s' % (argv[0], FLAGS) sys.exit(1) # Set the logging according to the command-line flag @@ -82,7 +98,7 @@ def main(argv): # Check if the supplied directory is an App Engine project by looking # for an app.yaml if not os.path.isfile(os.path.join(dir, 'app.yaml')): - sys.exit('The given directory is not a Google App Engine project: %s', dir) + sys.exit('The given directory is not a Google App Engine project: %s' % dir) # Build up the set of file or directory copying actions we need to do @@ -105,10 +121,10 @@ def main(argv): if isdir: results = copy_tree(src, dst, FLAGS.dry_run) for filename in results: - logging.info('Copied to: %s' % filename) + print 'Copied: %s' % filename else: filename, copied = copy_file(src, dst, FLAGS.dry_run) - logging.info('Copied to: %s Successfully: %s' % (filename, copied)) + print 'Copied: %s Successfully: %s' % (filename, copied) except DistutilsFileError, e: sys.exit(str(e)) diff --git a/expand-symlinks.py b/expand-symlinks.py new file mode 100644 index 0000000..29535d6 --- /dev/null +++ b/expand-symlinks.py @@ -0,0 +1,3 @@ +from distutils.dir_util import copy_tree + +copy_tree('.', 'snapshot', verbose=True) diff --git a/samples/appengine/oauth2client b/samples/appengine/oauth2client new file mode 120000 index 0000000..9013119 --- /dev/null +++ b/samples/appengine/oauth2client @@ -0,0 +1 @@ +../../oauth2client/ \ No newline at end of file diff --git a/samples/oauth2/appengine/apiclient b/samples/oauth2/appengine/apiclient deleted file mode 120000 index f53af07..0000000 --- a/samples/oauth2/appengine/apiclient +++ /dev/null @@ -1 +0,0 @@ -../../../apiclient/ \ No newline at end of file diff --git a/samples/oauth2/appengine/app.yaml b/samples/oauth2/appengine/app.yaml deleted file mode 100644 index 03bdf81..0000000 --- a/samples/oauth2/appengine/app.yaml +++ /dev/null @@ -1,16 +0,0 @@ -application: m-buzz -version: 1 -runtime: python -api_version: 1 - -handlers: -- url: /static - static_dir: static - -- url: /google8f1adb368b7bd14c.html - upload: google8f1adb368b7bd14c.html - static_files: static/google8f1adb368b7bd14c.html - -- url: .* - script: main.py - diff --git a/samples/oauth2/appengine/gflags.py b/samples/oauth2/appengine/gflags.py deleted file mode 120000 index 157177e..0000000 --- a/samples/oauth2/appengine/gflags.py +++ /dev/null @@ -1 +0,0 @@ -../../../gflags.py \ No newline at end of file diff --git a/samples/oauth2/appengine/gflags_validators.py b/samples/oauth2/appengine/gflags_validators.py deleted file mode 120000 index 9d359e0..0000000 --- a/samples/oauth2/appengine/gflags_validators.py +++ /dev/null @@ -1 +0,0 @@ -../../../gflags_validators.py \ No newline at end of file diff --git a/samples/oauth2/appengine/httplib2 b/samples/oauth2/appengine/httplib2 deleted file mode 120000 index 69b02ef..0000000 --- a/samples/oauth2/appengine/httplib2 +++ /dev/null @@ -1 +0,0 @@ -../../../httplib2/ \ No newline at end of file diff --git a/samples/oauth2/appengine/index.yaml b/samples/oauth2/appengine/index.yaml deleted file mode 100644 index a3b9e05..0000000 --- a/samples/oauth2/appengine/index.yaml +++ /dev/null @@ -1,11 +0,0 @@ -indexes: - -# AUTOGENERATED - -# This index.yaml is automatically updated whenever the dev_appserver -# detects that a new type of query is run. If you want to manage the -# index.yaml file manually, remove the above marker line (the line -# saying "# AUTOGENERATED"). If you want to manage some indexes -# manually, move them above the marker line. The index.yaml file is -# automatically uploaded to the admin console when you next deploy -# your application using appcfg.py. diff --git a/samples/oauth2/appengine/main.py b/samples/oauth2/appengine/main.py deleted file mode 100644 index 087a136..0000000 --- a/samples/oauth2/appengine/main.py +++ /dev/null @@ -1,109 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2007 Google Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -__author__ = 'jcgregorio@google.com (Joe Gregorio)' - - -import httplib2 -import logging -import os -import pickle - -from apiclient.discovery import build -from oauth2client.appengine import CredentialsProperty -from oauth2client.appengine import StorageByKeyName -from oauth2client.client import OAuth2WebServerFlow -from google.appengine.api import memcache -from google.appengine.api import users -from google.appengine.ext import db -from google.appengine.ext import webapp -from google.appengine.ext.webapp import template -from google.appengine.ext.webapp import util -from google.appengine.ext.webapp.util import login_required - - -class Credentials(db.Model): - credentials = CredentialsProperty() - - -class MainHandler(webapp.RequestHandler): - - @login_required - def get(self): - user = users.get_current_user() - credentials = StorageByKeyName( - Credentials, user.user_id(), 'credentials').get() - - if credentials is None or credentials.invalid == True: - flow = OAuth2WebServerFlow( - # Visit https://code.google.com/apis/console to - # generate your client_id, client_secret and to - # register your redirect_uri. - client_id='', - client_secret='', - scope='https://www.googleapis.com/auth/buzz', - user_agent='buzz-cmdline-sample/1.0', - domain='anonymous', - xoauth_displayname='Google App Engine Example App') - - callback = self.request.relative_url('/auth_return') - authorize_url = flow.step1_get_authorize_url(callback) - memcache.set(user.user_id(), pickle.dumps(flow)) - self.redirect(authorize_url) - else: - http = httplib2.Http() - http = credentials.authorize(http) - service = build("buzz", "v1", http=http) - activities = service.activities() - activitylist = activities.list(scope='@consumption', - userId='@me').execute() - path = os.path.join(os.path.dirname(__file__), 'welcome.html') - logout = users.create_logout_url('/') - self.response.out.write( - template.render( - path, {'activitylist': activitylist, - 'logout': logout - })) - - -class OAuthHandler(webapp.RequestHandler): - - @login_required - def get(self): - user = users.get_current_user() - flow = pickle.loads(memcache.get(user.user_id())) - if flow: - credentials = flow.step2_exchange(self.request.params) - StorageByKeyName( - Credentials, user.user_id(), 'credentials').put(credentials) - self.redirect("/") - else: - pass - - -def main(): - application = webapp.WSGIApplication( - [ - ('/', MainHandler), - ('/auth_return', OAuthHandler) - ], - debug=True) - util.run_wsgi_app(application) - - -if __name__ == '__main__': - main() diff --git a/samples/oauth2/appengine/oauth2client b/samples/oauth2/appengine/oauth2client deleted file mode 120000 index 0a1ec33..0000000 --- a/samples/oauth2/appengine/oauth2client +++ /dev/null @@ -1 +0,0 @@ -../../../oauth2client/ \ No newline at end of file diff --git a/samples/oauth2/appengine/simplejson b/samples/oauth2/appengine/simplejson deleted file mode 120000 index eeaa2f0..0000000 --- a/samples/oauth2/appengine/simplejson +++ /dev/null @@ -1 +0,0 @@ -../../../simplejson/ \ No newline at end of file diff --git a/samples/oauth2/appengine/uritemplate b/samples/oauth2/appengine/uritemplate deleted file mode 120000 index 5952908..0000000 --- a/samples/oauth2/appengine/uritemplate +++ /dev/null @@ -1 +0,0 @@ -../../../uritemplate/ \ No newline at end of file diff --git a/samples/oauth2/appengine/welcome.html b/samples/oauth2/appengine/welcome.html deleted file mode 100644 index da40a16..0000000 --- a/samples/oauth2/appengine/welcome.html +++ /dev/null @@ -1,29 +0,0 @@ - - - Buzz Stuff - - - -

Logout

- - {% for item in activitylist.items %} - - - - - - {% endfor %} -
-
- {{ item.actor.name }}
- {{ item.object.content }} - - -
- -