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 106 107 108 109 110 111
|
##
# 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/>.
##
import json
from pypump.models import AbstractModel
from pypump.exception import PyPumpException
from pypump.compatability import *
@implement_to_string
class List(AbstractModel):
TYPE = "Collection"
ENDPOINT = "api/user/{username}/lists/{name}"
id = None
name = None
def __init__(self, name, id=None, *args, **kwargs):
self.name = name
self.id = self.id if id is None else id
if self.id is None and self.name:
user_lists = self.all()
for user_list in user_lists:
if user_list.name == self.name:
self.id = user_list.id
if self.id is None:
error = "Can't find list with name {0!r} (Lists found: {1})".format(
self.name,
", ".join(user_lists))
PyPumpException(error)
super(List, self).__init__(*args, **kwargs)
@classmethod
def all(cls):
""" Lists all of the users lists """
data = cls._pump.request(cls.ENDPOINT.format(
username=cls._pump.nickname,
name="person"
))
lists = list()
for item in data["items"]:
lists.append(cls.unserialize(item))
return lists
def serialize(self, as_dict=False):
""" Serializes data out to server """
data = {
"id": self.id,
"objectType": self.objectType,
}
if as_dict:
return data
return json.dumps(data)
@classmethod
def unserialize(cls, data, obj=None):
""" Takes data from the server and builds list """
id = data["id"]
name = data["displayName"]
if obj is None:
obj = cls(name=name, id=id)
else:
obj.id = id
obj.name = name
return obj
class Public(List):
ENDPOINT = "http://activityschema.org/collection/public"
def __init__(self, *args, **kwargs):
self.id = self.ENDPOINT
super(Public, self).__init__(name=self.TYPE, *args, **kwargs)
class Followers(List):
ENDPOINT = "api/user/{username}/followers"
def __init__(self, *args, **kwargs):
self.ENDPOINT = self._pump.build_url(self.ENDPOINT.format(username=self._pump.nickname))
self.id = self.ENDPOINT
super(Followers, self).__init__(name=self.TYPE, *args, **kwargs)
class Following(List):
ENDPOINT = "api/user/{username}/following"
def __init__(self, *args, **kwargs):
self.ENDPOINT = self._pump.build_url(self.ENDPOINT.format(username=self._pump.nickname))
self.id = self.ENDPOINT
super(Following, self).__init__(name=self.TYPE, *args, **kwargs)
|