SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
DISQUS
                         Tools and Stu



                           David Cramer
                          twitter.com/zeeg




Friday, July 15, 2011
django-debug-toolbar




Friday, July 15, 2011
$ pip install django-debug-toolbar

                        # settings.py
                        INSTALLED_APPS = (
                          'debug_toolbar',
                        )

                        MIDDLEWARE_CLASSES = (
                          'debug_toolbar.middleware.DebugToolbarMiddleware',
                        )

                        INTERNAL_IPS = ('127.0.0.1',)




Friday, July 15, 2011
Friday, July 15, 2011
Friday, July 15, 2011
Friday, July 15, 2011
Friday, July 15, 2011
Extending the Toolbar


                        class SettingsVarsDebugPanel(DebugPanel):
                            """
                            A panel to display all variables in django.conf.settings
                            """
                            name = 'SettingsVars'
                            has_content = True

                            def nav_title(self):
                                return _('Settings')

                            def title(self):
                                return _('Settings')

                            def content(self):
                                context = self.context.copy()
                                context.update({
                                    'settings': get_safe_settings(),
                                })
                                return as_string('debug_toolbar/panels/settings.html', context)




Friday, July 15, 2011
Extending the Toolbar




                        	   DEBUG_TOOLBAR_PANELS = (
                        	       'debug_toolbar.panels.version.VersionDebugPanel',
                        	       'debug_toolbar.panels.timer.TimerDebugPanel',
                        	       'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel',
                        	       'debug_toolbar.panels.headers.HeaderDebugPanel',
                        	       'debug_toolbar.panels.request_vars.RequestVarsDebugPanel',
                        	       'debug_toolbar.panels.template.TemplateDebugPanel',
                        	       'debug_toolbar.panels.sql.SQLDebugPanel',
                        	       'debug_toolbar.panels.signals.SignalDebugPanel',
                        	       'debug_toolbar.panels.logger.LoggingPanel',
                        	   )




Friday, July 15, 2011
Werkzeug
                        w/ django-devserver




Friday, July 15, 2011
$ pip install django-devserver

                        # settings.py
                        INSTALLED_APPS = (
                          'devserver',
                        )

                        $ python manage.py runserver




Friday, July 15, 2011
Friday, July 15, 2011
Friday, July 15, 2011
•     SQL Queries (Realtime and Summarized)
                  •     Profiling (Execution time, Memory Usage)
                  •     Cache usage summary
                  •     Ajax requests
                  •     Session information
                  •     Write your own!




Friday, July 15, 2011
class AjaxDumpModule(DevServerModule):
                            """
                            Dumps the content of all AJAX responses.
                            """

                            logger_name = 'ajax'

                            def process_response(self, request, response):
                                if request.is_ajax():
                                    self.logger.info(response.content)




Friday, July 15, 2011
Extending the Toolbar




                        	   DEVSERVER_MODULES = (
                                 'devserver.modules.sql.SQLSummaryModule',
                                 'devserver.modules.ajax.AjaxDumpModule’,
                                 'devserver.modules.profile.ProfileSummaryModule',
                                 'devserver.modules.request.SessionInfoModule',
                                 'devserver.modules.profile.MemoryUseModule',
                                 'devserver.modules.profile.LeftOversModule',
                                 'devserver.modules.cache.CacheSummaryModule',
                        	   )




Friday, July 15, 2011
Sentry




Friday, July 15, 2011
$ pip install django-sentry

                        # settings.py
                        INSTALLED_APPS = (
                          'sentry',
                          'sentry.client',
                        )




Friday, July 15, 2011
Friday, July 15, 2011
Friday, July 15, 2011
# settings.py
                        MIDDLEWARE_CLASSES = (
                          'sentry.client.middleware.SentryResponseErrorIdMiddleware',
                        )



                        # 500.html
                        <p>Sorry friends, something’s not working.</p>

                        {% if request.sentry.id %}
                            <p>If you need assistance, you may reference this error
                               as <strong>{{ request.sentry.id }}</strong>.</p>
                        {% endif %}




Friday, July 15, 2011
Friday, July 15, 2011
•     Builtin support for Celery
                  •     Server/Client (clients can be any language)
                  •     2.x powered by Flask/Redis (no Django)




Friday, July 15, 2011
Gargoyle




Friday, July 15, 2011
$ pip install gargoyle

                        # settings.py
                        INSTALLED_APPS = (
                          'gargoyle',
                        )




Friday, July 15, 2011
Friday, July 15, 2011
from gargoyle import gargoyle

                        def my_view(request):
                            if gargoyle.is_active('awesome', request):
                                return 'new happy version :D'
                            else:
                                return 'old sad version :('




