-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
clement
committed
Jun 7, 2009
0 parents
commit fba1c3d
Showing
8 changed files
with
117 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
*~ | ||
*.pyc | ||
settings_local.py | ||
p/ | ||
wurfl.xml |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
How to use | ||
---------- | ||
|
||
from wurfl import Device | ||
device = Device.get_from_ua(ua, fallback=True) | ||
device = Device.get_from_id() | ||
|
||
Views for updating, patching, testing | ||
|
||
Settings reference | ||
------------------ | ||
|
||
- `WURFL_USE_CACHE` : True to use django cache backend ... `False` | ||
- `WURFL_CACHE_PREFIX` : prefix for key `wurfl_` | ||
- `WURFL_CACHE_TIMEOUT` : timeout for cached values, None = timeout for project, 0 = infinite | ||
- `WURFL_USE_PATCH` : ?? | ||
- `WURFL_URL` : the url to the XML wurfl file |
Empty file.
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
from django.conf import settings | ||
|
||
URL = getattr(settings, 'WURFL_URL', 'localhost') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from django.db import models | ||
|
||
class Update(models.Model): | ||
version = models.CharField(max_length=255) | ||
url = models.URLField() | ||
update_date = models.DateTimeField(auto_now_add=True) | ||
time_for_update = models.IntegerField() | ||
nb_devices = models.IntegerField() | ||
errors = models.TextField() | ||
|
||
class Device(models.Model): | ||
id = models.CharField(max_length=128, primary_key=True) | ||
user_agent = models.CharField(max_length=255, blank=True, db_index=True) | ||
fall_back = models.CharField(max_length=128, blank=True, db_index=True) | ||
actual_device_root = models.BooleanField() | ||
capabilities = models.TextField() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
from wurfl.conf import settings | ||
from wurfl.models import Update, Device | ||
|
||
from xml import sax | ||
from django.utils.simplejson.encoder import JSONEncoder | ||
from django.utils.simplejson.decoder import JSONDecoder | ||
from time import time | ||
|
||
|
||
class _Handler(sax.ContentHandler): | ||
def __init__(self): | ||
# Parsing version flag | ||
self.parse_version = False | ||
# JSON encoder and decoder | ||
self.e = JSONEncoder() | ||
self.d = JSONDecoder() | ||
|
||
def startElement(self, name, attrs): | ||
if name == 'wurfl': | ||
self.start_time = time() | ||
self.stats = {'nb_devices':0, 'url':settings.URL, 'errors':0} | ||
elif name == 'ver': | ||
self.stats['version'] = '' | ||
self.parse_version = True | ||
elif name == 'device': | ||
self.device = {} | ||
self.device['id'] = attrs.get('id', '') | ||
self.device['user_agent'] = attrs.get('user_agent', '') | ||
self.device['fall_back'] = attrs.get('fall_back', '') | ||
self.device['actual_device_root'] = attrs.get('actual_device_root', False) and True | ||
# Prepare the capabilities | ||
self.capabilities = {} | ||
elif name == 'group': | ||
self.current_group = attrs.get('id','') | ||
self.capabilities[self.current_group] = {} | ||
elif name == 'capabilities': | ||
value = attrs.get('value', '') | ||
if value == 'true' or value == 'false': | ||
value = (value == 'true') | ||
if value.isdigit(): | ||
value = int(value) | ||
|
||
self.capabilities[self.current_group][attrs.get('id','')] = value | ||
|
||
def endElement(self, name): | ||
if name == 'device': | ||
# Process the capabilities | ||
self.device['capabilities'] = self.e.encode(self.capabilities) | ||
|
||
# Save the device model | ||
Device.objects.create(**self.device) | ||
|
||
# Update the stats | ||
self.stats['nb_devices'] += 1 | ||
|
||
print "Device with id : %s" % self.device['id'] | ||
elif name == 'wurfl': | ||
# End of the update | ||
self.stats['time_for_update'] = time() - self.start_time | ||
Update.objects.create(**self.stats) | ||
elif name == 'ver': | ||
self.parse_version = False | ||
|
||
|
||
def characters(self, ch): | ||
if self.parse_version: | ||
self.stats['version'] += ch | ||
|
||
def parse_wurfl(file_name): | ||
parser = sax.make_parser() | ||
handler = _Handler() | ||
parser.setContentHandler(handler) | ||
parser.parse(open(file_name)) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Create your views here. |