class UserData(grumble.Model): _flat = True _audit = False cookie = grumble.TextProperty(is_key = True) last_access = grumble.DateTimeProperty(auto_now = True) userid = grumble.TextProperty() access_token = grumble.TextProperty() valid_until = grumble.DateTimeProperty()
class HttpAccess(grumble.Model): _flat = True _audit = False timestamp = grumble.DateTimeProperty(auto_now_add=True) remote_addr = grumble.TextProperty() user = grumble.TextProperty() path = grumble.TextProperty() method = grumble.TextProperty() status = grumble.TextProperty() elapsed = grumble.IntegerProperty()
class MedicationHistory(grumble.Model): timestamp = grumble.DateProperty(auto_now_add=True) current = grumble.BooleanProperty() medication = grumble.ReferenceProperty(Medication) dose = grumble.TextProperty() units = grumble.TextProperty("mg", "tablets", "g", "Other") frequency = grumble.TextProperty(choices=[ "Daily", "Twice a day", "Three times a day", "Four times a day", "Other" ]) experiences = grumble.TextProperty(multiline=True)
class PasswordReset(grumble.Model): userid = grumble.TextProperty() password = grumble.TextProperty() user_doesnt_exists = grudge.Status() password_generated = grudge.Status() mail_sent = grudge.Status() confirmed = grudge.Status() password_reset = grudge.Status() def generate_password(self): try: logger.debug("PasswordReset::generate_password") um = grit.Session.get_usermanager() user = um.get(self.userid) if user is None or not user.exists(): logger.debug("User %s does not exist", self.userid) return self.user_doesnt_exist logger.debug("User OK") self.password = um.gen_password() self.put() return self.password_generated except gripe.auth.UserExists: return self.user_exists except gripe.Error as e: logger.debug("Create user Error: %s" % e) raise def prepare_message(self, msg, ctx): msg.set_header( "X-ST-URL", "%s/um/confirmreset/%s" % (Config.app.config.application_url, self.id())) return ctx def reset_password(self): um = grit.Session.get_usermanager() try: user = um.get(self.userid) if user is None: logger.debug("User %s does not exist", self.userid) return self.user_doesnt_exist user.password = self.password user.put() logger.debug("Password successfully reset") self.password = None self.put() return self.password_reset except gripe.Error as e: logger.debug("Password Reset Error: %s" % e) raise
class UserCreate(grumble.Model): userid = grumble.TextProperty() display_name = grumble.TextProperty() password = grumble.TextProperty() confirm = grumble.BooleanProperty() user_exists = grudge.Status() user_created = grudge.Status() mail_sent = grudge.Status() confirmed = grudge.Status() user_activated = grudge.Status() def create_user(self): try: um = grit.Session.get_usermanager() if not self.password: self.password = gripe.auth.generate_password() um.add(self.userid, password=self.password, display_name=self.display_name) self.put() logger.debug("Create User OK") return self.user_created if not self.confirm else self.confirmed except gripe.auth.UserExists: return self.user_exists except gripe.Error as e: logger.debug("Create user Error: %s" % e) raise def prepare_message(self, msg, ctx): msg.set_header( "X-ST-URL", "%s/um/confirmreset/%s" % (Config.app.config.application_url, self.id())) return ctx def activate_user(self): um = grit.Session.get_usermanager() try: user = um.get(self.userid) if user: user.confirm() logger.debug("Activate User OK") return self.user_activated else: raise gripe.auth.UserDoesntExists(self.userid) except gripe.Error as e: logger.debug("Activate user Error: %s" % e) raise
class Person(grumble.Model): name = grumble.TextProperty(required=True, is_label=True, is_key=True, scoped=True) age = grumble.IntegerProperty(default=30, validator=check_age) can_drive = CanDriveProperty()
class Step2(grumble.Model): sendmail = grudge.Status() stopme = grudge.Status() recipients = grumble.TextProperty() def set_recipients(self): self.recipients = "*****@*****.**" self.put() return self.sendmail
class UserSignup(grumble.Model): userid = grumble.TextProperty() password = grumble.PasswordProperty() display_name = grumble.TextProperty() user_exists = grudge.Status() user_created = grudge.Status() mail_sent = grudge.Status() confirmed = grudge.Status() user_activated = grudge.Status() def create_user(self): try: um = grit.Session.get_usermanager() um.add(self.userid, **{ "password": self.password, "label": self.display_name }) logger.debug("Create User OK") return self.user_created except gripe.auth.UserExists: return self.user_exists except gripe.Error as e: logger.debug("Create user Error: %s" % e) raise def prepare_message(self, msg, ctx): msg.set_header("X-ST-URL", "http://localhost/um/confirm/%s" % self.id()) return ctx def activate_user(self): um = grit.Session.get_usermanager() try: user = um.get(self.userid) if user: user.confirm() logger.debug("Activate User OK") return self.user_activated else: raise gripe.auth.UserDoesntExists(self.userid) except gripe.Error as e: logger.debug("Activate user Error: %s" % e) raise
class MedicationRequest(grumble.Model): medication = grumble.TextProperty(is_label=True) manufacturer = grumble.TextProperty() remarks = grumble.TextProperty() medication_exists = grudge.Status() medication_created = grudge.Status() confirmed = grudge.Status() user_activated = grudge.Status() def create_user(self): try: um = grit.Session.get_usermanager() um.add(self.userid, self.password, self.display_name) logger.debug("Create User OK") return self.user_created except gripe.auth.UserExists as e: return self.user_exists except gripe.Error as e: logger.debug("Create user Error: %s" % e) raise def prepare_message(self, msg, ctx): msg.set_header("X-ST-URL", "http://localhost/um/confirm/%s" % self.id()) return ctx def activate_user(self): um = grit.Session.get_usermanager() try: um.confirm(self.userid) logger.debug("Activate User OK") return self.user_activated except gripe.Error as e: logger.debug("Activate user Error: %s" % e) raise
class UploadActivity(grumble.Model): uploadedFile = grumble.ReferenceProperty(grit.upload.UploadedFile) athlete = grumble.ReferenceProperty(grizzle.User) filename = grumble.property.StringProperty() converted = grumble.BooleanProperty(default=False) error = grumble.TextProperty() done = grudge.Status() def check(self): logger.debug("UploadActivity(%s).check", self.filename) uploaded = self.uploadedFile user = uploaded.get_user() if not user.has_role("athlete"): logger.debug( "UploadActivity(%s).check: User %s cannot upload activities because they don't have the 'athlete' role", self.filename, user.uid()) self.error = "User %s cannot upload activities because they don't not have the 'athlete' role" % user.uid( ) self.put() return False q = UploadActivity.query('"filename" =', uploaded.filename, '"athlete" =', user, '"converted" = ', True) already_uploaded = q.get() if already_uploaded: logger.debug( "UploadActivity(%s).check: User '%s' already uploaded file", self.filename, user.uid()) self.error = "User '%s' already uploaded file '%s'" % ( user.uid(), uploaded.filename) self.put() return False self.filename = uploaded.filename self.athlete = user self.put() logger.debug("UploadActivity(%s).check OK", self.filename) return True def import_file(self): logger.debug("UploadActivity(%s).import_file", self.filename) uploaded = self.uploadedFile try: parser = sweattrails.device.get_parser(uploaded.filename) parser.set_athlete(self.athlete) parser.parse(uploaded.content.adapted) logger.debug("UploadActivity(%s).import_file: file parsed", self.filename) self.converted = True except exceptions.Exception as e: logger.exception("Exception parsing file %s", self.filename) self.error = traceback.format_exc() self.put() def cleanup(self): logger.debug("UploadActivity(%s).cleanup", self.filename) grumble.model.delete(self.uploadedFile) self.uploadedFile = None self.put() def invoke(self): logger.debug("UploadActivity(%s).invoke", self.filename) if self.check(): self.import_file() self.cleanup()
class Medication(grumble.Model): medication = grumble.TextProperty(is_key=True, is_label=True) manufacturer = grumble.ReferenceProperty(Manufacturer) description = grumble.TextProperty() adverse_effects = grumble.TextProperty()
class Manufacturer(grumble.Model): name = grumble.TextProperty(is_key=True, is_label=True) country = grumble.ReferenceProperty(sweattrails.config.Country) notes = grumble.TextProperty(multiline=True)
class AddedStatus(grumble.Model): status = grumble.TextProperty()
class SelfRefTest(grumble.Model): self_ref_name = grumble.TextProperty(key=True, required=True) ref = grumble.SelfReferenceProperty(collection_name="loves")
class Pet(grumble.Model): name = grumble.TextProperty(required=True, is_key=True) owner = grumble.ReferenceProperty(Person)
class Test3(grumble.Model): name = grumble.TextProperty(required=True, is_label=True) value = grumble.IntegerProperty(default=12)