Merge lp:~terrycojones/tickery/fluiddb-to-fluidinfo-798338 into lp:tickery
- fluiddb-to-fluidinfo-798338
- Merge into trunk
Proposed by
Terry Jones
Status: | Merged | ||||
---|---|---|---|---|---|
Approved by: | Terry Jones | ||||
Approved revision: | 10 | ||||
Merge reported by: | Terry Jones | ||||
Merged at revision: | not available | ||||
Proposed branch: | lp:~terrycojones/tickery/fluiddb-to-fluidinfo-798338 | ||||
Merge into: | lp:tickery | ||||
Diff against target: |
908 lines (+157/-155) 22 files modified
README (+8/-8) bin/create-twitter-namespaces-and-tags.py (+4/-4) doc/Makefile (+2/-2) doc/conf.py (+1/-1) doc/running.rst (+11/-11) doc/todo.rst (+6/-6) fabfile.py (+4/-3) resources/upstart/www.tickery.net.conf (+1/-1) tickery/ftwitter.py (+30/-30) tickery/oidcache.py (+7/-6) tickery/options.py (+4/-4) tickery/query.py (+1/-1) tickery/service.py (+10/-10) tickery/utils.py (+5/-5) tickery/www/about.py (+27/-27) tickery/www/advanced.py (+29/-29) tickery/www/banner.py (+1/-1) tickery/www/defaults.py (+2/-2) tickery/www/public/index.html (+1/-1) tickery/www/results.py (+1/-1) tickery/www/server.py (+1/-1) tickery/www/tickerytab.py (+1/-1) |
||||
To merge this branch: | bzr merge lp:~terrycojones/tickery/fluiddb-to-fluidinfo-798338 | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Terry Jones | Approve | ||
Review via email: mp+64872@code.launchpad.net |
Commit message
Description of the change
Use Fluidinfo instead of FluidDB in many places...
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'README' |
2 | --- README 2010-07-20 09:47:02 +0000 |
3 | +++ README 2011-06-16 17:39:31 +0000 |
4 | @@ -1,16 +1,16 @@ |
5 | Welcome! |
6 | -------- |
7 | |
8 | -Tickery is an open-source application written on FluidDB |
9 | +Tickery is an open-source application written on Fluidinfo |
10 | (http://fluidinfo.com/). You can play with our running version at |
11 | http://tickery.net |
12 | |
13 | Tickery provides a fun way to explore sets of Twitter friends. There's much |
14 | -more to the story however, as its underlying data is stored in FluidDB. This |
15 | +more to the story however, as its underlying data is stored in Fluidinfo. This |
16 | means it can be added to by anyone (i.e., you!), and searched on in any way. |
17 | |
18 | We've open-sourced Tickery to help programmers see the insides of a |
19 | -substantial application written to use FluidDB. Although the Tickery |
20 | +substantial application written to use Fluidinfo. Although the Tickery |
21 | documentation is currently very light, we hope to be able to change this. |
22 | You're welcome to help, of course. |
23 | |
24 | @@ -21,10 +21,10 @@ |
25 | Fluidinfo blog: |
26 | |
27 | Meet Tickery |
28 | - http://blogs.fluidinfo.com/fluidDB/2010/01/21/meet-tickery/ |
29 | + http://blogs.fluidinfo.com/fluidinfo/2010/01/21/meet-tickery/ |
30 | |
31 | Tickery, for programmers |
32 | - http://blogs.fluidinfo.com/fluidDB/2010/01/21/tickery-for-programmers/ |
33 | + http://blogs.fluidinfo.com/fluidinfo/2010/01/21/tickery-for-programmers/ |
34 | |
35 | Running Tickery |
36 | --------------- |
37 | @@ -39,10 +39,10 @@ |
38 | Questions? |
39 | ---------- |
40 | |
41 | -For discussion of Tickery, we suggest you join the FluidDB users mailing list |
42 | -at http://groups.google.com/group/fluiddb-users or join us in #fluiddb on |
43 | +For discussion of Tickery, we suggest you join the Fluidinfo users mailing list |
44 | +at http://groups.google.com/group/fluiddb-users or join us in #fluidinfo on |
45 | irc.freenode.net Please say hi, we're very interested in helping people to |
46 | -understand both Tickery and FluidDB. |
47 | +understand both Tickery and Fluidinfo. |
48 | |
49 | |
50 | Happy hacking! |
51 | |
52 | === modified file 'bin/create-twitter-namespaces-and-tags.py' |
53 | --- bin/create-twitter-namespaces-and-tags.py 2011-06-16 16:10:07 +0000 |
54 | +++ bin/create-twitter-namespaces-and-tags.py 2011-06-16 17:39:31 +0000 |
55 | @@ -80,7 +80,7 @@ |
56 | (TWITTER_ID_TAG_NAME, 'Twitter user id.'), |
57 | (TWITTER_SCREENNAME_TAG_NAME, 'Twitter screen name.'), |
58 | (TWITTER_UPDATED_AT_TAG_NAME, |
59 | - 'Time (in seconds) of last update of this user in FluidDB.'), |
60 | + 'Time (in seconds) of last update of this user in Fluidinfo.'), |
61 | (TWITTER_N_FRIENDS_TAG_NAME, 'Number of friends of a Twitter user.'), |
62 | (TWITTER_N_FOLLOWERS_TAG_NAME, |
63 | 'Number of followers of a Twitter user.'), |
64 | @@ -97,13 +97,13 @@ |
65 | def nok(failure): |
66 | print 'Failed:', failure |
67 | if hasattr(failure.value, 'response_headers'): |
68 | - foundFluidDBHeader = False |
69 | + foundFluidinfoHeader = False |
70 | for header in failure.value.response_headers: |
71 | if header.startswith('x-fluiddb-'): |
72 | - foundFluidDBHeader = True |
73 | + foundFluidinfoHeader = True |
74 | print '\t%s: %s' % ( |
75 | header, failure.value.response_headers[header][0]) |
76 | - if not foundFluidDBHeader: |
77 | + if not foundFluidinfoHeader: |
78 | print 'Headers: %r' % (failure.value.response_headers) |
79 | else: |
80 | return failure |
81 | |
82 | === modified file 'doc/Makefile' |
83 | --- doc/Makefile 2011-06-14 20:36:36 +0000 |
84 | +++ doc/Makefile 2011-06-16 17:39:31 +0000 |
85 | @@ -60,9 +60,9 @@ |
86 | @echo |
87 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \ |
88 | ".qhcp project file in _build/qthelp, like this:" |
89 | - @echo "# qcollectiongenerator _build/qthelp/fluidDB.qhcp" |
90 | + @echo "# qcollectiongenerator _build/qthelp/fluidinfo.qhcp" |
91 | @echo "To view the help file:" |
92 | - @echo "# assistant -collectionFile _build/qthelp/fluidDB.qhc" |
93 | + @echo "# assistant -collectionFile _build/qthelp/fluidinfo.qhc" |
94 | |
95 | latex: |
96 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex |
97 | |
98 | === modified file 'doc/conf.py' |
99 | --- doc/conf.py 2011-06-16 16:10:07 +0000 |
100 | +++ doc/conf.py 2011-06-16 17:39:31 +0000 |
101 | @@ -155,7 +155,7 @@ |
102 | #html_file_suffix = '' |
103 | |
104 | # Output file base name for HTML help builder. |
105 | -htmlhelp_basename = 'fluidDBdoc' |
106 | +htmlhelp_basename = 'fluidinfodoc' |
107 | |
108 | |
109 | # -- Options for LaTeX output ------------------------------------------------ |
110 | |
111 | === modified file 'doc/running.rst' |
112 | --- doc/running.rst 2010-07-20 09:47:02 +0000 |
113 | +++ doc/running.rst 2011-06-16 17:39:31 +0000 |
114 | @@ -9,7 +9,7 @@ |
115 | Tickery's behavior with what you'll see in the source code. |
116 | |
117 | We've open sourced Tickery so other developers can have a close look at |
118 | -how a non-trivial FluidDB application is put together. |
119 | +how a non-trivial Fluidinfo application is put together. |
120 | |
121 | But we also want to make it possible for you to run your own version of |
122 | Tickery. |
123 | @@ -38,23 +38,23 @@ |
124 | * `Ply <http://www.dabeaz.com/ply/>`_. |
125 | * `Sphinx <http://sphinx.pocoo.org/>`_ (to build this documentation) |
126 | |
127 | -One-time FluidDB setup |
128 | ----------------------- |
129 | +One-time Fluidinfo setup |
130 | +------------------------ |
131 | |
132 | To run your own version of Tickery (as opposed to just browsing the source |
133 | -code to see how Tickery does its thing), you'll need to use a FluidDB user |
134 | -other than the one we use (we use ``twitter.com``). If you have a FluidDB |
135 | +code to see how Tickery does its thing), you'll need to use a Fluidinfo user |
136 | +other than the one we use (we use ``twitter.com``). If you have a Fluidinfo |
137 | account, you can use it, otherwise go to http://fluidinfo.com/accounts/new/ |
138 | -and create a FluidDB account. |
139 | +and create a Fluidinfo account. |
140 | |
141 | -Put the FluidDB username you want to use into the ``TWITTER_USERNAME`` |
142 | -variable in ``tickery/www/defaults`` and the FluidDB password into an |
143 | -environment variable named ``FLUIDDB_TWITTER_PASSWORD``. You should then be |
144 | -able to create the necessary FluidDB namespaces and tags for your FluidDB |
145 | +Put the Fluidinfo username you want to use into the ``TWITTER_USERNAME`` |
146 | +variable in ``tickery/www/defaults`` and the Fluidinfo password into an |
147 | +environment variable named ``FLUIDINFO_TWITTER_PASSWORD``. You should then be |
148 | +able to create the necessary Fluidinfo namespaces and tags for your Fluidinfo |
149 | user with the ``bin/create-twitter-namespaces-and-tags.py`` script. |
150 | |
151 | This does as it says: creates the namespaces and tags that the user in |
152 | -FluidDB will need to have in order for Tickery to work. |
153 | +Fluidinfo will need to have in order for Tickery to work. |
154 | |
155 | One-time Twitter setup |
156 | ---------------------- |
157 | |
158 | === modified file 'doc/todo.rst' |
159 | --- doc/todo.rst 2010-07-20 09:47:02 +0000 |
160 | +++ doc/todo.rst 2011-06-16 17:39:31 +0000 |
161 | @@ -19,14 +19,14 @@ |
162 | * Make status window auto-update |
163 | * Canonicalize some queries to improve cache hit ratio. |
164 | * Set a timer to periodically update # of users tracked by Tickery. |
165 | -* Add a button to allow a user to update their Twitter details in FluidDB. |
166 | +* Add a button to allow a user to update their Twitter details in Fluidinfo. |
167 | (i.e., we spider them, update their followers etc) |
168 | -* Add a refreshFromFluidDB method to the caches that can use it. |
169 | +* Add a refreshFromFluidinfo method to the caches that can use it. |
170 | * The cache should expire things. Switch to memcached? |
171 | * Need to re-spider users and refresh/update/expire other cache info. |
172 | * Add twitter.com/SUL tags. |
173 | -* Requests to twitter (and FluidDB?) should have timeouts. |
174 | -* Add an offline mode that only works on cached data in case FluidDB |
175 | +* Requests to twitter (and Fluidinfo?) should have timeouts. |
176 | +* Add an offline mode that only works on cached data in case Fluidinfo |
177 | or Twitter are down/inaccessible. Set this on/off on the admin page. |
178 | * What do we do when a user changes from public to protected? |
179 | * Setting the visible limit on the simple tab text boxes doesn't work too well. |
180 | @@ -66,8 +66,8 @@ |
181 | * Add the ability to toggle noisy logging. |
182 | * Make admin interface auto-update? |
183 | * Allow us to act on the cache. |
184 | -* Allow us to rebuild or refresh from FluidDB. |
185 | -* Ability to remove users from FluidDB? |
186 | +* Allow us to rebuild or refresh from Fluidinfo. |
187 | +* Ability to remove users from Fluidinfo? |
188 | * Shows usage stats. |
189 | * Should be able to send a HUP to Tickery to have caches dumped. |
190 | |
191 | |
192 | === modified file 'fabfile.py' |
193 | --- fabfile.py 2011-06-16 17:12:50 +0000 |
194 | +++ fabfile.py 2011-06-16 17:39:31 +0000 |
195 | @@ -1,6 +1,6 @@ |
196 | """ |
197 | This fabfile contains the recipe for automatically testing and deploying the |
198 | -api.fluiddb.com website. |
199 | +tickery.net website. |
200 | |
201 | Fabfiles are strange and configuring them is sometimes a bit hit and miss, |
202 | but nevertheless the following functions are defined by fabric: |
203 | @@ -56,7 +56,8 @@ |
204 | |
205 | run('. /srv/tickery/%(path)s/bin/activate' % env) |
206 | |
207 | - run('/srv/tickery/%(path)s/bin/pip install --upgrade -r /srv/tickery/%(path)s/requirements.txt' % env) |
208 | + run('/srv/tickery/%(path)s/bin/pip install --upgrade ' |
209 | + '-r /srv/tickery/%(path)s/requirements.txt' % env) |
210 | |
211 | run('mkdir -p /srv/tickery/%(path)s/var/run' % env) |
212 | run('chmod a+w /srv/tickery/%(path)s/var/run' % env) |
213 | @@ -73,7 +74,7 @@ |
214 | require('hosts', provided_by=[live]) |
215 | run('rm -f /srv/tickery/%(sitename)s' % env) |
216 | run('ln -s /srv/tickery/%(path)s /srv/tickery/%(sitename)s' % env) |
217 | -# run('restart %(sitename)s' % env) |
218 | + # run('restart %(sitename)s' % env) |
219 | |
220 | |
221 | def deploy(): |
222 | |
223 | === modified file 'resources/upstart/www.tickery.net.conf' |
224 | --- resources/upstart/www.tickery.net.conf 2011-06-16 17:12:50 +0000 |
225 | +++ resources/upstart/www.tickery.net.conf 2011-06-16 17:39:31 +0000 |
226 | @@ -13,7 +13,7 @@ |
227 | . $VIRTUALENV_HOME/bin/activate |
228 | export TICKERY_CONSUMER_KEY=xxx |
229 | export TICKERY_CONSUMER_SECRET=xxx |
230 | -export FLUIDDB_TWITTER_PASSWORD=xxx |
231 | +export FLUIDINFO_TWITTER_PASSWORD=xxx |
232 | exec /sbin/start-stop-daemon --start --chdir $VIRTUALENV_HOME \ |
233 | --chuid $TICKERY_USER --exec /usr/bin/env -- twistd \ |
234 | --pidfile=/srv/tickery/tickery.net/var/run/tickery.$$.pid \ |
235 | |
236 | === modified file 'tickery/ftwitter.py' |
237 | --- tickery/ftwitter.py 2011-06-16 16:57:37 +0000 |
238 | +++ tickery/ftwitter.py 2011-06-16 17:39:31 +0000 |
239 | @@ -30,7 +30,7 @@ |
240 | TWITTER_N_FOLLOWERS_TAG_NAME, TWITTER_N_STATUSES_TAG_NAME) |
241 | |
242 | # This is the maximum requests that will be sent out at once by anything |
243 | -# using a task.Cooperator. That's usually FluidDB, but it can also mean |
244 | +# using a task.Cooperator. That's usually Fluidinfo, but it can also mean |
245 | # this many requests going at once to Twitter to pick up user details. |
246 | MAX_SIMULTANEOUS_REQUESTS = 5 |
247 | |
248 | @@ -109,19 +109,19 @@ |
249 | pass |
250 | |
251 | |
252 | -class FluidDBParseError(Exception): |
253 | - pass |
254 | - |
255 | - |
256 | -class FluidDBNonexistentAttribute(Exception): |
257 | - pass |
258 | - |
259 | - |
260 | -class FluidDBPermissionDenied(Exception): |
261 | - pass |
262 | - |
263 | - |
264 | -class FluidDBError(Exception): |
265 | +class FluidinfoParseError(Exception): |
266 | + pass |
267 | + |
268 | + |
269 | +class FluidinfoNonexistentAttribute(Exception): |
270 | + pass |
271 | + |
272 | + |
273 | +class FluidinfoPermissionDenied(Exception): |
274 | + pass |
275 | + |
276 | + |
277 | +class FluidinfoError(Exception): |
278 | pass |
279 | |
280 | |
281 | @@ -269,7 +269,7 @@ |
282 | userJob.workToDo += (nFriendsToAdd * WORK_TO_CREATE_A_FRIEND) |
283 | start = time.time() |
284 | |
285 | - # Create FluidDB objects for all the friends that we don't yet know |
286 | + # Create Fluidinfo objects for all the friends that we don't yet know |
287 | # about. |
288 | jobs = makeCreateUserJobs(friendsToAdd) |
289 | deferreds = [] |
290 | @@ -419,10 +419,10 @@ |
291 | log.msg('Query cache hit (size %d) for %r.' % (len(result), queryStr)) |
292 | return defer.succeed(result) |
293 | |
294 | -_fluidDBErrors = { |
295 | - 'TParseError': FluidDBParseError, |
296 | - 'TPathPermissionDenied': FluidDBPermissionDenied, |
297 | - 'TNonexistentAttribute': FluidDBNonexistentAttribute, |
298 | +_fluidinfoErrors = { |
299 | + 'TParseError': FluidinfoParseError, |
300 | + 'TPathPermissionDenied': FluidinfoPermissionDenied, |
301 | + 'TNonexistentAttribute': FluidinfoNonexistentAttribute, |
302 | } |
303 | |
304 | |
305 | @@ -430,23 +430,23 @@ |
306 | fail.trap(error.Error) |
307 | errorClass = fail.value.response_headers.get('x-fluiddb-error-class') |
308 | if errorClass is None: |
309 | - log.msg('No Fluiddb error class header! Query %r got HTTP status %s' % |
310 | - (query, fail.value.status)) |
311 | - raise FluidDBError() |
312 | + log.msg('No Fluidinfo error class header! ' |
313 | + 'Query %r got HTTP status %s' % (query, fail.value.status)) |
314 | + raise FluidinfoError() |
315 | else: |
316 | errorClass = errorClass[0] |
317 | |
318 | try: |
319 | log.msg('Error Class %r' % (errorClass,)) |
320 | - raise _fluidDBErrors[errorClass]() |
321 | + raise _fluidinfoErrors[errorClass]() |
322 | except KeyError: |
323 | - log.msg('Unhandled Fluiddb error class %r Query %r got ' |
324 | + log.msg('Unhandled Fluidinfo error class %r Query %r got ' |
325 | 'HTTP status %s' % |
326 | (errorClass, query, fail.value.status)) |
327 | - raise FluidDBError() |
328 | - |
329 | - |
330 | -def fluidDBQuery(endpoint, query): |
331 | + raise FluidinfoError() |
332 | + |
333 | + |
334 | +def fluidinfoQuery(endpoint, query): |
335 | d = Object.query(endpoint, query) |
336 | d.addCallback(lambda results: [r.uuid for r in results]) |
337 | d.addErrback(_queryErr, query) |
338 | @@ -511,7 +511,7 @@ |
339 | d = cache.oidUidScreennameCache.objectByUid( |
340 | uid, userNameCache=cache.userCache) |
341 | d.addCallback(lambda o: o.set(endpoint, tag, None)) |
342 | - # The logged in user may not yet exist in FluidDB. |
343 | + # The logged in user may not yet exist in Fluidinfo. |
344 | d.addErrback(_ignoreHTTPStatus, http.NOT_FOUND) |
345 | return d |
346 | |
347 | @@ -523,7 +523,7 @@ |
348 | d = cache.oidUidScreennameCache.objectByUid( |
349 | uid, userNameCache=cache.userCache) |
350 | d.addCallback(lambda o: o.delete(endpoint, tag)) |
351 | - # The logged in user may not yet exist in FluidDB. |
352 | + # The logged in user may not yet exist in Fluidinfo. |
353 | d.addErrback(_ignoreHTTPStatus, http.NOT_FOUND) |
354 | return d |
355 | |
356 | |
357 | === modified file 'tickery/oidcache.py' |
358 | --- tickery/oidcache.py 2011-06-16 16:10:07 +0000 |
359 | +++ tickery/oidcache.py 2011-06-16 17:39:31 +0000 |
360 | @@ -91,14 +91,14 @@ |
361 | nResults = len(results) |
362 | if nResults == 0: |
363 | raise Exception( |
364 | - 'Screenname %r not known to FluidDB' % screenname) |
365 | + 'Screenname %r not known to Fluidinfo' % screenname) |
366 | elif nResults == 1: |
367 | objectId = results[0].uuid |
368 | self.add(objectId, screenname=screenname) |
369 | return objectId |
370 | else: |
371 | log.err('ERROR: Twitter screenname %r found %d times ' |
372 | - 'in FluidDB! ObjectIds = %r' % |
373 | + 'in Fluidinfo! ObjectIds = %r' % |
374 | (screenname, nResults, results)) |
375 | # Don't crash: just return the first object id found. |
376 | return results[0] |
377 | @@ -118,13 +118,14 @@ |
378 | if nResults: |
379 | if nResults > 1: |
380 | msg = ('User with Twitter id %d exists %d times ' |
381 | - 'in FluidDB! Ignoring.' % (uid, nResults)) |
382 | + 'in Fluidinfo! Ignoring.' % (uid, nResults)) |
383 | log.err(msg) |
384 | raise Exception(msg) |
385 | else: |
386 | o = results[0] |
387 | self.add(o.uuid, uid, screenname) |
388 | - log.msg('Found FluidDB object for Twitter user %d.' % uid) |
389 | + log.msg('Found Fluidinfo object for Twitter user %d.' % |
390 | + uid) |
391 | else: |
392 | about = '%s:uid:%d' % (TWITTER_USERNAME, uid) |
393 | o = yield Object.create(self.endpoint, about) |
394 | @@ -160,8 +161,8 @@ |
395 | self.clean = False |
396 | |
397 | def objectIdsToUsers(self, objectIds, userCache): |
398 | - '''Convert a list of FluidDB object ids to a 2-tuple, a list of |
399 | - Twitter screennames and a list of any FluidDB object ids that did |
400 | + '''Convert a list of Fluidinfo object ids to a 2-tuple, a list of |
401 | + Twitter screennames and a list of any Fluidinfo object ids that did |
402 | not correspond to Twitter users.''' |
403 | users = [] |
404 | ids = [] |
405 | |
406 | === modified file 'tickery/options.py' |
407 | --- tickery/options.py 2011-06-14 20:36:36 +0000 |
408 | +++ tickery/options.py 2011-06-16 17:39:31 +0000 |
409 | @@ -19,11 +19,11 @@ |
410 | |
411 | class EndpointOptions(usage.Options): |
412 | optParameters = [ |
413 | - ['endpoint', None, None, 'The FluidDB endpoint URL.'], |
414 | + ['endpoint', None, None, 'The Fluidinfo endpoint URL.'], |
415 | ] |
416 | optFlags = [ |
417 | - ['local', 'L', 'If True use the a local FluidDB'], |
418 | - ['sandbox', 'S', 'If True use the sandbox FluidDB'], |
419 | + ['local', 'L', 'If True use the a local Fluidinfo'], |
420 | + ['sandbox', 'S', 'If True use the sandbox Fluidinfo'], |
421 | ] |
422 | |
423 | def postOptions(self): |
424 | @@ -41,7 +41,7 @@ |
425 | else: |
426 | endpointURL = defaults.SANDBOX_ENDPOINT |
427 | else: |
428 | - endpointURL = defaults.FLUIDDB_ENDPOINT |
429 | + endpointURL = defaults.FLUIDINFO_ENDPOINT |
430 | if not endpointURL.endswith('/'): |
431 | endpointURL += '/' |
432 | self['endpoint'] = endpointURL |
433 | |
434 | === modified file 'tickery/query.py' |
435 | --- tickery/query.py 2011-06-16 16:10:07 +0000 |
436 | +++ tickery/query.py 2011-06-16 17:39:31 +0000 |
437 | @@ -189,7 +189,7 @@ |
438 | |
439 | |
440 | def queryTreeToString(queryTree, fdbUsername, fdbNamespace): |
441 | - """Return a query string that can be sent to FluidDB. Note that we turn |
442 | + """Return a query string that can be sent to Fluidinfo. Note that we turn |
443 | all screennames into lowercase in the complete tag names. That's |
444 | because that's the way we create the tags. |
445 | """ |
446 | |
447 | === modified file 'tickery/service.py' |
448 | --- tickery/service.py 2011-06-16 16:10:07 +0000 |
449 | +++ tickery/service.py 2011-06-16 17:39:31 +0000 |
450 | @@ -56,7 +56,7 @@ |
451 | [self.cache.adderCache.added(s) for s in screennames]} |
452 | |
453 | def _objectIdsToUsers(self, (users, ids)): |
454 | - '''Convert a list of FluidDB object ids to a JSON RPC result dict |
455 | + '''Convert a list of Fluidinfo object ids to a JSON RPC result dict |
456 | containing a list of Twitter screennames.''' |
457 | if ids: |
458 | log.err('Unexpected object ids matched query: %r' % (ids,)) |
459 | @@ -158,13 +158,13 @@ |
460 | d.addErrback(log.err) |
461 | return d |
462 | |
463 | - def _fluidDBError(self, fail, query): |
464 | - err = fail.check(ftwitter.FluidDBParseError, |
465 | - ftwitter.FluidDBError, |
466 | - ftwitter.FluidDBNonexistentAttribute, |
467 | - ftwitter.FluidDBPermissionDenied) |
468 | + def _fluidinfoError(self, fail, query): |
469 | + err = fail.check(ftwitter.FluidinfoParseError, |
470 | + ftwitter.FluidinfoError, |
471 | + ftwitter.FluidinfoNonexistentAttribute, |
472 | + ftwitter.FluidinfoPermissionDenied) |
473 | if err is None: |
474 | - log.msg('Error on FluidDB query %r:' % query) |
475 | + log.msg('Error on Fluidinfo query %r:' % query) |
476 | log.err(fail) |
477 | errorClass = 'unknown' |
478 | else: |
479 | @@ -176,7 +176,7 @@ |
480 | } |
481 | } |
482 | |
483 | - def jsonrpc_fluidDBQuery(self, cookie, tabName, query): |
484 | + def jsonrpc_fluidinfoQuery(self, cookie, tabName, query): |
485 | try: |
486 | data = self.cache.cookieCache[cookie] |
487 | except KeyError: |
488 | @@ -185,14 +185,14 @@ |
489 | screenname = data[0]['screen_name'] |
490 | log.msg('QUERY: tab=%s user=%r query=%r' % ( |
491 | tabName, screenname, query)) |
492 | - d = ftwitter.fluidDBQuery(self.endpoint, query) |
493 | + d = ftwitter.fluidinfoQuery(self.endpoint, query) |
494 | d.addCallback(self._checkTooManyResults) |
495 | d.addCallback( |
496 | self.cache.oidUidScreennameCache.objectIdsToUsers, |
497 | self.cache.userCache) |
498 | d.addCallback(self._objectIdsToUsersWherePossible) |
499 | d.addErrback(self._screennameListError) # Catches TooManyResults |
500 | - d.addErrback(self._fluidDBError, query) |
501 | + d.addErrback(self._fluidinfoError, query) |
502 | return d |
503 | |
504 | def _loginRedirectURL(self, URL): |
505 | |
506 | === modified file 'tickery/utils.py' |
507 | --- tickery/utils.py 2011-06-16 16:10:07 +0000 |
508 | +++ tickery/utils.py 2011-06-16 17:39:31 +0000 |
509 | @@ -19,18 +19,18 @@ |
510 | from txfluiddb.client import _HasPath |
511 | |
512 | |
513 | -def fluidDBRootPassword(): |
514 | - VAR = 'FLUIDDB_ROOT_PASSWORD' |
515 | +def fluidinfoRootPassword(): |
516 | + VAR = 'FLUIDINFO_ROOT_PASSWORD' |
517 | try: |
518 | return os.environ[VAR] |
519 | except KeyError: |
520 | raise usage.UsageError('You must set a %s environment variable.' % VAR) |
521 | |
522 | |
523 | -class FluidDBOptions(usage.Options): |
524 | +class FluidinfoOptions(usage.Options): |
525 | optParameters = [ |
526 | - ['fluiddb-user', None, 'fluiddb', "The system user's name."], |
527 | - ['fluiddb-password', None, None, "The system user's password."], |
528 | + ['fluidinfo-user', None, 'fluidinfo', "The system user's name."], |
529 | + ['fluidinfo-password', None, None, "The system user's password."], |
530 | ] |
531 | |
532 | |
533 | |
534 | === modified file 'tickery/www/about.py' |
535 | --- tickery/www/about.py 2011-06-16 16:10:07 +0000 |
536 | +++ tickery/www/about.py 2011-06-16 17:39:31 +0000 |
537 | @@ -34,27 +34,27 @@ |
538 | |
539 | But there's a more important reason why we built Tickery: to |
540 | illustrate the flexibility and potential of |
541 | -<a href=\"http://fluidinfo.com/fluiddb\">FluidDB</a>, |
542 | +<a href=\"http://fluidinfo.com/fluiddb\">Fluidinfo</a>, |
543 | the underlying database. |
544 | |
545 | </p> |
546 | |
547 | <p> |
548 | |
549 | -FluidDB is quite different from traditional databases. What distinguishes |
550 | +Fluidinfo is quite different from traditional databases. What distinguishes |
551 | it most is its open approach to information control: anyone, or any |
552 | application, is always permitted to add information to any object in |
553 | -FluidDB. |
554 | +Fluidinfo. |
555 | |
556 | </p> |
557 | |
558 | <p> |
559 | |
560 | -This means that <em>Tickery is completely open.</em> The FluidDB objects |
561 | +This means that <em>Tickery is completely open.</em> The Fluidinfo objects |
562 | that Tickery uses to hold information about Twitter users are yours to play |
563 | with too. You can contribute additional information about Twitter users, |
564 | and can query on it (using the advanced tab). You can also build your own |
565 | -applications that use FluidDB, exactly as Tickery does. Those applications |
566 | +applications that use Fluidinfo, exactly as Tickery does. Those applications |
567 | can search using the tags that Tickery has added, or on anything that you |
568 | or others might add. |
569 | |
570 | @@ -63,9 +63,9 @@ |
571 | <p> |
572 | |
573 | |
574 | -With FluidDB, no one—not even you—has to anticipate your future |
575 | +With Fluidinfo, no one—not even you—has to anticipate your future |
576 | needs, and you never have to ask for permission to add new information. To |
577 | -complement this openness at the highest-level, FluidDB has an underlying |
578 | +complement this openness at the highest-level, Fluidinfo has an underlying |
579 | identity and permissions system that ensures existing data can only be |
580 | accessed by the people and applications you choose. |
581 | |
582 | @@ -74,49 +74,49 @@ |
583 | <p> |
584 | |
585 | At Fluidinfo, we believe it will one day be <em>much</em> easier to work |
586 | -with information. We've built FluidDB to show you what we think the future |
587 | +with information. We've built Fluidinfo to show you what we think the future |
588 | will look like. It's a future in which we'll work with information in more |
589 | flexible ways, and with data that is |
590 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/24/\ |
591 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/24/\ |
592 | truly-social-data/\">truly social</a>. |
593 | |
594 | </p> |
595 | |
596 | <h3>Next</h3> |
597 | |
598 | -For details on how Tickery uses FluidDB to hold information on Twitter |
599 | +For details on how Tickery uses Fluidinfo to hold information on Twitter |
600 | users, read the help popup on the Advanced tab. To learn more about how |
601 | -FluidDB works, a good starting place is the <a |
602 | +Fluidinfo works, a good starting place is the <a |
603 | href=\"http://doc.fluidinfo.com/fluidDB/\">high-level description</a>. |
604 | |
605 | To learn more about how we think about information, and what we're aiming |
606 | -at with FluidDB, have a look at the <a |
607 | -href=\"http://blogs.fluidinfo.com/fluidDB\">FluidDB blog</a>. In particular, |
608 | -the following articles provide a good set of viewpoints: |
609 | +at with Fluidinfo, have a look at the <a |
610 | +href=\"http://blogs.fluidinfo.com/fluidinfo\">Fluidinfo blog</a>. In |
611 | +particular, following articles provide a good set of viewpoints: |
612 | |
613 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/24/\ |
614 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/24/\ |
615 | truly-social-data/\">Truly Social Data</a>, |
616 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/25/\ |
617 | -kaleidoscope-10-takes-on-fluiddb/\">Kaleidoscope: 10 Takes on FluidDB</a>, |
618 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/28/\ |
619 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/25/\ |
620 | +kaleidoscope-10-takes-on-fluiddb/\">Kaleidoscope: 10 Takes on Fluidinfo</a>, |
621 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/28/\ |
622 | information-naturally/\">Information. Naturally.</a>, |
623 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/10/03/\ |
624 | -fluiddb-as-a-universal-metadata-engine/\">FluidDB as a Universal Metadata |
625 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/10/03/\ |
626 | +fluiddb-as-a-universal-metadata-engine/\">Fluidinfo as a Universal Metadata |
627 | Engine</a>, |
628 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/11/12/\ |
629 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/11/12/\ |
630 | why-are-post-it-notes-sticky/\">Why are Post-It Notes Sticky?</a>, |
631 | and |
632 | -<a href=\"http://blogs.fluidinfo.com/fluidDB/2009/12/01/\ |
633 | +<a href=\"http://blogs.fluidinfo.com/fluidinfo/2009/12/01/\ |
634 | putting-metadata-onto-tweets-with-fluiddb/\">Putting Metadata onto Tweets |
635 | -with FluidDB</a>. |
636 | +with Fluidinfo</a>. |
637 | |
638 | <p> |
639 | |
640 | -If you'd like to use the FluidDB API, please <a |
641 | -href=\"http://fluidinfo.com/accounts/new\">reserve a FluidDB username</a> |
642 | +If you'd like to use the Fluidinfo API, please <a |
643 | +href=\"http://fluidinfo.com/accounts/new\">reserve a Fluidinfo username</a> |
644 | and then <a href=\"mailto:api@fluidinfo.com\">send us mail</a> to get a |
645 | -password. Note that FluidDB is still in an early <a |
646 | -href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/17/\ |
647 | +password. Note that Fluidinfo is still in an early <a |
648 | +href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/17/\ |
649 | a-private-alpha-launch/\">private alpha</a> phase. |
650 | |
651 | </p> |
652 | |
653 | === modified file 'tickery/www/advanced.py' |
654 | --- tickery/www/advanced.py 2011-06-16 16:10:07 +0000 |
655 | +++ tickery/www/advanced.py 2011-06-16 17:39:31 +0000 |
656 | @@ -19,34 +19,34 @@ |
657 | from pyjamas.ui.HTML import HTML |
658 | |
659 | _instructions = """ |
660 | -<h3 class=\"huh-h3\">Exposing FluidDB</h3> |
661 | +<h3 class=\"huh-h3\">Exposing Fluidinfo</h3> |
662 | |
663 | <p> |
664 | |
665 | Tickery stores information on Twitter users in |
666 | -<a href=\"http://fluidinfo.com/fluiddb\">FluidDB</a>. |
667 | +<a href=\"http://fluidinfo.com/fluiddb\">Fluidinfo</a>. |
668 | |
669 | The simple and intermediate tabs just provide convenient—but also |
670 | -constrained—query interfaces to FluidDB. The advanced tab takes the |
671 | +constrained—query interfaces to Fluidinfo. The advanced tab takes the |
672 | gloves off, letting you interact with <a |
673 | -href=\"http://fluidinfo.com/fluiddb\">FluidDB</a> using its native query |
674 | +href=\"http://fluidinfo.com/fluiddb\">Fluidinfo</a> using its native query |
675 | language. Though the native query language is a little more verbose, there |
676 | are <span class=\"instructions-em\">many</span> interesting possibilities |
677 | when you can search on anything you like. |
678 | |
679 | </p><p> |
680 | |
681 | -Why FluidDB and not just a traditional database? Part of the answer is that |
682 | -FluidDB allows anyone to add new data. You can query on that too, right |
683 | +Why Fluidinfo and not just a traditional database? Part of the answer is that |
684 | +Fluidinfo allows anyone to add new data. You can query on that too, right |
685 | here on the advanced tab. |
686 | |
687 | </p> |
688 | |
689 | -<h3 class=\"huh-h3\">The FluidDB query language</h3> |
690 | +<h3 class=\"huh-h3\">The Fluidinfo query language</h3> |
691 | |
692 | <p> |
693 | |
694 | -FluidDB stores a tagged object for each Twitter user that Tickery knows |
695 | +Fluidinfo stores a tagged object for each Twitter user that Tickery knows |
696 | about. The query language is designed to match objects based on the |
697 | presence of tags, and their values. Let's first see what happens behind |
698 | the scenes on the simple and intermediate tabs. |
699 | @@ -61,23 +61,23 @@ |
700 | %(friends)s/%(simpleUser2)s\">has %(friends)s/%(simpleUser1)s and \ |
701 | has %(friends)s/%(simpleUser2)s</a> |
702 | |
703 | -being sent to FluidDB. I.e., Tickery asks FluidDB for all objects that have |
704 | +being sent to Fluidinfo. I.e., Tickery asks Fluidinfo for all objects that have |
705 | a <span class=\"example\">%(friends)s/%(simpleUser1)s</span> tag and also a |
706 | <span class=\"example\">%(friends)s/%(simpleUser2)s</span> tag. |
707 | |
708 | </p><p> |
709 | |
710 | -On the intermediate tab, queries are also translated directly into FluidDB |
711 | +On the intermediate tab, queries are also translated directly into Fluidinfo |
712 | queries. For example, the query |
713 | |
714 | <a href=\"%(intq)sbiz+except+ev\">biz except ev</a> |
715 | |
716 | -results in the FluidDB query: |
717 | +results in the Fluidinfo query: |
718 | |
719 | <a href=\"%(advancedq)shas+%(friends)s/biz+except+has+%(friends)s/ev\">\ |
720 | has %(friends)s/biz except has %(friends)s/ev</a>. |
721 | |
722 | -That is, Tickery asks FluidDB for all objects that have a |
723 | +That is, Tickery asks Fluidinfo for all objects that have a |
724 | <span class=\"example\">%(friends)s/biz</span> |
725 | tag, |
726 | <span class=\"example\">except</span> |
727 | @@ -95,7 +95,7 @@ |
728 | |
729 | <p> |
730 | |
731 | -The FluidDB objects matching the above queries all also have <span |
732 | +The Fluidinfo objects matching the above queries all also have <span |
733 | class=\"example\">twitter.com/users/screen_name</span> and <span |
734 | class=\"example\">twitter.com/users/id</span> tags, which Tickery uses to |
735 | help display its results. |
736 | @@ -110,7 +110,7 @@ |
737 | |
738 | <a href='%(advancedq)stwitter.com/users/screen_name+=+\"%(simpleUser1)s\"'>\ |
739 | twitter.com/users/screen_name = \"%(simpleUser1)s\"</a>. |
740 | -FluidDB has some other Twitter tags on its objects too. For example, you |
741 | +Fluidinfo has some other Twitter tags on its objects too. For example, you |
742 | can query |
743 | |
744 | <a href='%(advancedq)stwitter.com/users/followers_count+>+100000'>\ |
745 | @@ -126,11 +126,11 @@ |
746 | |
747 | </p><p> |
748 | |
749 | -Because FluidDB objects can be added to by anyone, we can query on tags |
750 | +Because Fluidinfo objects can be added to by anyone, we can query on tags |
751 | that were added by other people and that have nothing to do with |
752 | -Twitter. For example, my user name in both FluidDB and Twitter is <span |
753 | +Twitter. For example, my user name in both Fluidinfo and Twitter is <span |
754 | class=\"example\">terrycojones</span>. I've added a <span |
755 | -class=\"example\">terrycojones/met</span> tag to FluidDB's objects for |
756 | +class=\"example\">terrycojones/met</span> tag to Fluidinfo's objects for |
757 | Twitter people that I've met in person. So the query |
758 | |
759 | <a href='%(advancedq)shas+%(friends)s/terrycojones+and+has+terrycojones/met'>\ |
760 | @@ -148,7 +148,7 @@ |
761 | |
762 | The possibilities here are literally endless. They get interesting |
763 | rapidly, even with just a couple of extra tags in the mix. For example, |
764 | -the other FluidDB programmer, Esteve, has also added <span |
765 | +the other Fluidinfo programmer, Esteve, has also added <span |
766 | class=\"example\">esteve/met</span> tags to the people he follows and has |
767 | met. The query |
768 | |
769 | @@ -168,7 +168,7 @@ |
770 | should introduce each other to. Imagine the additional richness we could |
771 | extract from Twitter if someone wrote e.g., a Firefox extension that simply |
772 | let you click to indicate which of the people you follow you've also met. |
773 | -And that's just one additional tag in FluidDB. It's easy to dream up many |
774 | +And that's just one additional tag in Fluidinfo. It's easy to dream up many |
775 | others. |
776 | |
777 | </p> |
778 | @@ -179,14 +179,14 @@ |
779 | |
780 | The best part of all this is that you can play too. |
781 | |
782 | -The most important thing to understand about the underlying FluidDB objects |
783 | -is that while their tags have owners and permissions, the objects |
784 | -themselves do not. So you can use the FluidDB API |
785 | +The most important thing to understand about the underlying Fluidinfo |
786 | +objects is that while their tags have owners and permissions, the objects |
787 | +themselves do not. So you can use the Fluidinfo API |
788 | |
789 | (<a href=\"http://doc.fluidinfo.com/fluidDB/index.html\">description</a>, |
790 | <a href=\"http://doc.fluidinfo.com/fluidDB/api/index.html\">details</a>) |
791 | |
792 | -to add any tags you like to FluidDB objects, <span |
793 | +to add any tags you like to Fluidinfo objects, <span |
794 | class=\"instructions-em\">including the objects that Tickery has |
795 | tagged</span>, and you can query on them in any combination. |
796 | |
797 | @@ -194,11 +194,11 @@ |
798 | |
799 | <p> |
800 | |
801 | -If you'd like to use the FluidDB API, please <a |
802 | -href=\"http://fluidinfo.com/accounts/new\">reserve a FluidDB username</a> |
803 | +If you'd like to use the Fluidinfo API, please <a |
804 | +href=\"http://fluidinfo.com/accounts/new\">reserve a Fluidinfo username</a> |
805 | and then <a href=\"mailto:api@fluidinfo.com\">send us mail</a> to get a |
806 | -password. Note that FluidDB is still in an early <a |
807 | -href=\"http://blogs.fluidinfo.com/fluidDB/2009/08/17/\ |
808 | +password. Note that Fluidinfo is still in an early <a |
809 | +href=\"http://blogs.fluidinfo.com/fluidinfo/2009/08/17/\ |
810 | a-private-alpha-launch/\">private alpha</a> phase. |
811 | |
812 | </p> |
813 | @@ -222,8 +222,8 @@ |
814 | {'tw': 'twitter.com', 'fr': 'friends'}) |
815 | |
816 | def __init__(self, topPanel): |
817 | - self.goButtonRemoteMethod = 'fluidDBQuery' |
818 | + self.goButtonRemoteMethod = 'fluidinfoQuery' |
819 | self.instructions = HTML(_instructions) |
820 | - self.instructionsTitle = ('The FluidDB query language ' |
821 | + self.instructionsTitle = ('The Fluidinfo query language ' |
822 | '& the advanced tab') |
823 | LargeQueryTab.__init__(self, topPanel) |
824 | |
825 | === modified file 'tickery/www/banner.py' |
826 | --- tickery/www/banner.py 2011-06-16 16:10:07 +0000 |
827 | +++ tickery/www/banner.py 2011-06-16 17:39:31 +0000 |
828 | @@ -29,7 +29,7 @@ |
829 | self.add(Image('tickery.png', StyleName='banner-image')) |
830 | strapline = HTML( |
831 | '''Explore <a href="http://twitter.com">Twitter</a> with |
832 | - <a href="http://fluidinfo.com/fluiddb">FluidDB</a>''', |
833 | + <a href="http://fluidinfo.com">Fluidinfo</a>''', |
834 | StyleName='strapline') |
835 | self.add(strapline) |
836 | |
837 | |
838 | === modified file 'tickery/www/defaults.py' |
839 | --- tickery/www/defaults.py 2011-06-16 16:10:07 +0000 |
840 | +++ tickery/www/defaults.py 2011-06-16 17:39:31 +0000 |
841 | @@ -25,7 +25,7 @@ |
842 | |
843 | OAUTH_COOKIE = 'tickery-oauth' |
844 | |
845 | -TWITTER_PASSWORD_VAR = 'FLUIDDB_TWITTER_PASSWORD' |
846 | +TWITTER_PASSWORD_VAR = 'FLUIDINFO_TWITTER_PASSWORD' |
847 | TWITTER_USERNAME = u'twitter.com' |
848 | TWITTER_NAME = u'Twitter Inc.' |
849 | TWITTER_EMAIL = u'info@fluidinfo.com' |
850 | @@ -45,7 +45,7 @@ |
851 | TWITTER_N_STATUSES_TAG_NAME = u'statuses_count' |
852 | # TWITTER_LOCATION_TAG_NAME = u'location' |
853 | |
854 | -FLUIDDB_ENDPOINT = 'http://fluiddb.fluidinfo.com/' |
855 | +FLUIDINFO_ENDPOINT = 'http://fluiddb.fluidinfo.com/' |
856 | SANDBOX_ENDPOINT = 'http://sandbox.fluidinfo.com/' |
857 | LOCAL_ENDPOINT = 'http://localhost:8080/' |
858 | |
859 | |
860 | === modified file 'tickery/www/public/index.html' |
861 | --- tickery/www/public/index.html 2010-07-20 09:47:02 +0000 |
862 | +++ tickery/www/public/index.html 2011-06-16 17:39:31 +0000 |
863 | @@ -2,7 +2,7 @@ |
864 | <head> |
865 | <meta name="pygwt:module" content="index"> |
866 | <link rel="stylesheet" href="index.css"> |
867 | - <title>Tickery - Explore Twitter with FluidDB</title> |
868 | + <title>Tickery - Explore Twitter with Fluidinfo</title> |
869 | </head> |
870 | <body bgcolor="white"> |
871 | <script language="javascript" src="bootstrap.js"></script> |
872 | |
873 | === modified file 'tickery/www/results.py' |
874 | --- tickery/www/results.py 2011-06-16 16:10:07 +0000 |
875 | +++ tickery/www/results.py 2011-06-16 17:39:31 +0000 |
876 | @@ -59,7 +59,7 @@ |
877 | objectIds = objectIds[:5] |
878 | else: |
879 | plural1, plural2 = '', 'es' |
880 | - title = '%s FluidDB object id%s match%s%s' % ( |
881 | + title = '%s Fluidinfo object id%s match%s%s' % ( |
882 | nObjectIds, plural1, plural2, showing) |
883 | text = '<br/>'.join(objectIds) |
884 | self.sender.results.add(HTML( |
885 | |
886 | === modified file 'tickery/www/server.py' |
887 | --- tickery/www/server.py 2010-07-20 09:47:02 +0000 |
888 | +++ tickery/www/server.py 2011-06-16 17:39:31 +0000 |
889 | @@ -19,5 +19,5 @@ |
890 | def __init__(self): |
891 | JSONProxy.__init__(self, '/tickery', |
892 | ['nUsers', 'spideredScreennames', 'friendOf', 'intermediateQuery', |
893 | - 'fluidDBQuery', 'simpleTweet', 'tweet', 'login', 'logout', |
894 | + 'fluidinfoQuery', 'simpleTweet', 'tweet', 'login', 'logout', |
895 | 'screenameFromCookie', 'friendsIds', 'follow', 'unfollow']) |
896 | |
897 | === modified file 'tickery/www/tickerytab.py' |
898 | --- tickery/www/tickerytab.py 2011-06-16 16:10:07 +0000 |
899 | +++ tickery/www/tickerytab.py 2011-06-16 17:39:31 +0000 |
900 | @@ -56,7 +56,7 @@ |
901 | """Explore sets of Twitter friends by querying on their user names""", |
902 | |
903 | 'advanced': |
904 | - """Query Twitter friends & more with the full FluidDB query language""", |
905 | + """Query Twitter friends & more with the full Fluidinfo query language""", |
906 | } |
907 | |
908 | HELP_TEXT = 'huh?' |
LGTM!