Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Look Behind the Curtain
Search
Senko Rašić
November 14, 2017
Programming
0
93
Look Behind the Curtain
A Python Zagreb meetup talk about why we should not be afraid of poking into someone else's code.
Senko Rašić
November 14, 2017
Tweet
Share
More Decks by Senko Rašić
See All by Senko Rašić
Online audio and video using free software and open standards
senko
1
51
Streamanje glazbe pomoću Go-a
senko
1
53
Chasing the Ghost
senko
1
95
Real Time Web with Django Channels
senko
1
160
Building highly available and fault tolerant sites on a budget
senko
1
390
Simple REST with Django
senko
1
89
Building good Web APIs
senko
0
130
Detecting duplicate SQL queries in Django
senko
1
930
Python 3: Zašto i kako
senko
1
130
Other Decks in Programming
See All in Programming
急速に利用拡大を続ける飲食店向けサービスで 店内端末同士のローカル通信を追加設定なしで実現した話
whatasoda
0
150
Piniaの現状と今後
waka292
5
1.1k
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
1.3k
CSC305 Lecture 09
javiergs
PRO
0
120
現場から考えるソフトウェアエンジニアリングの価値と実験
nomuson
1
160
空間の中でアイドルとレッスンする技術 - 1st "Vision" / Spatial Lesson technologies with my idol - 1st "Vision"
banjun
PRO
0
260
飲食業界向けマルチプロダクトを実現させる開発体制とリアルな現状
hiroya0601
1
290
GrafanaのHTTP API を眺めてみよう
rinchoku
0
520
Kubernetes for Data Engineers: Building Scalable, Reliable Data Pipelines
sucitw
1
110
もう実家に手頃な情シス娘は不要!Bedrockでもう一人の娘を作る
komakichi
2
160
Vue SFCのtemplateでTypeScriptの型を活用しよう
tsukkee
3
1.2k
今日で分かる!カスタムコップの作り方
krpk1900
2
320
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
222
8.9k
A Tale of Four Properties
chriscoyier
156
22k
No one is an island. Learnings from fostering a developers community.
thoeni
19
2.9k
Optimising Largest Contentful Paint
csswizardry
31
2.9k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
RailsConf 2023
tenderlove
28
870
Teambox: Starting and Learning
jrom
132
8.7k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
350
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
31
1.7k
Six Lessons from altMBA
skipperchong
26
3.4k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Why Our Code Smells
bkeepers
PRO
334
57k
Transcript
Look behind the curtain Senko Rašić
None
None
None
“When the getDVRConversions is set to True it expires conversions
automatically.” —paid support Proprietary software
Open Source
None
None
None
None
None
None
None
Sign in with Google * *authorized users only
from allauth.socialaccount.adapter import \ DefaultSocialAccountAdapter class MyAdapter(DefaultSocialAccountAdapter): def is_open_for_signup(self, request):
return False
from allauth.socialaccount.adapter import \ DefaultSocialAccountAdapter class MyAdapter(DefaultSocialAccountAdapter): def is_open_for_signup(self, req,
sociallogin): return False
from allauth.socialaccount.adapter import \ DefaultSocialAccountAdapter class MyAdapter(DefaultSocialAccountAdapter): def is_open_for_signup(self, req,
sociallogin): return False
Django Developer Tragedies AllAuth won’t log in without SocialAccount, but
won’t create SocialAccount without signup.
We need to go deeper
allauth.socialaccount.views.SignupView
a.sa.providers.google.views.oauth2_login a.sa.providers.oauth2.views.OAuth2LoginView ↓ ↓ a.sa.providers.google.views.oauth2_callback a.sa.providers.oauth2.views.OAuth2CallbackView ↓ allauth.socialaccount.views.SignupView
class OAuth2CallbackView(OAuth2View): def dispatch(self, request): … login = self.adapter.complete_login(…) …
return complete_social_login(request, login) ↓ # allauth.socialaccount.helpers def _complete_social_login(req, sociallogin): … if sociallogin.is_existing: … else: ret = _process_signup(req, sociallogin) ↓ # allauth.socialaccount.models class SocialLogin(object): @property def is_existing(self): return self.account.pk
None
# a.sa.provider.google.views class GoogleOAuth2Adapter(OAuth2Adapter): def complete_login(…): … login = self.get_provider().
\ sociallogin_from_response(…) ↓ # a.sa.providers.base class Provider(object): def sociallogin_from_response(…): … sociallogin.user = adapter.new_user(req, sociallogin) … ↓
None
# allauth.socialaccount.models class SocialLogin(object): @property def is_existing(self): return self.account.pk
None
None
# allauth.socialaccount.helpers def complete_social_login(request, sociallogin): assert not sociallogin.is_existing …
None
None
千⾥里里之⾏行行,始於⾜足下 Debugging of thousand lines starts with a single step
Thank you! @senkorasic