def get(item_id): """ Get item from id """ coll = Item.collection() dic = coll.find_one({"_id": coerce_bson_id(item_id)}) return Item.unserialize(dic) if dic is not None else None
def one(item_id): """ Returns the group of items simialr to this item as a list """ item = get(item_id) group_id = item.group_id dic_lis = Item.collection().find({"group_id": group_id}) similar_items = map(lambda x: Item.unserialize(x), dic_lis) return similar_items
def get_item_url(): """ (GET: /campaign/item/url) """ from base.media.action import url_for from base.media.model import Media from base.items.model import Item obj_id = request.args.get("obj_id") item_obj = Item.unserialize(Item.collection().find_one({"_id": coerce_bson_id(obj_id)})) media_obj = Media.unserialize(Media.collection().find_one({"_id": item_obj.media_id})) if media_obj is None: return jsonify({"status": "error", "error": "No item found"}) item_url = url_for(media_obj) return jsonify({"status": "ok", "url": item_url})
def get_all(container_obj, find_param_lis=None, limit=None): """ Get all items objects in a list given a container object. :param container_obj: :return list_of_items: """ if find_param_lis is None: find_param_lis = [] args = {} if limit is not None: args["limit"] = limit coll = Item.collection() lis_of_dic = coll.find({ "$and": [ { "container_id": container_obj.obj_id() if container_obj is not None else None} ] + find_param_lis, }, **args) #sort items if container_obj is not None: item_sorted_ids = container_obj.item_ids_sorted #sorting function for sorted(), to fetch the indices of the id in the sorted id array def sorting_fn(itm): id_str = str(itm['_id']) if id_str not in item_sorted_ids: return 99999 #a large number. don't think we'll ever find more than 99999 items in a container return item_sorted_ids.index(id_str) #sort list lis_of_dic = sorted(lis_of_dic, key=sorting_fn) return [Item.unserialize(x) for x in lis_of_dic]
def put_campaign_data(): """ (PUT: campaign/data) """ from campaigns.campaign.model import Campaign, CampaignType from campaigns.campaign.action import save from unifide_backend.action.mapping.model import CampaignState from unifide_backend.action.mapping.action import put_mapping, get_brand_mapping from unifide_backend.action.social.facebook.action import put_fb_post, get_fb_user, put_fb_event from unifide_backend.action.social.twitter.action import put_tweet, get_tw_user from unifide_backend.action.social.foursquare.action import put_fsq_update from base.media.action import _store_locally, url_for, save_media from base.media.model import Media from base.items.action import save as save_item from base import items from base.items.model import Item from unifide_backend.action.util import url_generator from cfg import DOMAIN_PATH print "starting" user_id = request.form.get("user_id") brand_name = request.form.get("brand_name") platforms = request.form.getlist("platforms") type = request.form.get("type") title = request.form.get("title") description = request.form.get("description") event_datetime_start = float(request.form.get("datetime_start")) if request.form.get("datetime_start") is not None else None event_datetime_end = float(request.form.get("datetime_end")) if request.form.get("datetime_end") is not None else None item_file_id = request.form.get("media_file_url", None) state = request.form.get("state") scheduled_datetime = float(request.form.get("scheduled_datetime")) if state == CampaignState.SCHEDULED else None redirect_url = request.form.get("redirect_to", None) brand_obj = get_brand_mapping(user_id, brand_name) parsed_title = title parsed_description = description image_io = None file_path = None media_obj = None # load media object from item ID if item_file_id: dic = Item.collection().find_one({"_id": coerce_bson_id(item_file_id)}) item_obj = Item.unserialize(dic) if dic is not None else None if item_obj: media_obj = Media.unserialize(Media.collection().find_one({"_id": item_obj.media_id})) # load user uploaded image files = ["media_file"] for f in files: media_file = request.files.get(f) if media_file.filename != "": if request.files.get("media_file").mimetype in ["image/png", "image/gif", "image/jpeg", "image/jpg"]: file_path = _store_locally(media_file.filename, media_file) media_obj = save_media(media_file) # open file stream to user uploaded image if file_path: image = Image.open(file_path) image_io = StringIO() image.save(image_io, 'jpeg', quality=95) image_io.seek(0) # open file stream to item image if media_obj: if media_obj.storage == MediaStorage.LOCAL: img_file_path = os.path.join(UPLOAD_FOLDER, media_obj.file_name) image = Image.open(img_file_path) else: req = requests.open(url_for(media_obj)) image = Image.open(StringIO(req.content)) image_io = StringIO() image.save(image_io, 'jpeg', quality=95) image_io.seek(0) kvp = {} if PLATFORM_CAMPAIGN in platforms: c = Campaign() c.uid = user_id c.title = title c.description = description c.type = type if item_file_id is not None: c.item_id_lis.append(item_file_id) #event component c.happening_datetime_start = event_datetime_start if event_datetime_start is not None else None c.happening_datetime_end = event_datetime_end if event_datetime_end is not None else None c._id = save(c) kvp["campaign"] = c._id print "done campaign" if PLATFORM_BLOG in platforms: blog = Item() blog.name = title blog.description = description blog.media_id = media_obj._id if media_obj is not None else None blog_path_list = ["Pages", "Blog"] blog_container = items.container_from_path(blog_path_list) blog.container_id = blog_container._id blog._id = save_item(blog) kvp["blog"] = blog._id print "done blog" # add a link to web/blog campaign for social network campaigns if PLATFORM_CAMPAIGN in platforms or PLATFORM_BLOG in platforms: parsed_title += "\n" + url_generator(DOMAIN_PATH, title) parsed_description += "\n\n" + url_generator(DOMAIN_PATH, title) if PLATFORM_FACEBOOK in platforms: fb_user = get_fb_user(user_id, brand_name) if type == CampaignType.PROMOTION: post = put_fb_post(brand_obj.facebook, fb_user.fb_id, state, parsed_title, image_io) kvp[PLATFORM_FACEBOOK] = post._id elif type == CampaignType.EVENT: event = put_fb_event(brand_obj.facebook, fb_user.fb_id, state, title, parsed_description, event_datetime_start, event_datetime_end, image_io) kvp[PLATFORM_FACEBOOK] = event._id print "done facebook" if PLATFORM_TWITTER in platforms: tw_user = get_tw_user(user_id, brand_name)[0] tweet = put_tweet(parsed_title, tw_user.tw_id, brand_obj.twitter["access_token"]["key"], brand_obj.twitter["access_token"]["secret"], state, url_for(media_obj) if media_obj is not None else file_path) kvp[PLATFORM_TWITTER] = tweet._id print "done twitter" if PLATFORM_FOURSQUARE in platforms: page_update = put_fsq_update(parsed_title, brand_obj.foursquare["venues"][0], brand_obj.foursquare["access_token"], state) kvp[PLATFORM_FOURSQUARE] = page_update._id print "done foursquare" if PLATFORM_PUSH in platforms: kvp[PLATFORM_PUSH] = 1 #todo : waiting for push implementation pass publish_datetime = datetime.datetime.now() if state == CampaignState.PUBLISHED else datetime.datetime.fromtimestamp(scheduled_datetime) put_mapping(user_id, brand_name, kvp, publish_datetime, type, state) if redirect_url is not None: return render_template("redirect.html", **{ "redirect_url": redirect_url }) return jsonify({"status": "ok"})