Skip to main content

WSGI Middleware and web framework extensions for handling User-Agent.

Project description

WSGI Middleware and web framework extensions for handling User-Agent. Thanks to woothee , UADetector supports various User-Agents. This library respects to k0kubun/rack-user_agent .

travis coveralls.io latest version license

Installation

$ pip install uadetector

Usage

WSGI middleware

This middleware provides a uadetector.useragent.UserAgent object to handling User-agents.

from wsgiref.simple_server import make_server

# import middleware
from uadetector import UADetector

def app(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])

    # get 'UserAgent' object from environ dict.
    ua = environ.get('uadetector.useragent')

    ua.user_agent       #=> "Mozilla/5.0 (Macintosh; ..."
    ua.device_type      #=> "pc"
    ua.os               #=> "Mac OSX"
    ua.browser          #=> "Chrome"
    ua.from_pc          #=> True
    ua.from_smartphone  #=> False

    return [ua.os.encoding('utf-8')]

# Apply middleware
application = UADetector(app)

if __name__ == "__main__":
    with make_server('127.0.0.1', 8000, application) as server:
        print("Serving on port 8000...")
        server.serve_forever()

You can also replace the key of environ or the UserAgent class.

from uadetector.useragent import UserAgent

class MyUserAgent(UserAgent):
     # Write your custom codes.

# Apply middleware
application = UADetector(
   app,
   envorion_key='your.favorite.key'
   useragent_class='path.to.MyUserAgent'
)

See also WSGI example.

Web framework extensions

Some web frameworks provide a way to extend in a different way from WSGI Middleware. We provide shortcuts according to that way.

Caution: I do not actively support individual frameworks. If you are worried, you should use WSGIMiddleware.

Django

You can use Django’s MIDDLEWARE.

# settings.py

MIDDLEWARE = [
   # Add UADetecorMiddleware
   'uadetector.django.middleware.UADetectorMiddleware',
   # ... omit ...
]
# views.py

def index_view(request):
    print(request.ua.from_smartphone) # => True or False
    # ... omit ...

Customize property name of request object and replace UserAgent class.

# settings.py

UADETECTOR_REQUEST_PROPERTY_NAME = 'agent' # => You can use "request.agent"
UADETECTOR_USERAGENT_CLASS = 'path.to.MyUserAgent'

See also Dajngo example.

Pyramid

You can use config.add_request_method.

from uadetector.pyramid import ua_prop


def index(request):
    print(request.ua.from_smartphone) # => True or False
    # ... omit ...


with Configurator() as config:
    config.add_route('index', '/')
    config.add_view(index, route_name='index')

    config.add_request_method(ua_prop(), name='ua', reify=True)
    # ... omit ...

Customize property name of request object and replace UserAgent class.

config.add_request_method(
    ua_prop('path.to.MyUserAgent'),
    name='agent',  # => You can use "request.agent"
    reify=True
)

See also Pyramid example.

Flask

You can use Flask Extension.

from flask import Flask, request
from uadetector.flask import UADetector

app = Flask(__name__)
UADetector(app)

@app.route('/')
def index():
    print(request.ua.from_smartphone) # => True or False
    # ... omit ...

Customize property name of request object and replace UserAgent class.

app = Flask(__name__)

app.config['UADETECTOR_USERAGENT_CLASS'] = 'path.to.MyUserAgent'
app.config['UADETECTOR_REQUEST_PROPERTY_NAME'] = 'agent' # => You can use "request.agent"

UADetector(app)

See also Flask example.

Tornado

You can use custom RequestHandler.

from uadetector.tornado.web import RequestHandler

class IndexHandler(RequestHandler):

    def get(self):
        print(self.request.ua.from_smartphone) # => True or False
        # ... omit ...

Customize property name of request object and replace UserAgent class.

from tornado.options import define
from uadetector.tornado.web import RequestHandler

define(
    'uadetector_request_property_name',
    default='agent', # => You can use "self.request.agent"
)
define(
    'uadetector_useragent_class',
    default='path.to.MyUserAgent'
)

class IndexHandler(RequestHandler):

See also Tornado example.

UserAgent

List of properties of uadetector.useragent.UserAgent object.

attrs

  • UserAgent.device_variant

  • UserAgent.device_type

  • UserAgent.os

  • UserAgent.os_version

  • UserAgent.browser

  • UserAgent.browser_version

  • UserAgent.browser_vendor

helpers

  • UserAgent.from_pc

  • UserAgent.from_smartphone

  • UserAgent.from_mobilephone

  • UserAgent.from_appliance

  • UserAgent.from_crawler

detectors

  • UserAgent.smartphone_version

  • UserAgent.from_iphone

  • UserAgent.from_ipad

  • UserAgent.from_ipod

  • UserAgent.from_android

  • UserAgent.from_android_tablet

  • UserAgent.from_windows_phone

  • UserAgent.from_ios

  • UserAgent.from_android_os

Tips

If you want a UserAgent object simply from the User-Agent string, Please use get_useruseragent.

from uadetector import get_useragent

ua_string = "Mozilla/5.0 (iPhone; CPU iPhone OS ..."

ua = get_useragent(ua_string)
us.from_smartphone # => True

# Use custom useragent class
ua = get_useragent(ua_string, useragent_class='path.to.MyUserAgent')

Support

Support latest 3 minor versions.

  • Python 3.4, 3.5, 3.6

  • Django 1.10, 1.11, 2.0

  • Pyramid 1.7, 1.8, 1.9

  • Flask 0.10, 0.11, 0.12

  • Tornado 4.5, 4.6, 4.7

License

MIT License

Authors

  • tell-k <ffk2005 at gmail.com>

History

0.1.2(Feb 19, 2018)

  • First release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uadetector-0.1.2.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

uadetector-0.1.2-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file uadetector-0.1.2.tar.gz.

File metadata

  • Download URL: uadetector-0.1.2.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for uadetector-0.1.2.tar.gz
Algorithm Hash digest
SHA256 4b20a00b5093e274359f0b34b485fd224ca45330267f57546be4b30d667256dd
MD5 98b5dea52e55cb39daf9c1d8bc9fbe3c
BLAKE2b-256 8e7cfda73e2a580cf004bfa4026706b7fe7e6ceac913f3bfd03631db3eada5fb

See more details on using hashes here.

File details

Details for the file uadetector-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for uadetector-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 62d5197e3f03ea89a22f2bd33467379e4328d39582b6040015298bc4c86e786f
MD5 e11c70a5a7fc73642a6b549ad01273f0
BLAKE2b-256 95fe5ccc74eb340fbbc8140d564d742fcafc794457a8cbf8fe6de6104b083dc0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page