Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tutorius/store.py
blob: 480c81b7960ba6bc8df896bb4a2e80a68bf47a53 (plain)
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# Copyright (C) 2009, Tutorius.org
#
# 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 2 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, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

import urllib

class StoreProxy(object):
    """
    Implements a communication channel with the Tutorius Store, where tutorials
    are shared from around the world. This proxy is meant to offer a one-stop
    shop to implement all the requests that could be made to the Store.
    """

    def get_categories(self):
        """
        Returns all the categories registered in the store. Categories are used to
        classify tutorials according to a theme. (e.g. Mathematics, History, etc...)

        @return The list of category names stored on the server.
        """
        raise NotImplementedError("get_categories() not implemented")

    def get_tutorials(self, keywords=None, category=None, startIndex=0, numResults=10, sortBy='name'):
        """
        Returns the list of tutorials that correspond to the given search criteria.

        @param keywords The list of keywords that should be matched inside the tutorial title
                        or description. If None, the search will not filter the results
                        according to the keywords.
        @param category The category in which to restrict the search.
        @param startIndex The index in the result set from which to return results. This is
                            used to allow applications to fetch results one set at a time.
        @param numResults The max number of results that can be returned
        @param sortBy The field on which to sort the results
        @return A list of tutorial meta-data that corresponds to the query
        """
        raise NotImplementedError("get_tutorials() not implemented")

    def get_tutorial_collection(self, collection_name):
        """
        Returns a list of tutorials corresponding to the given collection name.
        Collections can be groups like '5 most downloaded' or 'Top 10 ratings'.

        @param collection_name The name of the collection from which we want the
                                meta-data
        @return A list of tutorial meta-data corresponding to the given group
        """
        raise NotImplementedError("get_tutorial_collection() not implemented... yet!")

    def get_latest_version(self, tutorial_id_list):
        """
        Returns the latest version number on the server, for each tutorial ID
        in the list.

        @param tutorial_id_list The list of tutorial IDs from which we want to
                                known the latest version number.
        @return A dictionary having the tutorial ID as the key and the version 
                as the value.
        """
        raise NotImplementedError("get_latest_version() not implemented")

    def download_tutorial(self, tutorial_id, version=None):
        """
        Fetches the tutorial file from the server and returns the 

        @param tutorial_id The tutorial that we want to get
        @param version The version number that we want to download. If None,
                        the latest version will be downloaded.
        @return The downloaded file itself (an in-memory representation of the file,
                not a path to it on the disk)

        TODO : We should decide if we're saving to disk or in mem.
        """
        raise NotImplementedError("downloadTutorial() not implemented")

    def login(self, username, password):
        """
        Logs in the user on the store and saves the login status in the proxy
        state. After a successful logon, the operation requiring a login will
        be successful.

        @return True if the login was successful, False otherwise
        """
        raise NotImplementedError("login() not implemented yet")

    def close_session(self):
        """
        Ends the user's session on the server and changes the state of the proxy
        to disallow the calls to the store that requires to be logged in.
        
        @return True if the user was disconnected, False otherwise
        """
        raise NotImplementedError("close_session() not implemented yet")

    def get_session_id(self):
        """
        Gives the current session ID cached in the Store Proxy, or returns
        None is the user is not logged yet.

        @return The current session's ID, or None if the user is not logged
        """
        raise NotImplementedError("get_session_id() not implemented yet")

    def rate(self, value, tutorial_store_id):
        """
        Sends a rating for the given tutorial.

        This function requires the user to be logged in.

        @param value The value of the rating. It must be an integer with a value 
                    from 1 to 5.
        @param tutorial_store_id The ID of the tutorial that was rated
        @return True if the rating was sent to the Store, False otherwise.
        """
        raise NotImplementedError("rate() not implemented")

    def publish(self, tutorial):
        """
        Sends a tutorial to the store.

        This function requires the user to be logged in.
        
        @param tutorial The tutorial file to be sent. Note that this is the 
                        content itself and not the path to the file.
        @return True if the tutorial was sent correctly, False otherwise.
        """
        raise NotImplemetedError("publish() not implemented")

    def unpublish(self, tutorial_store_id):
        """
        Removes a tutorial from the server. The user in the current session
        needs to be the creator for it to be unpublished. This will remove 
        the file from the server and from all its collections and categories.

        This function requires the user to be logged in.

        @param tutorial_store_id The ID of the tutorial to be removed
        @return True if the tutorial was properly removed from the server
        """
        raise NotImplementedError("unpublish() not implemeted")

    def update_published_tutorial(self, tutorial_id, tutorial):
        """
        Sends the new content for the tutorial with the given ID.

        This function requires the user to be logged in.

        @param tutorial_id The ID of the tutorial to be updated
        @param tutorial The bundled tutorial file content (not a path!)
        @return True if the tutorial was sent and updated, False otherwise
        """
        raise NotImplementedError("update_published_tutorial() not implemented yet")

    def register_new_user(self, user_info):
        """
        Creates a new user from the given user information. 
        
        @param user_info A structure containing all the data required to do a login.
        @return True if the new account was created, false otherwise
        """
        raise NotImplementedError("register_new_user() not implemented")