File: location.py

package info (click to toggle)
python-pypump 0.3%2Bgit20130823.1.97bffc6-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 328 kB
  • ctags: 333
  • sloc: python: 1,630; makefile: 140; sh: 7
file content (71 lines) | stat: -rw-r--r-- 2,351 bytes parent folder | download
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
##
# Copyright (C) 2013 Jessica T. (Tsyesika) <xray7224@googlemail.com>
# 
# This program is free software: you can redistribute it and/or modify 
# it under the terms of the GNU General Public License as published by 
# the Free Software Foundation, either version 3 of the License, or 
# (at your option) any later version. 
# 
# This program is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
# GNU General Public License for more details. 
# 
# You should have received a copy of the GNU General Public License 
# along with this program. If not, see <http://www.gnu.org/licenses/>.
##

from pypump.models import AbstractModel
from pypump.compatability import *

@implement_to_string
class Location(AbstractModel):

    name = None
    longitude = None
    latitude = None

    def __init__(self, name, longitude, latitude, *args, **kwargs):
        super(Location, self).__init__(*args, **kwargs)
        self.name = name
        self.longitude = longitude
        self.latitude = latitude

    def __repr__(self):
        return "<{type} {name}>".format(type=self.TYPE, name=self.name)

    def __str__(self):
        return str(self.__repr__())

    @classmethod
    def unserialize(cls, data, obj=None):
        name = data.get("displayName", None)
        
        if ("lon" in data and "lat" in data):
            longitude = float(data["lon"])
            latitude = float(data["lat"])
        
        elif "position" in data:
            position = data["position"][:-1]
            if position[1:].find("+") != -1:
                latitude = position.lstrip("+").split("+", 1)[0]
                latitude = float(latitude)

                longitude = float(position[1:].split("+", 1)[1])
            else:
                latitude = position.lstrip("+").split("-", 1)[0]
                latitude = float(latitude)

                longitude = float(position[1:].split("-", 1)[1])               

        else:
            longitude = None
            latitude = None

        if obj is None:
            return cls(name=name, longitude=longitude, latitude=latitude)
        else:
            obj.name = name
            obj.longitude = longitude
            obj.latitude = latitude
            return obj