Exemplo n.º 1
0
def catalogs():
    """
    catalogs()
    Home page: displays all the catalogs on the left
    and latest 10 items to the right

    """
    stmt = session.query(Item.category_id,
                         func.count('*').label('item_counts')).group_by(
                             Item.category_id).subquery()
    categories = session.query(Category).outerjoin(
        stmt, Category.id == stmt.c.category_id).filter(
            stmt.c.item_counts >= 0).order_by(Category.id)
    latest_items = session.query(Item).order_by(desc(Item.id)).limit(10).all()
    state = ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for x in xrange(32))
    login_session['state'] = state
    if 'username' not in login_session:
        return render_template('catalog.html',
                               categoryList=categories,
                               latestItems=latest_items,
                               STATE=state)
    return render_template('catalog.html',
                           categoryList=categories,
                           latestItems=latest_items,
                           STATE=state,
                           user_name=login_session['username'])
Exemplo n.º 2
0
def category(category_name):
    """
    category(category_name)
    Display all the items of the category selected by
    category_name

    """
    stmt = session.query(Item.category_id,
                         func.count('*').label('item_counts')).group_by(
                             Item.category_id).subquery()
    categories = session.query(Category).outerjoin(
        stmt, Category.id == stmt.c.category_id).filter(
            stmt.c.item_counts >= 0).order_by(Category.id)
    category = session.query(Category).filter_by(name=category_name).one()
    category_items = session.query(Item).filter_by(
        category_id=category.id).all()
    if 'username' not in login_session:
        return render_template('category.html',
                               categoryList=categories,
                               c=category,
                               categoryItems=category_items)
    return render_template('category.html',
                           categoryList=categories,
                           c=category,
                           categoryItems=category_items,
                           user_name=login_session['username'])
Exemplo n.º 3
0
def deleteItem(item_name):
    """
    deleteItem(item_name)
    Deleting the item selected by item_name
    Operation can only be done by the logged in user
    who first created the item

    """
    itemToDelete = session.query(Item).filter_by(name=item_name).one()
    if request.method == 'POST':
        session.delete(itemToDelete)
        session.commit()
        flash('%s Successfully Deleted' % itemToDelete.name)
        stmt = session.query(Item.category_id,
                             func.count('*').label('item_counts')).group_by(
                                 Item.category_id).subquery()
        categories = session.query(Category).outerjoin(
            stmt, Category.id == stmt.c.category_id).filter(
                stmt.c.item_counts >= 0).order_by(Category.id)
        latest_items = session.query(Item).order_by(desc(Item.id))
        return redirect(
            url_for('catalog.catalogs',
                    categoryList=categories,
                    latestItems=latest_items,
                    user_name=login_session['username']))
    else:
        return render_template('deleteItem.html',
                               item_name=item_name,
                               user_name=login_session['username'])
Exemplo n.º 4
0
def itemDetailJSON(category_name, item_name):
    """
    itemDetailJSON(category_name, item_name)
    return the item of the selected category_name and item_name in JSON format

    """
    item = session.query(Item).filter_by(name=item_name).one()
    return jsonify(item=[item.serialize])
Exemplo n.º 5
0
def catalogsJSON():
    """
    catalogsJSON()
    return the entire catalog in JSON format

    """
    categories = session.query(Category).all()
    return jsonify(categories=[c.serialize for c in categories])
Exemplo n.º 6
0
def getUserInfo(user_id):
    """
    getUserInfo(user_id)
    return the user record from the User table using the supplied user_id

    """
    user = session.query(User).filter_by(id=user_id).one()
    return user
Exemplo n.º 7
0
def categoryJSON(category_name):
    """
    categoryJSON(category_name)
    return the category and its items of the selected category_name
    in JSON format

    """
    category = session.query(Category).filter_by(name=category_name).one()
    return jsonify(category=[category.serialize])
Exemplo n.º 8
0
 def wrapper(item_name):
     if 'username' not in login_session:
         return redirect('/login')
     item = session.query(Item).filter_by(name=item_name).one()
     if item.user_id != login_session['user_id']:
         return "<script>function myFunction()" \
                "{alert('You are not authorized to edit this item." \
                "Please create your own item in order to edit.');}" \
                "</script><body onload='myFunction()''>"
     else:
         return function(item_name)