Friday, July 15, 2011
class HostConditionSet(ConditionSet):
                            hostname = String()

                            def can_execute(self, instance):
                                return instance is None

                            def get_field_value(self, instance, field_name):
                                if field_name == 'hostname':
                                    return socket.gethostname()

                        gargoyle.register(HostConditionSet())




Friday, July 15, 2011
Friday, July 15, 2011
Wrap Up




Friday, July 15, 2011
DISQUS
                          Questions?




                          psst, we’re hiring
                         jobs@disqus.com

Friday, July 15, 2011
References


                  •     Debug Toolbar
                        https://github.com/django-debug-toolbar/django-debug-toolbar
                  •     Devserver
                        https://github.com/dcramer/django-devserver
                  •     Werkzeug
                        https://github.com/mitsuhiko/werkzeug
                  •     Gargoyle
                        https://github.com/disqus/gargoyle
                  •     Sentry
                        https://github.com/dcramer/django-sentry (1.x)
                        https://github.com/dcramer/sentry (2.x)




                                             code.disqus.com

Friday, July 15, 2011

Contenu connexe

En vedette

Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of AusterityDr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Paul McElvaney
 
Webanalytics2.0 sem jvol2
Webanalytics2.0 sem jvol2Webanalytics2.0 sem jvol2
Webanalytics2.0 sem jvol2
Sonika Mishra
 
CasóRio Tati - 23.06.07
CasóRio Tati - 23.06.07CasóRio Tati - 23.06.07
CasóRio Tati - 23.06.07
Jubrac Jacui
 
Ict Presentation
Ict PresentationIct Presentation
Ict Presentation
amoi286
 

En vedette (20)

Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010Learning Pool's Public Sector Learning Conference 2010
Learning Pool's Public Sector Learning Conference 2010
 
Social media school webversie
Social media school webversieSocial media school webversie
Social media school webversie
 
Collaboration for successful e-learning in Worcestershire
Collaboration for successful e-learning in WorcestershireCollaboration for successful e-learning in Worcestershire
Collaboration for successful e-learning in Worcestershire
 
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of AusterityDr Andrew Larner - Maintaining & Improving Services in a time of Austerity
Dr Andrew Larner - Maintaining & Improving Services in a time of Austerity
 
Vov meeting
Vov meeting Vov meeting
Vov meeting
 
How To Make Doughnut!
How To Make Doughnut!How To Make Doughnut!
How To Make Doughnut!
 
Weather qube
Weather qubeWeather qube
Weather qube
 
Learning Pool's Lindsey Rees on 'How to create bespoke e-learning'.
Learning Pool's Lindsey Rees on 'How to create bespoke e-learning'.Learning Pool's Lindsey Rees on 'How to create bespoke e-learning'.
Learning Pool's Lindsey Rees on 'How to create bespoke e-learning'.
 
Managing Live Chats Webinar
Managing Live Chats WebinarManaging Live Chats Webinar
Managing Live Chats Webinar
 
Webanalytics2.0 sem jvol2
Webanalytics2.0 sem jvol2Webanalytics2.0 sem jvol2
Webanalytics2.0 sem jvol2
 
Preso zeeman smc013 01 25-47
Preso zeeman smc013 01 25-47Preso zeeman smc013 01 25-47
Preso zeeman smc013 01 25-47
 
LB Lambeth's Andrew Jacobs on Technology as the Enabler
LB Lambeth's Andrew Jacobs on Technology as the EnablerLB Lambeth's Andrew Jacobs on Technology as the Enabler
LB Lambeth's Andrew Jacobs on Technology as the Enabler
 
CasóRio Tati - 23.06.07
CasóRio Tati - 23.06.07CasóRio Tati - 23.06.07
CasóRio Tati - 23.06.07
 
Bookevent
BookeventBookevent
Bookevent
 
Learning Pool: Work life balance 1 the secrets to building confidence resili...
Learning Pool: Work life balance 1  the secrets to building confidence resili...Learning Pool: Work life balance 1  the secrets to building confidence resili...
Learning Pool: Work life balance 1 the secrets to building confidence resili...
 
Lezing VakdagDM
Lezing VakdagDMLezing VakdagDM
Lezing VakdagDM
 
Have You Ever Noticed
Have You Ever NoticedHave You Ever Noticed
Have You Ever Noticed
 
Lecture 14
Lecture 14Lecture 14
Lecture 14
 
Lecture 19
Lecture 19Lecture 19
Lecture 19
 
Ict Presentation
Ict PresentationIct Presentation
Ict Presentation
 

