Blame | Last modification | View Log | RSS feed
'''Created on 20-Jul-2010@author: ashish'''from shop2020.thriftpy.model.v1.user.ttypes import WidgetException as WExceptionfrom shop2020.thriftpy.model.v1.user.ttypes import WidgetType as WTypefrom shop2020.thriftpy.model.v1.user.ttypes import RatingType as RTypefrom shop2020.model.v1.user.impl.Dataservice import Widget, Item, WidgetItem,\Ratings, UserRatingsfrom elixir import *import datetimedef get_widget_by_id(id):return Widget.get_by(id=id)def get_item_by_id(id):return Item.get_by(id=id)def get_item_by_item_id(item_id):return Item.get_by(item_id=item_id)def get_widget_item(item, widget):try:query = WidgetItem.query.filter_by(item=item)query = query.filter_by(widget=widget)return query.one()except:return Nonedef add_widget(widget):if not widget:raise WException(101, "Cannot add null widget")if widget.id:raise WException(101, "id is already assigned")w = Widget()if widget.customer_id:w.customer_id = widget.customer_idw.type = widget.typew.name = widget.namew.enabled = 1session.commit()for item in widget.items:w_item = get_item_by_item_id(item.item_id)if not w_item:#item is not present in system, we need to add the itemw_item = Item()w_item.item_id = item.item_idw_item.enabled = 1w_item.snippet = item.snippetsession.commit()#create a widgetitem mapping here nowwidget_item = get_widget_item(w_item, w)if not widget_item:widget_item = WidgetItem()widget_item.widget = wwidget_item.item = w_itemwidget_item.added_on = datetime.datetime.now()session.commit()def add_items_to_widget(widget_id, items):widget = get_widget_by_id(widget_id)if not widget:raise WException(101, "Widget not found")for item in items:i = get_item_by_item_id(item)if i:#check if widgetitem is already presentwitem = get_widget_item(i, widget)if not witem:witem = WidgetItem()witem.widget = widgetwitem.item = iwitem.added_on = datetime.datetime.now()session.commit()def get_my_research_widget(user_id):query = Widget.query.filter_by(customer_id=user_id)query = query.filter_by(type=WType.MY_RESEARCH)query = query.filter_by(enabled=1)try:widget = query.one()except:widget = Noneif not widget:#research widget not presentwidget = Widget()widget.type = WType.MY_RESEARCHwidget.enabled = 1widget.customer_id = user_idwidget.name = "My Research"session.commit()return widgetdef update_my_research(user_id, item_id):isNew = False#get my research widgetresearch_widget = get_my_research_widget(user_id)#search for item iditem = get_item_by_item_id(item_id)if not item:#Ideally it should throw an exception, but we are allowing additions here for now.item = Item()item.item_id = item_iditem.snippet = "Lorem Ipsum"item.enabled = 1session.commit()witem = get_widget_item(item, research_widget)if not witem:witem = WidgetItem()witem.widget = research_widgetwitem.item = itemisNew = Truewitem.added_on = datetime.datetime.now()session.commit()return isNewdef delete_item_from_widget(widget_id, item_id):widget = get_widget_by_id(widget_id)item = get_item_by_item_id(item_id)if not item:#ideally it should throw an exception, but we are returning simplyreturnquery = WidgetItem.query.filter_by(item=item)query = query.filter_by(widget=widget)witem = query.one()witem.delete()session.commit()returndef delete_item_from_my_research(user_id, item_id):#get my research widgetresearch_widget = get_my_research_widget(user_id)#search for item iddelete_item_from_widget(research_widget.id, item_id )def update_widget(widget_id, enabled):widget = get_widget_by_id(widget_id)if not widget:raise WException(101, "widget not present")if enabled:widget.enabled = 1else:widget.enabled = 0session.commit()def update_widget_item(widget_item, enabled):passdef get_widget_by_user_id(type, user_id, is_session_id, enabled):try:query = Widget.query.filter_by(type = type)if is_session_id == True:query = query.query.filter_by(session_id=user_id)else:query = query.filter_by(customer_id=user_id)if enabled:query = query.filter_by(enabled=1)return query.one()except Exception as inst:print type(inst)print inst.argsprint instraise WException(101, "no widget found")def get_widget_by_type(type, user_id, enabled):try:query = Widget.query.filter_by(type = type)if enabled:query = query.filter_by(enabled=1)if user_id:query = query.filter_by(customer_id=user_id)return query.one()except:raise WException(101, "no widget found")"""except Exception as inst:print type(inst)print inst.argsprint instraise WException(101, "no widget found")"""def get_my_research(user_id):return get_widget_by_type(WType.MY_RESEARCH, user_id)def get_browse_history(user_id, is_session_id):if is_session_id == True:return get_widget_by_user_id(WType.BROWSE_HISTORY, user_id, is_session_id)else:return get_widget_by_user_id(WType.BROWSE_HISTORY, user_id, is_session_id)def get_ratings(user_id, item_id):query = Ratings.query.filter_by(item_id = item_id)type_ratings = query.all()if user_id:query = UserRatings.query.filter_by(item_id = item_id)query = query.filter_by(user_id = user_id)try:user_rating = query.one()except:return type_ratings, Nonereturn type_ratings, user_ratingreturn type_ratings, Nonedef update_ratings(user_id, item_id, rating, type):if user_id:if type == RType.USER_CURRENT:query = UserRatings.query.filter_by(item_id = item_id)query = query.filter_by(user_id = user_id)try:user_rating = query.one()except:user_rating = UserRatings()user_rating.user_id = user_iduser_rating.item_id = item_iduser_rating.rating = ratingsession.commit()#update cumulative ratingsquery = UserRatings.query.filter_by(item_id = item_id)ratings = query.all()user_count = len(ratings)query = Ratings.query.filter_by(item_id = item_id)query = Ratings.query.filter_by(type = RType.USER_ALL)try:current_rating = query.one()new_rating = (current_rating.rating*(user_count -1) + rating)/user_countcurrent_rating.rating = new_ratingexcept:current_rating = Ratings()current_rating.type= RType.USER_ALLcurrent_rating.item_id = item_idcurrent_rating.rating = ratingsession.commit()else:query = Ratings.query.filter_by(item_id = item_id)query = Ratings.query.filter_by(type = type)try:current_rating = query.one()current_rating.rating = ratingexcept:current_rating = Ratings()current_rating.type= typecurrent_rating.item_id = item_idcurrent_rating.rating = ratingsession.commit()def update_browse_history(user_id, item_id, is_session_id):if is_session_id == True:query = Widget.query.filter_by(session_id = user_id)query = query.filter_by(type = WType.BROWSE_HISTORY)try:current_widget = query.one()except:current_widget = Widget()current_widget.session_id = user_idcurrent_widget.enabled = Truecurrent_widget.type = WType.BROWSE_HISTORYelse:query = Widget.query.filter_by(customer_id = user_id)query = query.filter_by(type = WType.BROWSE_HISTORY)try:current_widget = query.one()except:current_widget = Widget()current_widget.customer_id = user_idcurrent_widget.enabled = Truecurrent_widget.type = WType.BROWSE_HISTORYsession.commit()items = []items.append(item_id)add_items_to_widget(current_widget.id, items)