Пример #1
0
def edit_lifestage(library_id, lifestage_id):

    # Get library object
    entry = db.Library.find_one({'_id':library_id})
    if entry is None:
        flash('Cannot find library ' + str(library_id) + ' for editing')
        return redirect(url_for('index'))

    # Permissions
    if session.get('user_email', None) != entry.user:
        flash('%s does not have permission to edit this entry')
        return redirect(url_for('index'))

    # Get the lifestage object we are editing
    old_lifestage = None
    for lifestage in entry.lifestages:
        if lifestage['_id'] == lifestage_id:
            old_lifestage = lifestage

    if old_lifestage is None:
        flash('Cannot find lifestage ' + str(lifestage_id) + ' for editing')
        return redirect(url_for('detail_view', library_id=entry._id ))

    form = LifeStageWizard(request.form, obj=lifestage)

    if request.method == 'POST' and form.validate():

        lifestage = db.LifeStage()
        lifestage.name = form.name.data
        lifestage.duration = form.duration.data
        lifestage.notes = form.notes.data
        lifestage.diel = [] 
        lifestage.taxis = []
        lifestage.capability = None

        # Capability
        if form.capability.data:
            c = db.Capability()
            c.vss = float(form.vss.data)
            c.variance = float(form.variance.data)
            c.swim_turning = form.swim_turning.data
            c.nonswim_turning = form.nonswim_turning.data
            c.save()
            lifestage.capability = c

        # Diel
        if form.diel_data.data and len(form.diel_data.data) > 0:

            parsed_diel = json.loads(form.diel_data.data)
            for diel_data in parsed_diel:

                d = db.Diel()
                d.type = unicode(diel_data['diel_type'])
                d.min = float(diel_data['min'])
                d.max = float(diel_data['max'])

                if d.type == u'cycles':
                    d.cycle = unicode(diel_data['cycle'])
                    d.plus_or_minus = unicode(diel_data['plus_or_minus'])
                    d.hours = int(diel_data['hours'])
                elif d.type == u'specifictime':
                    t = parse("%s %s" % (diel_data['diel_time'], diel_data['timezone']))
                    try:
                        d.time = pytz.utc.normalize(t).replace(tzinfo=None)
                    except:
                        # already in GMT
                        d.time = t
                    
                d.save()
                lifestage.diel.append(d)
            
        if form.taxis_data.data and len(form.taxis_data.data) > 0:

            parsed_taxis = json.loads(form.taxis_data.data)
            for taxis_data in parsed_taxis:

                t = db.Taxis()            
                t.variable = taxis_data['variable']
                t.units = taxis_data['units']
                t.min = float(taxis_data['min'])
                t.max = float(taxis_data['max'])
                t.gradient = float(taxis_data['gradient'])

                t.save()
                lifestage.taxis.append(t)

        lifestage.save()


        # Remove lifestage we are editing
        entry.lifestages.remove(old_lifestage)

        # Add new lifestage
        entry.lifestages.append(lifestage)
        entry.save()

        flash('Edited LifeStage')
        return redirect(url_for('detail_view', library_id=entry._id ))

    else:
        diels = []
        for diel in lifestage.diel:
            diels.append(diel.to_data())
        form.diel_data.data = json.dumps(diels)
        
        taxis = []
        for tx in lifestage.taxis:
            taxis.append(tx.to_data())
        form.taxis_data.data = json.dumps(taxis)

        form.vss.data = lifestage.capability.vss
        form.variance.data = lifestage.capability.variance
        form.swim_turning.data = lifestage.capability.swim_turning
        form.nonswim_turning.data = lifestage.capability.nonswim_turning

    return render_template('lifestage_wizard.html', form=form)
Пример #2
0
def lifestage_wizard(library_id):

    # Be sure the logged in user has access to this library item
    entry = db.Library.find_one({'_id': library_id})
    if entry.user != session['user_email']:
        flash("Not authorized to add lifestages to this library item")

    form = LifeStageWizard(request.form)

    if request.method == 'POST' and form.validate():

        lifestage = db.LifeStage()
        lifestage.name = form.name.data
        lifestage.duration = form.duration.data
        lifestage.notes = form.notes.data
        lifestage.diel = [] 
        lifestage.taxis = []
        lifestage.capability = None

        # Capability
        if form.capability.data:
            c = db.Capability()
            c.vss = float(form.vss.data)
            c.variance = float(form.variance.data)
            c.swim_turning = form.swim_turning.data
            c.nonswim_turning = form.nonswim_turning.data
            c.save()
            lifestage.capability = c

        # Diel
        if form.diel_data.data and len(form.diel_data.data) > 0:

            parsed_diel = json.loads(form.diel_data.data)
            for diel_data in parsed_diel:

                d = db.Diel()
                d.type = unicode(diel_data['diel_type'])
                d.min = float(diel_data['min'])
                d.max = float(diel_data['max'])

                if d.type == u'cycles':
                    d.cycle = unicode(diel_data['cycle'])
                    d.plus_or_minus = unicode(diel_data['plus_or_minus'])
                    d.hours = int(diel_data['hours'])
                elif d.type == u'specifictime':
                    t = parse("%s %s" % (diel_data['diel_time'], diel_data['timezone']))
                    d.time = pytz.utc.normalize(t).replace(tzinfo=None)
                    
                d.save()
                lifestage.diel.append(d)
            
        if form.taxis_data.data and len(form.taxis_data.data) > 0:

            parsed_taxis = json.loads(form.taxis_data.data)
            for taxis_data in parsed_taxis:

                t = db.Taxis()            
                t.variable = taxis_data['variable']
                t.units = taxis_data['units']
                t.min = float(taxis_data['min'])
                t.max = float(taxis_data['max'])
                t.gradient = float(taxis_data['gradient'])

                t.save()
                lifestage.taxis.append(t)

        lifestage.save()
        entry.lifestages.append(lifestage)
        entry.save()

        flash('Created LifeStage')
        return redirect(url_for('detail_view', library_id=entry._id ))

    return render_template('lifestage_wizard.html', form=form)