I need a Python library for Google App Engine that allows users to be able to log in to a Google App Engine application using their Facebook or Twitter or Google account, but not necessarily need to have a Google account (this should be optional). In addition the library should contain functions to update their live streams as well with update (of course only with the user consent).
What I need is Python libraries that I can use on App Engine to:
1. Let an user sign into an app using their Facebook or Google or Twitter or Yahoo or OpenId account (probably use both OAuth and OpenId, assume the App Engine app supports federated login -if needed).
2. Grab their (nick)name, email address, profile picture (if available) and the URL to their social profile and ask the user to confirm the details as part of the signup process. I also need a demo of this, using the libaries.
3. Store these details in App Engine DataStore (for future reference).
4. Using the libraries I need to be able to have the app publish updates (with user consent) to all social networks the users have connected their account too. As such, I will need you to make a demo where the app asks the user per update to consent to publish the update to their live streams. In this demo you will need to store each update for each user in the App Engine DataStore, including the information regarding to which social network it was send and when this was send and if this was successful or not. And in addition, allow the user to resend the update to the appropoiate social network if the update has failed. Please use the Task Queue and pubhubsubbub to publish the updates quickly and in the background to the appropriate networks.
5. Allow the user to use their Facebook/Google/Twitter/Yahoo/OpenId account for any future log in.
Important to note:
1. Each user should be able to add multiple social network profiles (e.g. their Twitter and Facebook and Google Buzz details). Each user may change their email address, name, etc. So you can use the DataStore key to be the unique identifier for the user.
2. For the Google log in, the libraries needs to be able to publish to Google Buzz. In cases of Twitter and Facebook, the libraries need to publish to their live streams.
3. It may prove difficult to get the email address from Twitter, in which case please ask the user during the sign up process to add the details (during the confirmation).
4. One of the reasons why I would like to have these libraries is because I want users to be able to log in to the app using their Facebook or Twitter or Google account, but not necessarily need to have a Google account (this should be optional).
1. All code should be written in Python 2.5 (to make it compatible with App Engine).
2. All code should be heavily documented and well structured. In addition, the code should be readable (use names that are explanatory and explain each function with Args, Raises and Returns - if you are unsure what I mean here, please have a look at this code example: <[url removed, login to view]>).
3. Use the WebApp Framework in App Engine.
4. I need code-examples for the different functionalities as describe above. Feel free to make as many handlers to demonstrate the usage, so I can easier adapt the code to my own code.
5. You can use open source code, but this need to be clearly indicated and preferably in separate files (so it is easier to update in the future if needed).
6. I need to be able to use a Python @decorator in the app (on different WebApp handlers) which prompts the user for login or verifies that the user is logged in and continues, e.g. @login_required.
7. Of course, all of this should as secure as possible and I need to be able to make sure the libraries keep working in the long term. So you will need to include unit tests to your code. All important methods/classes should be tested (including writing/reading to the DataStore and Social Network APIs/Authentication and other important logic - however there is no need to test -for example- the WebApp Framework output).
8. Make sure to apply most of the PEP-8 style guide principles to your code. However, use 2 spaces to indent one level within the Python code, instead of the standard 4 spaces. Also, no line can be longer than 80 characters. And use list comprehensions where you can/makes sense. If any questions or doubts, please ask me. See also <[url removed, login to view]>
pylint --generate-rcfile > ~/.pylintrc