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
103
104
105
|
"""
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)
|