diff options
Diffstat (limited to 'mongodb.py')
-rw-r--r-- | mongodb.py | 253 |
1 files changed, 0 insertions, 253 deletions
diff --git a/mongodb.py b/mongodb.py deleted file mode 100644 index d00b453e..00000000 --- a/mongodb.py +++ /dev/null @@ -1,253 +0,0 @@ -#! /usr/bin/env python -# -*- coding: utf-8 -*- - -__author__ = "Cedric Bonhomme" -__version__ = "$Revision: 0.1 $" -__date__ = "$Date: 2012/03/03 $" -__revision__ = "$Date: 2012/03/03 $" -__copyright__ = "Copyright (c) Cedric Bonhomme" -__license__ = "GPLv3" - -import time -import pymongo - -from operator import itemgetter, attrgetter - -class Articles(object): - """ - """ - def __init__(self, url='localhost', port=27017): - """ - Instantiates the connection. - """ - self.connection = pymongo.connection.Connection(url, port) - self.db = self.connection.pyaggr3g470r - - def add_collection(self, new_collection): - """ - Creates a new collection for a new feed. - """ - collection = self.db[new_collection["feed_id"]] - #collection.create_index([("feed_link", pymongo.ASCENDING)], {"unique":True, "sparse":True}) - collection.insert(new_collection) - - def add_articles(self, articles, feed_id): - """ - Add article(s) in a collection. - """ - collection = self.db[str(feed_id)] - - collection.create_index([("article_date", pymongo.DESCENDING)], \ - {"unique":False, "sparse":False}) - - for article in articles: - cursor = collection.find({"article_id":article["article_id"]}) - if cursor.count() == 0: - collection.insert(article) - - def delete_feed(self, feed_id): - """ - Delete a collection (feed with all articles). - """ - self.db.drop_collection(feed_id) - - def delete_article(self, feed_id, article_id): - """ - Delete an article. - """ - collection = self.db[str(feed_id)] - collection.find_and_modify(query={"article_id":article_id}, remove=True) - - def get_collection(self, feed_id): - """ - """ - return self.db[str(feed_id)].find().next() - - def get_all_articles(self): - """ - Return all articles from all collections. - """ - articles = [] - collections = self.db.collection_names() - for collection_name in collections: - collection = self.db[collection_name] - articles.extend([article for article in collection.find({'type':1})]) - return articles - - def get_article(self, feed_id, article_id): - """ - """ - collection = self.db[str(feed_id)] - return collection.find({"article_id":article_id}).next() - - def get_all_collections(self, condition=None): - """ - """ - feeds = [] - collections = self.db.collection_names() - for collection_name in collections: - if collection_name != "system.indexes": - if condition is None: - cursor = self.db[collection_name].find({"type":0}) - else: - cursor = self.db[collection_name].find({"type":0, condition[0]:condition[1]}) - if cursor.count() != 0: - feeds.append(cursor.next()) - feeds.sort(key = lambda elem: elem['feed_title'].lower()) - return feeds - - def get_articles_from_collection(self, feed_id, condition=None): - """ - Return all the articles of a collection. - """ - collection = self.db[str(feed_id)] - if condition is None: - cursor = collection.find({"type":1}) - else: - cursor = collection.find({"type":1, condition[0]:condition[1]}) - return cursor.sort([("article_date", pymongo.DESCENDING)]) - - def print_articles_from_collection(self, collection_id): - """ - Print the articles of a collection. - """ - collection = self.db[str(collection_id)] - cursor = collection.find({"type":1}) - print "Article for the collection", collection_id - for d in cursor: - print d - print - - def nb_articles(self, feed_id=None): - """ - Return the number of users. - """ - if feed_id is not None: - collection = self.db[feed_id] - cursor = collection.find({'type':1}) - return cursor.count() - else: - nb_articles = 0 - for feed_id in self.db.collection_names(): - nb_articles += self.nb_articles(feed_id) - return nb_articles - - def nb_favorites(self, feed_id=None): - if feed_id is not None: - collection = self.db[feed_id] - cursor = collection.find({'type':1, 'article_like':True}) - return cursor.count() - else: - nb_favorites = 0 - for feed_id in self.db.collection_names(): - nb_favorites += self.nb_favorites(feed_id) - return nb_favorites - - def nb_mail_notifications(self): - """ - Return the number of subscribed feeds. - """ - nb_mail_notifications = 0 - for feed_id in self.db.collection_names(): - collection = self.db[feed_id] - cursor = collection.find({'type':0, 'mail':True}) - nb_mail_notifications += cursor.count() - return nb_mail_notifications - - def nb_unread_articles(self, feed_id=None): - if feed_id is not None: - collection = self.db[feed_id] - cursor = collection.find({'article_readed':False}) - return cursor.count() - else: - unread_articles = 0 - for feed_id in self.db.collection_names(): - unread_articles += self.nb_unread_articles(feed_id) - return unread_articles - - def like_article(self, like, feed_id, article_id): - """ - Like or unlike an article. - """ - collection = self.db[str(feed_id)] - collection.update({"article_id": article_id}, {"$set": {"article_like": like}}) - - def mark_as_read(self, readed, feed_id=None, article_id=None): - """ - """ - if feed_id != None and article_id != None: - collection = self.db[str(feed_id)] - collection.update({"article_id": article_id, "article_readed":not readed}, {"$set": {"article_readed": readed}}) - elif feed_id != None and article_id == None: - collection = self.db[str(feed_id)] - collection.update({"type": 1, "article_readed":not readed}, {"$set": {"article_readed": readed}}, multi=True) - else: - for feed_id in self.db.collection_names(): - self.mark_as_read(readed, feed_id, None) - - def list_collections(self): - """ - List all collections (feed). - """ - collections = self.db.collection_names() - return collections - - # Functions on database - def drop_database(self): - """ - Drop all the database - """ - self.connection.drop_database('pyaggr3g470r') - - -if __name__ == "__main__": - # Point of entry in execution mode. - articles = Articles() - - - # Create a collection for a stream - collection_dic = {"collection_id": 42,\ - "feed_image": "Image", \ - "feed_title": "Title", \ - "feed_link": "Link", \ - "site_title": "Site link", \ - "mail": True, \ - } - - #articles.add_collection(collection_dic) - - - - # Add an article in the newly created collection - article_dic1 = {"article_id": 51, \ - "article_date": "Today", \ - "article_link": "Link of the article", \ - "article_title": "The title", \ - "article_content": "The content of the article", \ - "article_readed": True, \ - "article_like": True \ - } - - article_dic2 = {"article_id": 52, \ - "article_date": "Yesterday", \ - "article_link": "Link", \ - "article_title": "Hello", \ - "article_content": "The content of the article", \ - "article_readed": True, \ - "article_like": True \ - } - - #articles.add_articles([article_dic1, article_dic2], 42) - - - # Print articles of the collection - #articles.print_articles_from_collection("http://esr.ibiblio.org/?feed=rss2") - - - print "All articles:" - #print articles.get_all_articles() - - - - # Drop the database - articles.drop_database()
\ No newline at end of file |