14 comments

  1. I ran across your blog and it is exactly what I am looking for. I was following your steps and have ran into an issue with the oauth plugin it seems. I was wondering if you have any idea about the following message:

    >>> import oauth
    >>> import twitter
    >>> import oauthtwitter
    Traceback (most recent call last):
    File “”, line 1, in
    File “/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/oauthtwitter.py”, line 30, in
    class OAuthApi(Api):
    File “/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/oauthtwitter.py”, line 148, in OAuthApi
    def _signRequest(self, req, signature_method=oauth.OAuthSignatureMethod_HMAC_SHA1()):
    AttributeError: ‘module’ object has no attribute ‘OAuthSignatureMethod_HMAC_SHA1′

    oAuth imports fine but when I try to import oauthtwitter. I get that error from command line. Any help would be glady appreciated.

    Dev Box:

    OS X 10.5
    Python 2.5.4
    Django 1.0.2

    Thanks in advance


    • Hello Eric,

      I am glad you were able to find what you needed. You really do not have to import oauth and twitter unless you want to use them directly.

      So, you can just do:
      import oauthtwitter

      The error is I think because you might be using some other version of the oauth. Kindly please download the version of oauth that is listed at the top of the post and use that version. Because twitter only support HMAC-SHA1 based oauth signatures. So you have to have that class in your implementation of oauth. The version that is listed above has it.

      I hope it will help you.


    • I had this problem too. I get it when I used setuptools to install an egg of ouath. Instead, just copy oauth.py into your Python path and it will work fine.


  2. Thank you very much for the nice implementaion.
    I stated using it and i like it very much.

    I keep running into one strange issue:
    Every once in a while a user gets the following when returning from twitter error:
    “We didn’t redirect you to twitter…”

    Which means that for some reason there was no ‘request_token’ key in the session.

    Any ideas what may cause this?


    • Hmm.. this is strange, if user is properly redirected to twitter as in twitter_signin view then they should have request_token in their session.

      Might be user’s browser clearing up cookies?

      There is nothing else I can think of right now, but I will look into it and will let you know if I will find something, but I didn’t face this yet on my end.


    • This is also happening to me. I am sniffing the traffic and I can’t see anything weird, twitter just doesn’t seem to be setting the request_token. I’ve tried multiple different twitter users and different browsers.


  3. Hi,

    I’m having an issue with the implementation. I get the following error:

    AttributeError at /login/
    ‘OAuthApi’ object has no attribute ‘_default_params’
    Exception Location: oauthtwitter.py in _FetchUrl, line 70

    And for return I get No un-authed token cookie.

    Any assistance would be greatly appreciated.


  4. Great work and had a question. I’m new to Django. I did not understand step 8 where you state “create a UserProfile module and post save signal processor as follows:”

    Does this mean
    1.create a module UserProfile.py
    2.Add the below code to UserProfile.py
    or
    1.Create a module UserProfile.py
    2.Add the below code to a file Models.py and do sync db


  5. Thanks for this!

    Everything seems to work except for when i return from twitter i get an exception (type ProgrammingError) “can’t adapt ” in backends/twitteroauth.py line 57 ( ” userprofile.save() “)

    Anyone got some ideas how to fix this?

    Thanks in advance!!


    • Hi I have the same issue. Did you manage to resolve this?


  6. I am trying to use this implementation and have gotten pretty far, except that when twitter redirects back, I am getting an error because the UserProfile table is not in the database. Perhaps I am not reading the instructions correctly, but I created the file called UserProfile.py in the twitterauth directory. But when I run manage.py syncdb, it is not creating the UserProfile. Obviously I’m missing something. Can anyone help?

    Thanks,
    JoeCascio

    ps. Here’s the traceback:
    Traceback Switch to copy-and-paste view

    /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/handlers/base.py in get_response
    response = callback(request, *callback_args, **callback_kwargs) …
    ▶ Local vars
    /Users/joecascio/projects/utwility/../utwility/twitterauth/views.py in twitter_return
    auth_user = authenticate(access_token=access_token) …
    ▶ Local vars
    /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/contrib/auth/__init__.py in authenticate
    user = backend.authenticate(**credentials) …
    ▶ Local vars
    /Users/joecascio/projects/utwility/backends/twitteroauth.py in authenticate
    userprofile = user.get_profile() …
    ▶ Local vars
    /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/contrib/auth/models.py in get_profile
    if not hasattr(self, ‘_profile_cache’):
    from django.conf import settings
    if not getattr(settings, ‘AUTH_PROFILE_MODULE’, False):
    raise SiteProfileNotAvailable
    try:
    app_label, model_name = settings.AUTH_PROFILE_MODULE.split(‘.’)
    model = models.get_model(app_label, model_name)
    self._profile_cache = model._default_manager.get(user__id__exact=self.id) …
    self._profile_cache.user = self
    except (ImportError, ImproperlyConfigured):
    raise SiteProfileNotAvailable
    return self._profile_cache
    class Message(models.Model):
    ▼ Local vars
    Variable Value
    app_label
    ‘twitterauth’
    model
    None
    model_name
    ‘UserProfile’
    self

    settings


  7. I got past that bug with the help of the previous comments and answers. But then I ran into trouble when ‘twitter_return’ tried to save the UserProfile in the database. In filling in the query params deep down in the ORM code. The oauth.OAuthToken was being passed as the access token string. I think this change needs to be made in twitteroauth.py line 54 needs to have the to_string() function applied.

    Original:
    userprofile.access_token = access_token

    Modified:
    userprofile.access_token = access_token.to_string()

    This is required because userprofile.access_token is a CharField.



Leave a Comment