Exemplo n.º 9
0
def getUserID(email):
    """
    getUserID(email)
    return the user id from the User table using the supplied email address

    """
    try:
        user = session.query(User).filter_by(email=email).one()
        return user.id
    except:
        return None
Exemplo n.º 10
0
def createUser(login_session):
    """
    createUser(login_session)
    Add the user of the existing login session to User table, and return
    user's email address.
    If user exists in the table already, simply return existing record's email.

    """
    newUser = User(name=login_session['username'], email=login_session[
                   'email'], picture=login_session['picture'])
    session.add(newUser)
    session.commit()
    user = session.query(User).filter_by(email=login_session['email']).one()
    return user.id
Exemplo n.º 11
0
def itemDetail(category_name, item_name):
    """
    itemDetail(category_name, item_name)
    Displaying the item info of the item selected
    by category_name and item_name. If the current
    logged in user is the item creator, he/she
    can also edit or delete the item.

    """
    item = session.query(Item).filter_by(name=item_name).one()
    creator = mod_auth.controllers.getUserInfo(item.user_id)
    if ('username' not in login_session
            or creator.id != login_session['user_id']):
        return render_template('publicitem.html', item=item)
    else:
        return render_template('item.html',
                               item=item,
                               user_name=login_session['username'])
Exemplo n.º 12
0
def editItem(item_name):
    """
    editItem()
    Editing an existing item.
    Operation can only be done by the logged in user
    who first created the item

    """
    editedItem = session.query(Item).filter_by(name=item_name).one()
    if request.method == 'POST':
        if request.form['name']:
            editedItem.name = request.form['name']
        if request.form['description']:
            editedItem.description = request.form['description']
        if request.form['category']:
            newCategory = session.query(Category).filter_by(
                name=request.form['category']).one()
            editedItem.category = newCategory
            editedItem.category_id = newCategory.id
        session.add(editedItem)
        session.commit()
        flash('Item Successfully Edited %s' % editedItem.name)
        stmt = session.query(Item.category_id,
                             func.count('*').label('item_counts')).group_by(
                                 Item.category_id).subquery()
        categories = session.query(Category).outerjoin(
            stmt, Category.id == stmt.c.category_id).filter(
                stmt.c.item_counts >= 0).order_by(Category.id)
        latest_items = session.query(Item).order_by(desc(Item.id))
        return redirect(
            url_for('catalog.catalogs',
                    categoryList=categories,
                    latestItems=latest_items,
                    user_name=login_session['username']))
    else:
        stmt = session.query(Item.category_id,
                             func.count('*').label('item_counts')).group_by(
                                 Item.category_id).subquery()
        categories = session.query(Category).outerjoin(
            stmt, Category.id == stmt.c.category_id).filter(
                stmt.c.item_counts >= 0).order_by(Category.id)
        return render_template('editItem.html',
                               categoryList=categories,
                               item=editedItem,
                               user_name=login_session['username'])
Exemplo n.º 13
0
def addItem():
    """
    addItem()
    Creating a new item using HTTP Post method
    New item can be created to existing category
    or a new category. Can only be performed
    by a logged in user

    """
    if request.method == 'POST':
        if request.form['new_category']:
            category = Category(name=request.form['new_category'])
            session.add(category)
        else:
            category = session.query(Category).filter_by(
                name=request.form['category']).first()

        newItem = Item(name=request.form['name'],
                       description=request.form['description'],
                       category=category,
                       user_id=login_session['user_id'])
        session.add(newItem)
        session.commit()
        flash('Item Successfully Added %s' % newItem.name)
        stmt = session.query(Item.category_id,
                             func.count('*').label('item_counts')).group_by(
                                 Item.category_id).subquery()
        categories = session.query(Category).outerjoin(
            stmt, Category.id == stmt.c.category_id).filter(
                stmt.c.item_counts >= 0).order_by(Category.id)
        latest_items = session.query(Item).order_by(desc(Item.id))
        return redirect(
            url_for('catalog.catalogs',
                    categoryList=categories,
                    latestItems=latest_items,
                    user_name=login_session['username']))
    else:
        stmt = session.query(Item.category_id,
                             func.count('*').label('item_counts')).group_by(
                                 Item.category_id).subquery()
        categories = session.query(Category).all()
        return render_template('addItem.html',
                               categoryList=categories,
                               user_name=login_session['username'])