Similaire à Tools for Development and Debugging in Python

Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passage
Erik Rose
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Lohika_Odessa_TechTalks
 
Magento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
Magento's Imagine eCommerce Conference 2011 - Unit Testing with MagentoMagento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
Magento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
MagentoImagine
 
EPHPC Webinar Slides: Unit Testing by Arthur Purnama
EPHPC Webinar Slides: Unit Testing by Arthur PurnamaEPHPC Webinar Slides: Unit Testing by Arthur Purnama
EPHPC Webinar Slides: Unit Testing by Arthur Purnama
Enterprise PHP Center
 

Similaire à Tools for Development and Debugging in Python (20)

Тестирование и Django
Тестирование и DjangoТестирование и Django
Тестирование и Django
 
Django’s nasal passage
Django’s nasal passageDjango’s nasal passage
Django’s nasal passage
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
Joomla! Components - Uma visão geral
Joomla! Components - Uma visão geralJoomla! Components - Uma visão geral
Joomla! Components - Uma visão geral
 
Javascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & AngularJavascript Memory leaks and Performance & Angular
Javascript Memory leaks and Performance & Angular
 
Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP plugins
 
Node conf - building realtime webapps
Node conf - building realtime webappsNode conf - building realtime webapps
Node conf - building realtime webapps
 
MT_01_unittest_python.pdf
MT_01_unittest_python.pdfMT_01_unittest_python.pdf
MT_01_unittest_python.pdf
 
Automated testing in Drupal
Automated testing in DrupalAutomated testing in Drupal
Automated testing in Drupal
 
Behind the curtain - How Django handles a request
Behind the curtain - How Django handles a requestBehind the curtain - How Django handles a request
Behind the curtain - How Django handles a request
 
Testing And Drupal
Testing And DrupalTesting And Drupal
Testing And Drupal
 
Moving to Dojo 1.7 and the path to 2.0
Moving to Dojo 1.7 and the path to 2.0Moving to Dojo 1.7 and the path to 2.0
Moving to Dojo 1.7 and the path to 2.0
 
7 Stages of Unit Testing in iOS
7 Stages of Unit Testing in iOS7 Stages of Unit Testing in iOS
7 Stages of Unit Testing in iOS
 
JQuery plugin development fundamentals
JQuery plugin development fundamentalsJQuery plugin development fundamentals
JQuery plugin development fundamentals
 
Deep dive into Oracle ADF
Deep dive into Oracle ADFDeep dive into Oracle ADF
Deep dive into Oracle ADF
 
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalksSelenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
Selenium with py test by Alexandr Vasyliev for Lohika Odessa Python TechTalks
 
Magento Imagine eCommerce Conference - February 2011 - Unit Testing with Magento
Magento Imagine eCommerce Conference - February 2011 - Unit Testing with MagentoMagento Imagine eCommerce Conference - February 2011 - Unit Testing with Magento
Magento Imagine eCommerce Conference - February 2011 - Unit Testing with Magento
 
Magento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
Magento's Imagine eCommerce Conference 2011 - Unit Testing with MagentoMagento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
Magento's Imagine eCommerce Conference 2011 - Unit Testing with Magento
 
