1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# Slixmpp: The Slick XMPP Library
# Copyright (C) 2010 Nathanael C. Fritz, Erik Reuterborg Larsson
# This file is part of Slixmpp.
# See the file LICENSE for copying permission.
import logging
import slixmpp
from slixmpp.plugins.base import BasePlugin
from slixmpp.xmlstream import register_stanza_plugin
from slixmpp.plugins.xep_0080 import stanza, Geoloc
log = logging.getLogger(__name__)
class XEP_0080(BasePlugin):
"""
XEP-0080: User Location
"""
name = 'xep_0080'
description = 'XEP-0080: User Location'
dependencies = {'xep_0163'}
stanza = stanza
def plugin_end(self):
self.xmpp['xep_0163'].remove_interest(Geoloc.namespace)
self.xmpp['xep_0030'].del_feature(feature=Geoloc.namespace)
def session_bind(self, jid):
self.xmpp['xep_0163'].register_pep('user_location', Geoloc)
def publish_location(self, **kwargs):
"""
Publish the user's current location.
:param accuracy: Horizontal GPS error in meters.
:param alt: Altitude in meters above or below sea level.
:param area: A named area such as a campus or neighborhood.
:param bearing: GPS bearing (direction in which the entity is
heading to reach its next waypoint), measured in
decimal degrees relative to true north.
:param building: A specific building on a street or in an area.
:param country: The nation where the user is located.
:param countrycode: The ISO 3166 two-letter country code.
:param datum: GPS datum.
:param description: A natural-language name for or description of
the location.
:param error: Horizontal GPS error in arc minutes. Obsoleted by
the accuracy parameter.
:param floor: A particular floor in a building.
:param lat: Latitude in decimal degrees North.
:param locality: A locality within the administrative region, such
as a town or city.
:param lon: Longitude in decimal degrees East.
:param postalcode: A code used for postal delivery.
:param region: An administrative region of the nation, such
as a state or province.
:param room: A particular room in a building.
:param speed: The speed at which the entity is moving,
in meters per second.
:param street: A thoroughfare within the locality, or a crossing
of two thoroughfares.
:param text: A catch-all element that captures any other
information about the location.
:param timestamp: UTC timestamp specifying the moment when the
reading was taken.
:param uri: A URI or URL pointing to information about
the location.
:param options: Optional form of publish options.
"""
options = kwargs.get('options', None)
ifrom = kwargs.get('ifrom', None)
callback = kwargs.get('callback', None)
timeout = kwargs.get('timeout', None)
timeout_callback = kwargs.get('timeout_callback', None)
for param in ('ifrom', 'block', 'callback', 'timeout', 'options', 'timeout_callback'):
if param in kwargs:
del kwargs[param]
geoloc = Geoloc()
geoloc.values = kwargs
return self.xmpp['xep_0163'].publish(geoloc,
options=options,
ifrom=ifrom,
callback=callback,
timeout=timeout,
timeout_callback=timeout_callback)
def stop(self, ifrom=None, callback=None, timeout=None, timeout_callback=None):
"""
Clear existing user location information to stop notifications.
"""
geoloc = Geoloc()
return self.xmpp['xep_0163'].publish(geoloc,
ifrom=ifrom,
callback=callback,
timeout=timeout,
timeout_callback=None)
|