#!/usr/bin/env python
'''
:copyright: (c) 2015 by 51Degrees.com, see README.md for more details.
:license: MPL2, see LICENSE.txt for more details.
'''
# // Snippet Start
from BaseHTTPServer import BaseHTTPRequestHandler
import CGIHTTPServer
import cgitb; cgitb.enable() ## This line enables CGI error reporting
import urlparse
import os
import string
from FiftyOneDegrees import fiftyone_degrees_mobile_detector_v3_trie_wrapper
####################################################
# Set html links globally
####################################################
dataOptions = ('Compare Data Options')
methodHyperLinkUA = ('About Metrics')
methodHyperLinkHeaders = ('About Metrics')
propertiesHyperLinkUA = ('All Properties')
propertiesHyperLinkHeaders = ('All Properties')
propertyNotFound = ('Switch Data Set')
#######################################################
#------------------------------------------------------
# Handler function
# Called on each request
#------------------------------------------------------
#######################################################
class GetHandler(CGIHTTPServer.CGIHTTPRequestHandler):
def do_GET(self):
self.send_response(200, 'OK')
self.send_header('Content-type', 'text/html')
self.end_headers()
###################################################
# Fetch http headers from browser request
###################################################
headers = self.headers
####################################################
# If usage sharing is enabled, share with 51Degrees
# (core must be installed for this to work).
####################################################
if shareUsage == 'True':
client_ip = headers.get('client_ip')
from fiftyone_degrees.mobile_detector import usage
usage.UsageSharer.instance().record(client_ip, http_headers)
####################################################
# Begin html formatting
####################################################
self.wfile.write('')
self.wfile.write('')
self.wfile.write('')
self.wfile.write('
')
self.wfile.write('
')
self.wfile.write('')
self.wfile.write('
Python Trie - Device Detection '
'Server Example
')
#####################################################
# Output data set information
#####################################################
self.wfile.write('
')
#####################################################
# Perform match with single User-Agent
#####################################################
userAgent = headers.get('user-agent')
match = provider.getMatch(userAgent)
#######################################################
# Output properties from match
#######################################################
self.outputProperties(match, propertiesHyperLinkUA, methodHyperLinkUA)
########################################################
# Set http headers from browser
########################################################
httpHeaders = fiftyone_degrees_mobile_detector_v3_trie_wrapper\
.MapStringString()
self.wfile.write('
')
self.wfile.write('
Match with HTTP Headers'
'
')
self.wfile.write('
Relevant HTTP Headers
')
for header in importantHeaders:
value = headers.get(header)
if value:
self.wfile.write('
'\
% (header, 'header not set'))
self.wfile.write('
')
########################################################
# Perform match with multiple http headers
########################################################
match = provider.getMatch(httpHeaders)
########################################################
# Output properties
########################################################
self.outputProperties(match,
propertiesHyperLinkHeaders,
methodHyperLinkHeaders)
#######################################################
# End html formatting
#######################################################
self.wfile.write('
')
self.wfile.write('')
self.wfile.write('')
#########################################################
# Function which outputs match properties in table
#########################################################
def outputProperties(self, match, propertiesHyperLink, methodHyperLink):
self.wfile.write('
')
self.wfile.write('
Device Properties
%s
' % (len(properties.split(',')) + 1,
propertiesHyperLink))
for property in properties.split(','):
value = ' '.join(match.getValues(property))
if value:
self.wfile.write('