Testing with Codeception (Webelement #30)
Testing with Codeception (Webelement #30)Testing with Codeception (Webelement #30)
Testing with Codeception (Webelement #30)
 
EPHPC Webinar Slides: Unit Testing by Arthur Purnama
EPHPC Webinar Slides: Unit Testing by Arthur PurnamaEPHPC Webinar Slides: Unit Testing by Arthur Purnama
EPHPC Webinar Slides: Unit Testing by Arthur Purnama
 

Plus de zeeg (6)

Practicing Continuous Deployment
Practicing Continuous DeploymentPracticing Continuous Deployment
Practicing Continuous Deployment
 
Continuous Deployment at Disqus (Pylons Minicon)
Continuous Deployment at Disqus (Pylons Minicon)Continuous Deployment at Disqus (Pylons Minicon)
Continuous Deployment at Disqus (Pylons Minicon)
 
PyCon 2011 Scaling Disqus
PyCon 2011 Scaling DisqusPyCon 2011 Scaling Disqus
PyCon 2011 Scaling Disqus
 
Sentry (SF Python, Feb)
Sentry (SF Python, Feb)Sentry (SF Python, Feb)
Sentry (SF Python, Feb)
 
DjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling DisqusDjangoCon 2010 Scaling Disqus
DjangoCon 2010 Scaling Disqus
 
Db tips & tricks django meetup
Db tips & tricks django meetupDb tips & tricks django meetup
Db tips & tricks django meetup
 

Dernier

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Dernier (20)

Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 

Tools for Development and Debugging in Python

  • 1. DISQUS Tools and Stu David Cramer twitter.com/zeeg Friday, July 15, 2011
  • 3. $ pip install django-debug-toolbar # settings.py INSTALLED_APPS = ( 'debug_toolbar', ) MIDDLEWARE_CLASSES = ( 'debug_toolbar.middleware.DebugToolbarMiddleware', ) INTERNAL_IPS = ('127.0.0.1',) Friday, July 15, 2011
  • 8. Extending the Toolbar class SettingsVarsDebugPanel(DebugPanel): """ A panel to display all variables in django.conf.settings """ name = 'SettingsVars' has_content = True def nav_title(self): return _('Settings') def title(self): return _('Settings') def content(self): context = self.context.copy() context.update({ 'settings': get_safe_settings(), }) return as_string('debug_toolbar/panels/settings.html', context) Friday, July 15, 2011
  • 9. Extending the Toolbar DEBUG_TOOLBAR_PANELS = ( 'debug_toolbar.panels.version.VersionDebugPanel', 'debug_toolbar.panels.timer.TimerDebugPanel', 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', 'debug_toolbar.panels.headers.HeaderDebugPanel', 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', 'debug_toolbar.panels.template.TemplateDebugPanel', 'debug_toolbar.panels.sql.SQLDebugPanel', 'debug_toolbar.panels.signals.SignalDebugPanel', 'debug_toolbar.panels.logger.LoggingPanel', ) Friday, July 15, 2011
  • 10. Werkzeug w/ django-devserver Friday, July 15, 2011
  • 11. $ pip install django-devserver # settings.py INSTALLED_APPS = ( 'devserver', ) $ python manage.py runserver Friday, July 15, 2011
  • 14. SQL Queries (Realtime and Summarized) • Profiling (Execution time, Memory Usage) • Cache usage summary • Ajax requests • Session information • Write your own! Friday, July 15, 2011
  • 15. class AjaxDumpModule(DevServerModule): """ Dumps the content of all AJAX responses. """ logger_name = 'ajax' def process_response(self, request, response): if request.is_ajax(): self.logger.info(response.content) Friday, July 15, 2011
  • 16. Extending the Toolbar DEVSERVER_MODULES = ( 'devserver.modules.sql.SQLSummaryModule', 'devserver.modules.ajax.AjaxDumpModule’, 'devserver.modules.profile.ProfileSummaryModule', 'devserver.modules.request.SessionInfoModule', 'devserver.modules.profile.MemoryUseModule', 'devserver.modules.profile.LeftOversModule', 'devserver.modules.cache.CacheSummaryModule', ) Friday, July 15, 2011
  • 18. $ pip install django-sentry # settings.py INSTALLED_APPS = ( 'sentry', 'sentry.client', ) Friday, July 15, 2011
  • 21. # settings.py MIDDLEWARE_CLASSES = ( 'sentry.client.middleware.SentryResponseErrorIdMiddleware', ) # 500.html <p>Sorry friends, something’s not working.</p> {% if request.sentry.id %} <p>If you need assistance, you may reference this error as <strong>{{ request.sentry.id }}</strong>.</p> {% endif %} Friday, July 15, 2011
  • 23. Builtin support for Celery • Server/Client (clients can be any language) • 2.x powered by Flask/Redis (no Django) Friday, July 15, 2011
  • 25. $ pip install gargoyle # settings.py INSTALLED_APPS = ( 'gargoyle', ) Friday, July 15, 2011
  • 27. from gargoyle import gargoyle def my_view(request): if gargoyle.is_active('awesome', request): return 'new happy version :D' else: return 'old sad version :(' Friday, July 15, 2011
  • 28. class HostConditionSet(ConditionSet): hostname = String() def can_execute(self, instance): return instance is None def get_field_value(self, instance, field_name): if field_name == 'hostname': return socket.gethostname() gargoyle.register(HostConditionSet()) Friday, July 15, 2011
  • 31. DISQUS Questions? psst, we’re hiring jobs@disqus.com Friday, July 15, 2011
  • 32. References • Debug Toolbar https://github.com/django-debug-toolbar/django-debug-toolbar • Devserver https://github.com/dcramer/django-devserver • Werkzeug https://github.com/mitsuhiko/werkzeug • Gargoyle https://github.com/disqus/gargoyle • Sentry https://github.com/dcramer/django-sentry (1.x) https://github.com/dcramer/sentry (2.x) code.disqus.com Friday, July 15, 2011