Source code for adselect.db.utils

from twisted.internet import defer

from adselect import db


# ALL #


[docs]def get_collection_iter(collection_name): """ Returns a batch of documents iterable and a deferred. The deferred can be called to get another batch. :param collection_name: Name of the collection we iterate over. """ return db.get_collection(collection_name).find(cursor=True)
# CAMPAIGNS #
[docs]def get_campaign(campaign_id): """ :param campaign_id: campaign_id :return: One campaign object with the corresponding id. """ return db.get_collection('campaign').find_one({'campaign_id': campaign_id})
[docs]@defer.inlineCallbacks def update_campaign(campaign_doc): """ Update campaign data or create one if doesn't exist. :param campaign_doc: New campaign data, must include campaign_id to identify existing data. :return: deferred instance of :class:`pymongo.results.UpdateResult`. """ return_value = yield db.get_collection('campaign').replace_one({'campaign_id': campaign_doc['campaign_id']}, campaign_doc, upsert=True) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def delete_campaign(campaign_id): """ Remove campaign data. Doesn't remove banners or other associated data. :param campaign_id: id of the campaign :return: deferred """ return_value = yield db.get_collection('campaign').delete_many({'campaign_id': campaign_id}) defer.returnValue(return_value)
# BANNERS #
[docs]def get_banner(banner_id): """ :param banner_id: id of the banner :return: One banner with the corresponding id. """ return db.get_collection('banner').find_one({'banner_id': banner_id})
[docs]@defer.inlineCallbacks def update_banner(banner_doc): """ Update banner data or create a new one if doesn't exist. :param banner_doc: New banner data, must include banner_id. :return: deferred instance of :class:`pymongo.results.UpdateResult`. """ return_value = yield db.get_collection('banner').replace_one({'banner_id': banner_doc['banner_id']}, banner_doc, upsert=True) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def get_campaign_banners(campaign_id): """ :param campaign_id: campaign_id for the banners :return: deferred banner iterable """ banner_coll = yield db.get_collection('banner') return_value = yield banner_coll.find({'campaign_id': campaign_id}) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def delete_campaign_banners(campaign_id): """ Remove banners. :param campaign_id: campaign_id, to which the banners belong to :return: deferred """ banner_coll = yield db.get_collection('banner') return_value = yield banner_coll.delete_many({'campaign_id': campaign_id}) defer.returnValue(return_value)
# STATS # # IMPRESSION COUNTS #
[docs]def get_banner_impression_count(banner_id): """ :param banner_id: banner identification :return: Impression count object for banner. """ return db.get_collection('impressions_stats').find_one({'banner_id': banner_id})
[docs]@defer.inlineCallbacks def update_banner_impression_count(banner_id, counts_per_publisher_dict): """ Updates the banner impression count :param banner_id: banner identification :param counts_per_publisher_dict: Dictionary for :return: deferred instance of :class:`pymongo.results.UpdateResult`. """ return_value = yield db.get_collection('impressions_stats').replace_one({"banner_id": banner_id}, {"banner_id": banner_id, "stats": counts_per_publisher_dict}, upsert=True) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def delete_banner_impression_count(banner_id): """ Removes all count information about banner impressions. :param banner_id: Banner identification :return: """ collection = yield db.get_collection('impressions_stats') return_value = yield collection.delete_many({'banner_id': banner_id}) defer.returnValue(return_value)
# PAYMENTS #
[docs]def get_banner_payment(banner_id): """ :param banner_id: Banner identifier. :return: Payment information for the banner. """ return db.get_collection('payments_stats').find_one({'banner_id': banner_id})
[docs]@defer.inlineCallbacks def update_banner_payment(banner_id, pay_per_publisher_per_size_per_keyword_dict): """ :param banner_id: Banner identifier. :param pay_per_publisher_per_size_per_keyword_dict: :return: deferred instance of :class:`pymongo.results.UpdateResult`. """ collection = yield db.get_collection('payments_stats') return_value = yield collection.replace_one({"banner_id": banner_id}, {"banner_id": banner_id, "stats": pay_per_publisher_per_size_per_keyword_dict}, upsert=True) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def delete_banner_payments(banner_id): """ Removes banner payment information. :param banner_id: Banner identifier. :return: """ collection = yield db.get_collection('payments_stats') return_value = yield collection.delete_many({'banner_id': banner_id}) defer.returnValue(return_value)
# SCORES #
[docs]def get_banner_scores(banner_id): """ :param banner_id: Banner identifier. :return: """ return db.get_collection('scores_stats').find_one({'banner_id': banner_id})
[docs]@defer.inlineCallbacks def update_banner_scores(banner_id, score_per_publisher_per_keyword_dict): """ :param banner_id: Banner identifier. :param score_per_publisher_per_keyword_dict: :return: """ collection = yield db.get_collection('scores_stats') return_value = yield collection.replace_one({'banner_id': banner_id}, {'banner_id': banner_id, 'stats': score_per_publisher_per_keyword_dict}, upsert=True) defer.returnValue(return_value)
[docs]@defer.inlineCallbacks def delete_banner_scores(banner_id): """ Removes all banner scores for a given banner. :param banner_id: Banner identifier. :return: """ collection = yield db.get_collection('scores_stats') return_value = yield collection.delete_many({'banner_id': banner_id}) defer.returnValue(return_value)