예제 #1
0
from flask.ext.mongokit import Document
from larva_library import app, db

class User(Document):
    __collection__ = 'users'
    required_fields = ['email']
    indexes = [{'fields' : 'email', 'unique' : True}]
    use_dot_notation = True
    structure = {
        'name': unicode,
        'email': unicode,
        'institution': unicode
    }

    def __repr__(self):
        return '<User %r>' % (self.email)

db.register([User])

def find_or_create_by_email(email):
    u = db.User.find_one({'email':email})
    if u is None:
        u = db.User()
        u['email'] = unicode(email)
        u.save()

    return u
예제 #2
0
        'max'           : OR(int, float)
    }
    def to_data(self):
        data = {}
        data['diel_type'] = self.type
        try:
            data['diel_time'] = self.time.strftime("%H") + ":00"
            data['timezone'] = self.time.strftime("%z")
        except:
            data['diel_time'] = None
            data['timezone'] = None
        data['cycle'] = self.cycle;
        data['plus_or_minus'] = self.plus_or_minus
        data['hours'] = self.hours
        data['min'] = self.min
        data['max'] = self.max
        return data

    def __str__(self):
        if self.type == "cycles":
            return "At %s %s%i hour(s): Move towards %fm -> %fm" % (self.cycle, self.plus_or_minus, self.hours, self.min, self.max)
        elif self.type == "specifictime":
            if self.time is not None:
                t = self.time.strftime("%H:%M UTC")
            else:
                t = None
            return "At %s: Move towards %dm -> %dm" % (t, self.min, self.max)
        else:
            return "No known type defined"
db.register([Diel])
예제 #3
0
from mongokit import Document
from larva_library import db
from mongokit import OR

class Taxis(Document):
    __collection__= 'taxis'
    use_dot_notation = True
    structure = {
        'variable'      : unicode,
        'units'         : unicode,
        'min'           : OR(int, float),
        'max'           : OR(int, float),
        'gradient'      : OR(int, float)
    }
    def to_data(self):
        data = {}
        data['variable'] = self.variable
        data['units'] = self.units
        data['min'] = float(self.min)
        data['max'] = float(self.max)
        data['gradient'] = float(self.gradient)
        return data

    def __str__(self):
        return "%s (%s): %f -> %f +/- %f" % (self.variable, self.units, self.min, self.max, self.gradient)
db.register([Taxis])
예제 #4
0
            settlement = db.Settlement.find_one({'_id': sid})

        # Populate newlifestage
        newlifestage = db.LifeStage()
        newlifestage.name = self.name
        newlifestage.duration = self.duration
        newlifestage.notes = self.notes
        newlifestage.linear_a = self.linear_a
        newlifestage.linear_b = self.linear_b
        newlifestage.diel = diels
        newlifestage.taxis = taxis
        newlifestage.capability = capability
        newlifestage.settlement = settlement
        return newlifestage

db.register([LifeStage])

class LifeStageWizard(Form):
    name = TextField('Lifestage Name')
    duration = IntegerField('Lifestage Duration (days)')
    linear = BooleanField("")
    linear_a = FloatField("A", [validators.optional()])
    linear_b = FloatField("B", [validators.optional()])
    notes = TextAreaField('Notes')

    diel = BooleanField('Vertical Migration')
    taxis = BooleanField('Sensory')
    capability = BooleanField('Capability')
    settlement = BooleanField('Transition out of the plankton')

    # Diel
예제 #5
0
        _keywords.extend(self.common_name.split(' '))
        _keywords.extend(self.keywords)
        _keywords.extend(self.geo_keywords)
        self._keywords = list(set(_keywords))
        
    def simplified_json(self):
        tm = json.loads(self.to_json())
        remove_mongo_keys(tm)
        tm['_id'] = str(self._id)
        del(tm['lifestages'])
        del(tm['notes'])
        del(tm['keywords'])
        del(tm['geo_keywords'])
        return tm

db.register([Library])

# custom field classes
class TagListField(Field):
    widget = widgets.TextInput()
    
    def _value(self):
        if self.data:
            return u', '.join(self.data)
        else:
            return u''
        
    def process_formdata(self, valuelist):
        if valuelist:
            self.data = [x.strip() for x in valuelist[0].split(',')]
        else:
예제 #6
0
from mongokit import Document
from larva_library import db
from mongokit import OR


class Capability(Document):
    __collection__ = "capability"
    use_dot_notation = True
    structure = {"vss": OR(int, float), "variance": OR(int, float), "swim_turning": unicode, "nonswim_turning": unicode}


db.register([Capability])
예제 #7
0
from mongokit import Document
from larva_library import db
from mongokit import OR

class Settlement(Document):
    __collection__ = 'settlements'
    use_dot_notation = True
    structure = {
        'upper'     : OR(int, float),
        'lower'     : OR(int, float),
        'type'      : unicode
    }
db.register([Settlement])
예제 #8
0
from larva_library import db, app
from wtforms import *
from datetime import datetime
from copy import deepcopy
import json

class Capability(Document):
    __collection__ = 'capability'
    use_dot_notation = True
    structure = {
        'vss'               : float,
        'variance'          : float,
        'swim_turning'      : unicode,
        'nonswim_turning'   : unicode
    }
db.register([Capability])

class Diel(Document):
    __collection__= 'diel'
    use_dot_notation = True
    structure = {
        'type'          : unicode,
        'time'          : datetime,
        'cycle'         : unicode,
        'plus_or_minus' : unicode,
        'hours'         : int,
        'min'           : float,
        'max'           : float
    }
    def to_data(self):
        data = {}