Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
----

Version 1.0.7, Fri 16 Mar 2012
===============================

e006a4eb5d Minor refactoring and whitespace tweaking (Adam Charnock)
a9d142a679 A little refactoring and fixing image URLs (Adam Charnock)


Version 1.0.6, Fri 16 Mar 2012
===============================

84bee7c18a Some templating corrections (Adam Charnock)


Version 1.0.5, Fri 16 Mar 2012
===============================

6517f95a2c Setting up static files correctly (Adam Charnock)


Version 1.0.4, Fri 16 Mar 2012
===============================

a666cfad1d Finally sorted out the packaging :) (Adam Charnock)
597438be56 Version bump to 1.0.2 and updating CHANGES.txt (Adam Charnock)


Version 1.0.3, Fri 16 Mar 2012
===============================

6464c7ee25 Updating manifest file to correctly include all files (Adam Charnock)

Version 1.0.2, Wed 14 Mar 2012
===============================

91ed583214 Finial packaging tweaks. Non-python files should now be included. (Adam Charnock)
6d2bf19423 Now using setup() from distutils where available (Adam Charnock)
5c88afa3b3 Updating manifest and tweaking setup.py (Adam Charnock)
eefcbdbf74 Packing updates, readying for release using seed (Adam Charnock)

2 changes: 2 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
include README.textile
graft django_badbrowser
70 changes: 35 additions & 35 deletions django_badbrowser/__init__.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,37 @@
import httpagentparser
from pkg_resources import parse_version

VERSION = "0.1.0" # also in setup.py
__version__ = "1.0.8"

def check_user_agent(user_agent, requirements):
if not user_agent:
return True

if not requirements:
return True

if type(user_agent) == httpagentparser.Result or type(user_agent) == dict:
parsed = user_agent
else:
parsed = httpagentparser.detect(user_agent)

if "browser" not in parsed:
return True

if "name" not in parsed["browser"]:
return True

if "version" not in parsed["browser"]:
return True

user_browser = parsed["browser"]["name"].lower()
user_browser_version = parsed["browser"]["version"]

for browser, browser_version in requirements:
if not browser_version:
return False
if user_browser == browser.lower():
if cmp(parse_version(browser_version), parse_version(user_browser_version)) <= 0:
return True

return False
import httpagentparser
from pkg_resources import parse_version

if not user_agent:
return True

if not requirements:
return True

if type(user_agent) == dict:
parsed = user_agent
else:
parsed = httpagentparser.detect(user_agent)

if "browser" not in parsed:
return True

if "name" not in parsed["browser"]:
return True

if "version" not in parsed["browser"]:
return True

user_browser = parsed["browser"]["name"].lower()
user_browser_version = parsed["browser"]["version"]

for browser, browser_version in requirements:
if not browser_version:
return False
if user_browser == browser.lower():
if cmp(parse_version(browser_version), parse_version(user_browser_version)) <= 0:
return True

return False
88 changes: 44 additions & 44 deletions django_badbrowser/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,52 +3,52 @@
from django.conf import settings
from django.core.urlresolvers import reverse

from django_badbrowser.views import unsupported
from django_badbrowser import check_user_agent

class BrowserSupportDetection(object):

def _user_ignored_warning(self, request):
"""Has the user forced ignoring the browser warning"""
return "badbrowser_ignore" in request.COOKIES and request.COOKIES["badbrowser_ignore"]

def process_request(self, request):
self._clear_cookie = False

if request.path.startswith(settings.MEDIA_URL):
# no need to test media requests (which sometimes come via
# via django during development)
return None

if "HTTP_USER_AGENT" not in request.META:
return None

user_agent = request.META["HTTP_USER_AGENT"]
parsed_user_agent = httpagentparser.detect(user_agent)

# Set the browser information on the request object
request.browser = parsed_user_agent

if not hasattr(settings, "BADBROWSER_REQUIREMENTS"):
return None # no requirements have been setup

if request.path == reverse("django-badbrowser-ignore"):
# Allow through any requests for the ignore page
return None

