11 |
--------------------------------------------------------------------------------
/doc/faq.txt:
--------------------------------------------------------------------------------
1 | FAQ
2 | ===
3 |
4 | * First and foremost: why did you take the burden to translate the already mighty Tinder?
5 |
6 | We needed a way to integrate Campfire chats into our web application so instead of monkey patching some crappy code in a hurry I ported the whole thing to Python in a couple of hours. I think that's the right call. I could have write some glue code to make Django and Tinder communicate but the idea sucked to me.
7 |
8 | That's it.
9 |
--------------------------------------------------------------------------------
/test/fixtures/chat_rooms_empty.html:
--------------------------------------------------------------------------------
1 |
\n\n", messageHistory: 100, speakURL: "http://sample.campfirenow.com/room/12345/speak", soundsEnabled: true, pollURL: "/poll.fcgi", transcriptElement: "chat", scrollToBottom: true, "membershipKey": "ea243569b02d3129"});
8 | /* ]]> */
9 |
--------------------------------------------------------------------------------
/test/runtests.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python
2 | import os
3 | import sys
4 | import unittest
5 |
6 | if __name__ == "__main__":
7 | __file__ = sys.argv[0]
8 |
9 | TESTDIR = os.path.dirname(os.path.abspath(__file__))
10 | TOPDIR = os.path.dirname(TESTDIR)
11 |
12 | def load_test_files():
13 | test_files = []
14 | for f in os.listdir(TESTDIR):
15 | if f.startswith('test_') and f.endswith('.py'):
16 | test_files.append(os.path.splitext(f)[0])
17 | return test_files
18 |
19 | if __name__ == "__main__":
20 | if TOPDIR not in sys.path:
21 | sys.path.insert(0, TOPDIR)
22 | sys.path.insert(0, TESTDIR)
23 | suite = unittest.defaultTestLoader.loadTestsFromNames(load_test_files())
24 | try:
25 | v = sys.argv[1]
26 | except:
27 | v = 1
28 | runner = unittest.TextTestRunner(verbosity=int(v))
29 | runner.run(suite)
30 |
--------------------------------------------------------------------------------
/PKG-INFO:
--------------------------------------------------------------------------------
1 | Metadata-Version: 1.0
2 | Name: pinder
3 | Version: 0.6.5
4 | Summary: Python API for Campfire.
5 | Home-page: http://dev.oluyede.org/pinder/
6 | Author: Lawrence Oluyede
7 | Author-email: l.oluyede@gmail.com
8 | License: BSD
9 | Download-URL: http://dev.oluyede.org/download/pinder/0.6.5/
10 | Description: UNKNOWN
11 | Platform: UNKNOWN
12 | Classifier: Development Status :: 4 - Beta
13 | Classifier: Environment :: Console
14 | Classifier: Environment :: Web Environment
15 | Classifier: Intended Audience :: Developers
16 | Classifier: License :: OSI Approved :: BSD License
17 | Classifier: Natural Language :: English
18 | Classifier: Operating System :: MacOS :: MacOS X
19 | Classifier: Operating System :: Microsoft :: Windows
20 | Classifier: Operating System :: POSIX
21 | Classifier: Programming Language :: Python
22 | Classifier: Topic :: Communications :: Chat
23 | Classifier: Topic :: Internet :: WWW/HTTP
24 | Classifier: Topic :: Software Development :: Libraries
25 | Classifier: Topic :: Software Development :: Libraries :: Python Modules
26 |
--------------------------------------------------------------------------------
/README.txt:
--------------------------------------------------------------------------------
1 | Pinder 0.6.5
2 | ============
3 |
4 | Pinder is a client library for Campfire, the chat application from 37Signals.
5 |
6 | You can find Campfire here:
7 |
8 | Requirements
9 | ------------
10 |
11 | * Python 2.3+
12 | * BeautifulSoup >= 3.0.4
13 | * httplib2 >= 0.3.0
14 |
15 | Installation
16 | ------------
17 |
18 |
19 | $ easy_install -U BeautifulSoup
20 | $ easy_install -U httplib2
21 |
22 | Then:
23 |
24 | $ easy_install -U pinder
25 |
26 | - OR -
27 |
28 | Get the latest version from , unpack it, go inside the new directory and type the following in the shell:
29 |
30 | $ python setup.py install
31 |
32 |
33 | Documentation
34 | -------------
35 |
36 | See doc/usage.txt for usage documentation and doc/api/pinder.html for the API doc. There's also a faq in doc/faq.txt.
37 |
38 |
39 | Many thanks to Brandon Keepers for Tinder.
40 |
41 | Subversion access
42 | -----------------
43 |
44 | See
45 |
--------------------------------------------------------------------------------
/NEWS.txt:
--------------------------------------------------------------------------------
1 | Pinder 0.6.5 [May 18 2007]:
2 | - BACKWARDS INCOMPATIBLE CHANGE: BeautifulSoup and httplib2 are no longer
3 | distributed with Pinder. You have to install them separately.
4 |
5 | - Fixed a bug in Room.leave()
6 |
7 | - Fixed a couple of bugs in the tests
8 |
9 | - Room objects now have ping() to ping the server and topic() to retrieve
10 | the topic of the room
11 |
12 | Pinder 0.6.0 [Apr 08 2007]:
13 | - Campfire objects now have rooms() and rooms_names() methods to get the
14 | list of the associated room objects and the names of all the rooms
15 |
16 | - Campfire objects also have find_or_create_room_by_name(), an helper
17 | method which combine find_room_by_name() and create_room()
18 |
19 | - The whole library has been updated to httlibp2 0.3.0
20 |
21 | - A proper user agent is sent during the requests
22 |
23 | - Room objects now have guest_access_enabled() to know if the guests can
24 | enter that room
25 |
26 | - The support for transcripts has been added throughout the library. See
27 | the changelog for details.
28 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 |
3 | from distutils.core import setup
4 |
5 | from pinder import __version__
6 |
7 | setup(
8 | name='pinder',
9 | version=__version__,
10 | description='Python API for Campfire.',
11 | license='BSD',
12 | author='Lawrence Oluyede',
13 | author_email='l.oluyede@gmail.com',
14 | url='http://dev.oluyede.org/pinder/',
15 | download_url='http://dev.oluyede.org/download/pinder/0.6.5/',
16 | packages=['pinder'],
17 | classifiers=[
18 | 'Development Status :: 4 - Beta',
19 | 'Environment :: Console',
20 | 'Environment :: Web Environment',
21 | 'Intended Audience :: Developers',
22 | 'License :: OSI Approved :: BSD License',
23 | 'Natural Language :: English',
24 | 'Operating System :: MacOS :: MacOS X',
25 | 'Operating System :: Microsoft :: Windows',
26 | 'Operating System :: POSIX',
27 | 'Programming Language :: Python',
28 | 'Topic :: Communications :: Chat',
29 | 'Topic :: Internet :: WWW/HTTP',
30 | 'Topic :: Software Development :: Libraries',
31 | 'Topic :: Software Development :: Libraries :: Python Modules',
32 | ]
33 | )
34 |
--------------------------------------------------------------------------------
/doc/api/redirect.html:
--------------------------------------------------------------------------------
1 | Epydoc Redirect Page
2 |
3 |
4 |
5 |
6 |
7 |
8 |
18 |
19 |
Epydoc Auto-redirect page
20 |
21 |
When javascript is enabled, this page will redirect URLs of
22 | the form redirect.html#dotted.name to the
23 | documentation for the object with the given fully-qualified
24 | dotted name.
25 |
26 |
27 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/test/utils.py:
--------------------------------------------------------------------------------
1 | import os
2 | from runtests import TESTDIR
3 |
4 | FIXTURE = 'default'
5 |
6 | class MockResponse(object):
7 | def __init__(self):
8 | self.status = 200
9 | self.headers = {
10 | 'location': '/foobar',
11 | 'set-cookie': 'cookie',
12 | }
13 | self.fixture = ''
14 |
15 | def getheader(self, header_name, default=None):
16 | return self.headers.get(header_name)
17 | get = getheader
18 |
19 | def read(self):
20 | path = os.path.join(TESTDIR, "fixtures/%s.html" % FIXTURE)
21 | return open(path).read()
22 |
23 | class MockHttplib2Response(MockResponse):
24 | def __init__(self, info):
25 | self.status = info.status
26 | self.headers = info.headers
27 | self.fixture = ''
28 |
29 | def has_key(self, key):
30 | return self.__contains__(key)
31 |
32 | def __iter__(self):
33 | return iter(self.headers.keys())
34 |
35 | def __contains__(self, item):
36 | return item in self.headers
37 |
38 | def __getitem__(self, item):
39 | item = self.headers.get(item)
40 | if not item:
41 | raise KeyError(item)
42 |
43 | def __setitem__(self, key, value):
44 | self.headers[key] = value
45 |
--------------------------------------------------------------------------------
/CHANGELOG.txt:
--------------------------------------------------------------------------------
1 | * May 18 2008: Pinder 0.6.5: third public release.
2 |
3 | * May 18 2008: trunk: Removed BeautifulSoup and httplib2 from internal packaging, now they are required dependencies
4 |
5 | * Feb 16 2008: trunk: Added a method to retrieve the topic of the room
6 |
7 | * Jan 27 2008: trunk: The interval to ping the server should be less than 60
8 |
9 | * Dec 26 2007: trunk:
10 | - Updated prototype.js version
11 | - Added room.ping() to ping the server
12 |
13 | * Sep 01 2007: trunk:
14 | - Fixed a problem in the fake response object
15 | - Added a proper mapping implementation in the fake object
16 |
17 | * Apr 14 2007: trunk: fixed a bug in room.leave() (thanks to Pinder codebase)
18 |
19 | * Apr 10 2007: trunk: Updated BeautifulSoup to 3.0.4
20 |
21 | * Apr 08 2007: Pinder 0.6.0: second public release.
22 |
23 | * Apr 08 2007: trunk:
24 | - Fixed room regexp
25 | - Added support for transcripts:
26 | - Campfire.transcripts()
27 | - Room.transcripts()
28 | - Room.transcript()
29 |
30 | * Apr 03 2007: trunk:
31 | - pinder now sends a proper user agent.
32 | - Added guest_access_enabled() to the public API.
33 | - Little fix in toggle_guest_access().
34 |
35 | * Mar 10 2007: trunk: Updated pinder to httplib2 0.3.0.
36 |
37 | * Mar 09 2007: trunk: Added find_or_create_room_by_name() to the public API.
38 |
39 | * Mar 07 2007: trunk: Added rooms_names() and rooms() to the public API.
40 |
41 | * Mar 07 2007: Pinder 0.5.0: first public release.
42 |
--------------------------------------------------------------------------------
/LICENSE.txt:
--------------------------------------------------------------------------------
1 | Copyright (c) 2007, Lawrence Oluyede
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
5 |
6 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8 | * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
9 |
10 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/test/test_room.py:
--------------------------------------------------------------------------------
1 | from httplib import HTTPConnection
2 | import unittest
3 |
4 | from pinder import Campfire, Room
5 | import utils
6 |
7 |
8 | class RoomTest(unittest.TestCase):
9 | def setUp(self):
10 | self.response = utils.MockResponse()
11 | self.campfire = Campfire('foobar')
12 | self.room = Room(self.campfire, 12345, 'Room 1')
13 | self.campfire = Campfire('foobar')
14 | response = self.response
15 | HTTPConnection.request = lambda self, m, l, b, h: None
16 | HTTPConnection.getresponse = lambda self: response
17 |
18 | def test_join(self):
19 | utils.FIXTURE = 'room_info'
20 | self.assertEqual(True, self.room.join())
21 | self.assertEqual(True, self.room.join(force=True))
22 |
23 | def test_join_nospaces(self):
24 | utils.FIXTURE = 'room_info_nospaces'
25 | self.assertEqual(True, self.room.join())
26 | self.assertEqual(True, self.room.join(force=True))
27 |
28 | def test_guest_url_no_guest_url(self):
29 | utils.FIXTURE = 'no_guest_url'
30 | self.assert_(self.room.guest_url() is None)
31 |
32 | def test_guest_url(self):
33 | utils.FIXTURE = 'guest_url'
34 | self.assertEqual('http://sample.campfirenow.com/99d14',
35 | self.room.guest_url())
36 |
37 | def test_guest_invite_code_no_guest_url(self):
38 | utils.FIXTURE = 'no_guest_url'
39 | self.assert_(self.room.guest_invite_code() is None)
40 |
41 | def test_guest_invite_code(self):
42 | utils.FIXTURE = 'guest_url'
43 | self.assertEqual('99d14', self.room.guest_invite_code())
44 |
45 | def test_transcripts(self):
46 | utils.FIXTURE = 'transcripts'
47 | transcripts = self.room.transcripts()
48 | self.assertEqual(1, len(transcripts))
49 |
50 |
51 | if __name__ == '__main__':
52 | unittest.main()
53 |
--------------------------------------------------------------------------------
/doc/usage.txt:
--------------------------------------------------------------------------------
1 | ============
2 | User's guide
3 | ============
4 |
5 | Pinder is a straightforward Python API to *script* Campfire_, the web 2.0 chat application kindly brought to us by the 37signals_ team.
6 |
7 | Usage is all but rocket science so I'm gonna show you its full power in its simplicity. Thanks to `Brandon Keepers`_ for Tinder_.
8 |
9 | Connect and login to the server
10 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
11 |
12 | ::
13 |
14 | >>> c = Campfire('subdomain')
15 | >>> c.login('john@doe.com', 'secret')
16 |
17 | Any need to explain? I don't think so. We shall move on.
18 |
19 | Find the proper room
20 | ~~~~~~~~~~~~~~~~~~~~
21 |
22 | ::
23 |
24 | >>> room = c.find_room_by_name('Jonz Room')
25 |
26 | Only remember that *None* will be returned if you accidentally type in the wrong name. Ouch!
27 |
28 | Poke with the room itself!
29 | ~~~~~~~~~~~~~~~~~~~~~~~~~~
30 |
31 | ::
32 |
33 | >>> print room.users()
34 | set([u'Alice'])
35 |
36 | As you can see you get back a **set** of the people talking about wild stuff in *Jonz Room*. You can also, while you are at it know the name of all the chatters in your Campfire subdomain::
37 |
38 | >>> print c.users()
39 | set([u'Alice', u'Bob'])
40 |
41 | Seems Alice and Bob don't enjoy each other company any more! We don't like ladies to feel so alone so let's tell Alice she isn't::
42 |
43 | >>> room.speak("I'm working hard to get you out of there. Keep strong!")
44 | I'm working hard to get you out of there. Keep strong!
45 |
46 | Then you can leave the room::
47 |
48 | >>> room.leave()
49 |
50 | or destroy Alice hopes::
51 |
52 | >>> room.destroy()
53 |
54 | and create your own love's nest::
55 |
56 | >>> c.create_room("Love's Nest", topic='No pun intended')
57 |
58 | Room eavesdropping!
59 | ~~~~~~~~~~~~~~~~~~~
60 |
61 | You can peek inside the room reading the transcripts this way::
62 |
63 | >>> dates_of_transcripts = room.transcripts()
64 | >>> print room.transcript(dates_of_transcripts[0]) # last transcript
65 | [{'person': u'Bob B.', 'message': u'Are you spying on me?', 'user_id': u'1234567', 'id': u'19343281'}]
66 |
67 | Logout
68 | ~~~~~~
69 |
70 | When you are done playing you can simply logout::
71 |
72 | >>> c.logout()
73 |
74 | and say farewell to Alice.
75 |
76 | ps. I think we forgot about Bob, but who cares?
77 |
78 | Extra
79 | ~~~~~
80 |
81 | You can lock yourself in the room if you really want to but it's sad so I won't mention how to that. If you're absolutely certain about it go read the boring `API doc`_ where you can find other secret combos :-)
82 |
83 | .. _Campfire: http://wwww.campfirenow.com/
84 | .. _37signals: http://www.37signals.com/
85 | .. _`Brandon Keepers`: http://opensoul.org/
86 | .. _Tinder: http://rubyforge.org/projects/tinder
87 | .. _`API doc`: http://dev.oluyede.org/pinder/api_doc/
88 |
--------------------------------------------------------------------------------
/doc/api/api-objects.txt:
--------------------------------------------------------------------------------
1 | pinder pinder-module.html
2 | pinder.campfire pinder.campfire-module.html
3 | pinder.room pinder.room-module.html
4 | pinder.campfire.Campfire pinder.campfire.Campfire-class.html
5 | pinder.campfire.Campfire._get_rooms_markup pinder.campfire.Campfire-class.html#_get_rooms_markup
6 | pinder.campfire.Campfire._verify_response pinder.campfire.Campfire-class.html#_verify_response
7 | pinder.campfire.Campfire._perform_request pinder.campfire.Campfire-class.html#_perform_request
8 | pinder.campfire.Campfire.create_room pinder.campfire.Campfire-class.html#create_room
9 | pinder.campfire.Campfire.rooms pinder.campfire.Campfire-class.html#rooms
10 | pinder.campfire.Campfire.rooms_names pinder.campfire.Campfire-class.html#rooms_names
11 | pinder.campfire.Campfire.__init__ pinder.campfire.Campfire-class.html#__init__
12 | pinder.campfire.Campfire.logged_in pinder.campfire.Campfire-class.html#logged_in
13 | pinder.campfire.Campfire._parse_transcript_date pinder.campfire.Campfire-class.html#_parse_transcript_date
14 | pinder.campfire.Campfire.subdomain pinder.campfire.Campfire-class.html#subdomain
15 | pinder.campfire.Campfire.users pinder.campfire.Campfire-class.html#users
16 | pinder.campfire.Campfire._get pinder.campfire.Campfire-class.html#_get
17 | pinder.campfire.Campfire.logout pinder.campfire.Campfire-class.html#logout
18 | pinder.campfire.Campfire._room_id_from_uri pinder.campfire.Campfire-class.html#_room_id_from_uri
19 | pinder.campfire.Campfire.login pinder.campfire.Campfire-class.html#login
20 | pinder.campfire.Campfire._uri_for pinder.campfire.Campfire-class.html#_uri_for
21 | pinder.campfire.Campfire._post pinder.campfire.Campfire-class.html#_post
22 | pinder.campfire.Campfire._prepare_request pinder.campfire.Campfire-class.html#_prepare_request
23 | pinder.campfire.Campfire.find_or_create_room_by_name pinder.campfire.Campfire-class.html#find_or_create_room_by_name
24 | pinder.campfire.Campfire.uri pinder.campfire.Campfire-class.html#uri
25 | pinder.campfire.Campfire.find_room_by_name pinder.campfire.Campfire-class.html#find_room_by_name
26 | pinder.campfire.Campfire._filter_rooms_markup pinder.campfire.Campfire-class.html#_filter_rooms_markup
27 | pinder.campfire.Campfire.cookie pinder.campfire.Campfire-class.html#cookie
28 | pinder.campfire.Campfire.transcripts pinder.campfire.Campfire-class.html#transcripts
29 | pinder.room.Room pinder.room.Room-class.html
30 | pinder.room.Room.rename pinder.room.Room-class.html#rename
31 | pinder.room.Room._send pinder.room.Room-class.html#_send
32 | pinder.room.Room.lock pinder.room.Room-class.html#lock
33 | pinder.room.Room.topic pinder.room.Room-class.html#topic
34 | pinder.room.Room.unlock pinder.room.Room-class.html#unlock
35 | pinder.room.Room.id pinder.room.Room-class.html#id
36 | pinder.room.Room.__init__ pinder.room.Room-class.html#__init__
37 | pinder.room.Room.speak pinder.room.Room-class.html#speak
38 | pinder.room.Room.__eq__ pinder.room.Room-class.html#__eq__
39 | pinder.room.Room.ping pinder.room.Room-class.html#ping
40 | pinder.room.Room.toggle_guest_access pinder.room.Room-class.html#toggle_guest_access
41 | pinder.room.Room.change_name pinder.room.Room-class.html#change_name
42 | pinder.room.Room.destroy pinder.room.Room-class.html#destroy
43 | pinder.room.Room.guest_invite_code pinder.room.Room-class.html#guest_invite_code
44 | pinder.room.Room.change_topic pinder.room.Room-class.html#change_topic
45 | pinder.room.Room.paste pinder.room.Room-class.html#paste
46 | pinder.room.Room.users pinder.room.Room-class.html#users
47 | pinder.room.Room._get_room_data pinder.room.Room-class.html#_get_room_data
48 | pinder.room.Room.guest_url pinder.room.Room-class.html#guest_url
49 | pinder.room.Room.transcript pinder.room.Room-class.html#transcript
50 | pinder.room.Room.guest_access_enabled pinder.room.Room-class.html#guest_access_enabled
51 | pinder.room.Room.join pinder.room.Room-class.html#join
52 | pinder.room.Room.name pinder.room.Room-class.html#name
53 | pinder.room.Room.uri pinder.room.Room-class.html#uri
54 | pinder.room.Room.leave pinder.room.Room-class.html#leave
55 | pinder.room.Room.__repr__ pinder.room.Room-class.html#__repr__
56 | pinder.room.Room.transcripts pinder.room.Room-class.html#transcripts
57 |
--------------------------------------------------------------------------------
/doc/api/module-tree.html:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 | Module Hierarchy
7 |
8 |
9 |
10 |
11 |
13 |
14 |
This document contains the API (Application Programming Interface)
55 | documentation for Pinder. Documentation for the Python
56 | objects defined by the project is divided into separate pages for each
57 | package, module, and class. The API documentation also includes two
58 | pages containing information about the project as a whole: a trees
59 | page, and an index page.
60 |
61 |
Object Documentation
62 |
63 |
Each Package Documentation page contains:
64 |
65 |
A description of the package.
66 |
A list of the modules and sub-packages contained by the
67 | package.
68 |
A summary of the classes defined by the package.
69 |
A summary of the functions defined by the package.
70 |
A summary of the variables defined by the package.
71 |
A detailed description of each function defined by the
72 | package.
73 |
A detailed description of each variable defined by the
74 | package.
75 |
76 |
77 |
Each Module Documentation page contains:
78 |
79 |
A description of the module.
80 |
A summary of the classes defined by the module.
81 |
A summary of the functions defined by the module.
82 |
A summary of the variables defined by the module.
83 |
A detailed description of each function defined by the
84 | module.
85 |
A detailed description of each variable defined by the
86 | module.
87 |
88 |
89 |
Each Class Documentation page contains:
90 |
91 |
A class inheritance diagram.
92 |
A list of known subclasses.
93 |
A description of the class.
94 |
A summary of the methods defined by the class.
95 |
A summary of the instance variables defined by the class.
96 |
A summary of the class (static) variables defined by the
97 | class.
98 |
A detailed description of each method defined by the
99 | class.
100 |
A detailed description of each instance variable defined by the
101 | class.
102 |
A detailed description of each class (static) variable defined
103 | by the class.
104 |
105 |
106 |
Project Documentation
107 |
108 |
The Trees page contains the module and class hierarchies:
109 |
110 |
The module hierarchy lists every package and module, with
111 | modules grouped into packages. At the top level, and within each
112 | package, modules and sub-packages are listed alphabetically.
113 |
The class hierarchy lists every class, grouped by base
114 | class. If a class has more than one base class, then it will be
115 | listed under each base class. At the top level, and under each base
116 | class, classes are listed alphabetically.
117 |
118 |
119 |
The Index page contains indices of terms and
120 | identifiers:
121 |
122 |
The term index lists every term indexed by any object's
123 | documentation. For each term, the index provides links to each
124 | place where the term is indexed.
125 |
The identifier index lists the (short) name of every package,
126 | module, class, method, function, variable, and parameter. For each
127 | identifier, the index provides a short description, and a link to
128 | its documentation.
129 |
130 |
131 |
The Table of Contents
132 |
133 |
The table of contents occupies the two frames on the left side of
134 | the window. The upper-left frame displays the project
135 | contents, and the lower-left frame displays the module
136 | contents:
137 |
138 |
139 |
140 |
141 | Project Contents...
142 |
143 | API Documentation Frame
144 |
145 |
146 |
147 |
148 | Module Contents ...
149 |
150 |
151 |
152 |
153 |
The project contents frame contains a list of all packages
154 | and modules that are defined by the project. Clicking on an entry
155 | will display its contents in the module contents frame. Clicking on a
156 | special entry, labeled "Everything," will display the contents of
157 | the entire project.
158 |
159 |
The module contents frame contains a list of every
160 | submodule, class, type, exception, function, and variable defined by a
161 | module or package. Clicking on an entry will display its
162 | documentation in the API documentation frame. Clicking on the name of
163 | the module, at the top of the frame, will display the documentation
164 | for the module itself.
165 |
166 |
The "frames" and "no frames" buttons below the top
167 | navigation bar can be used to control whether the table of contents is
168 | displayed or not.
169 |
170 |
The Navigation Bar
171 |
172 |
A navigation bar is located at the top and bottom of every page.
173 | It indicates what type of page you are currently viewing, and allows
174 | you to go to related pages. The following table describes the labels
175 | on the navigation bar. Note that not some labels (such as
176 | [Parent]) are not displayed on all pages.
177 |
178 |
179 |
180 |
Label
181 |
Highlighted when...
182 |
Links to...
183 |
184 |
[Parent]
185 |
(never highlighted)
186 |
the parent of the current package
187 |
[Package]
188 |
viewing a package
189 |
the package containing the current object
190 |
191 |
[Module]
192 |
viewing a module
193 |
the module containing the current object
194 |
195 |
[Class]
196 |
viewing a class
197 |
the class containing the current object
198 |
[Trees]
199 |
viewing the trees page
200 |
the trees page
201 |
[Index]
202 |
viewing the index page
203 |
the index page
204 |
[Help]
205 |
viewing the help page
206 |
the help page
207 |
208 |
209 |
The "show private" and "hide private" buttons below
210 | the top navigation bar can be used to control whether documentation
211 | for private objects is displayed. Private objects are usually defined
212 | as objects whose (short) names begin with a single underscore, but do
213 | not end with an underscore. For example, "_x",
214 | "__pprint", and "epydoc.epytext._tokenize"
215 | are private objects; but "re.sub",
216 | "__init__", and "type_" are not. However,
217 | if a module defines the "__all__" variable, then its
218 | contents are used to decide which objects are private.
219 |
220 |
A timestamp below the bottom navigation bar indicates when each
221 | page was last updated.
55 | [
56 | A
57 | B
58 | C
59 | D
60 | E
61 | F
62 | G
63 | H
64 | I
65 | J
66 | K
67 | L
68 | M
69 | N
70 | O
71 | P
72 | Q
73 | R
74 | S
75 | T
76 | U
77 | V
78 | W
79 | X
80 | Y
81 | Z
82 | _
83 | ]
84 |
951 | Get the transcript for the given date (a datetime.date instance).
952 |
953 | Returns a list of message data:
954 | * id: the id of the message
955 | * person: the name of the person who wrote the message if any
956 | * user_id: the user id of the person if any
957 | * message: the message itself if any
958 |
959 |