if check_user_agent(parsed_user_agent, settings.BADBROWSER_REQUIREMENTS):
self._clear_cookie = True
return None # continue as normal
else:
if self._user_ignored_warning(request):
return None

from django_badbrowser.views import unsupported
return unsupported(request)

def process_response(self, request, response):
if hasattr(self, "_clear_cookie") and self._clear_cookie:
response.delete_cookie("badbrowser_ignore")
return response


def _user_ignored_warning(self, request):
"""Has the user forced ignoring the browser warning"""
return "badbrowser_ignore" in request.COOKIES and request.COOKIES["badbrowser_ignore"]

def process_request(self, request):
self._clear_cookie = False

if request.path.startswith(settings.MEDIA_URL):
# no need to test media requests (which sometimes come via
# via django during development)
return None

if "HTTP_USER_AGENT" not in request.META:
return None

user_agent = request.META["HTTP_USER_AGENT"]
parsed_user_agent = httpagentparser.detect(user_agent)

# Set the browser information on the request object
request.browser = parsed_user_agent

if not hasattr(settings, "BADBROWSER_REQUIREMENTS"):
return None # no requirements have been setup

if request.path == reverse("django-badbrowser-ignore"):
# Allow through any requests for the ignore page
return None

if check_user_agent(parsed_user_agent, settings.BADBROWSER_REQUIREMENTS):
self._clear_cookie = True
return None # continue as normal
else:
if self._user_ignored_warning(request):
return None

return unsupported(request)

def process_response(self, request, response):
if hasattr(self, "_clear_cookie") and self._clear_cookie:
response.delete_cookie("badbrowser_ignore")
return response



10 changes: 5 additions & 5 deletions django_badbrowser/templates/django_badbrowser/unsupported.html
Original file line number Diff line number Diff line change
Expand Up @@ -95,35 +95,35 @@ <h1>Unsupported web browser</h1>
{% for browser in suggest %}
{% if browser|lower == "chrome" %}
<li>
<a href="http://www.google.com/chrome"><img src="{{ MEDIA_URL }}django-badbrowser/browser_chrome.gif"></a>
<a href="http://www.google.com/chrome"><img src="{{ STATIC_URL }}django-badbrowser/browser_chrome.gif"></a>
<a href="http://www.google.com/chrome"><span>Chrome</span></a>
</li>
{% endif %}

{% if browser|lower == "firefox" %}
<li>
<a href="http://firefox.com"><img src="{{ MEDIA_URL }}django-badbrowser/browser_firefox.gif"></a>
<a href="http://firefox.com"><img src="{{ STATIC_URL }}django-badbrowser/browser_firefox.gif"></a>
<a href="http://firefox.com"><span>Firefox</span></a>
</li>
{% endif %}

{% if browser|lower == "safari" %}
<li>
<a href="http://www.apple.com/safari/download/"><img src="{{ MEDIA_URL }}django-badbrowser/browser_safari.gif"></a>
<a href="http://www.apple.com/safari/download/"><img src="{{ STATIC_URL }}django-badbrowser/browser_safari.gif"></a>
<a href="http://www.apple.com/safari/download/"><span>Safari</span></a>
</li>
{% endif %}

{% if browser|lower == "opera" %}
<li>
<a href="http://www.opera.com/"><img src="{{ MEDIA_URL }}django-badbrowser/browser_opera.gif"></a>
<a href="http://www.opera.com/"><img src="{{ STATIC_URL }}django-badbrowser/browser_opera.gif"></a>
<a href="http://www.opera.com/"><span>Opera</span></a>
</li>
{% endif %}

{% if browser|lower == "ie" or browser|lower == "internet explorer" or browser|lower == "microsoft internet explorer" %}
<li>
<a href="http://www.microsoft.com/uk/windows/internet-explorer/"><img src="{{ MEDIA_URL }}django-badbrowser/browser_ie.gif"></a>
<a href="http://www.microsoft.com/uk/windows/internet-explorer/"><img src="{{ STATIC_URL }}django-badbrowser/browser_ie.gif"></a>
<a href="http://www.microsoft.com/uk/windows/internet-explorer/"><span>Internet Explorer</span></a>
</li>
{% endif %}
Expand Down
Loading