changeset 6:59ab5090d9ac

models
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 01 Jun 2013 22:33:39 +0200
parents a7c071fbec7f
children 0bdb36afda8a
files runserver.py server/models.py
diffstat 1 files changed, 52 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/server/models.py	Sat Jun 01 20:29:32 2013 +0200
+++ b/server/models.py	Sat Jun 01 22:33:39 2013 +0200
@@ -1,6 +1,6 @@
 from sqlalchemy import (Column, Integer, BigInteger, 
         String, DateTime, Boolean, Sequence, ForeignKey, 
-        Table, desc, Numeric)
+        Table, desc, Numeric, Float)
 from sqlalchemy.orm import relationship, backref
 from .database import Base
 from .helpers import gen_filename
@@ -10,7 +10,7 @@
 from hashlib import sha256
 
 
-class Boilerplate(Object):
+class Boilerplate(object):
     string_id = Column(String(12), unique=True)
     timestamp = Column(DateTime())
     edition_timestamp = Column(DateTime())
@@ -22,8 +22,6 @@
         self.edition_timestamp = self.timestamp
         self.disabled = False
 
-        # Add checking for exisence of that string_id
-
     def __setattr__(self, name, value):
         self.__dict__['edition_timestamp'] = datetime.now()
         Base.__setattr__(self, name, value)
@@ -32,6 +30,7 @@
     def edited(self):
         self.edition_timestamp = datetime.now()
 
+
 class User(Boilerplate, Base):
     __tablename__ = 'users'
     id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
@@ -58,25 +57,61 @@
         return '<User %r, %r>' % (self.email, self.admin)
 
     def set_pass(self, password):
-        self.password = sha256(password+self.salt+app.config['SALT']).\
-                hexdigest()
-        self.password_swapped = sha256(password.swapcase()+self.salt+app.config['SALT']).\
-                hexdigest()
-        
-        self.edited()
+        self.password = sha256(
+            password + self.salt + app.config['SALT']
+        ).hexdigest()
 
     def check_pass(self, password):
-        if sha256(password+self.salt+app.config['SALT']).hexdigest()\
-                == self.password or\
-                sha256(password.swapcase()+self.salt+app.config['SALT']).hexdigest()\
-                == self.password_swapped:
-                    return True
-        return False
+        return (
+            sha256(
+                password + self.salt + app.config['SALT']
+            ).hexdigest() == self.password
+            or
+            sha256(
+                password.swapcase() + self.salt + app.config['SALT']
+            ).hexdigest() == self.password_swapped
+        )
 
     def update_pass(self, old_pass, new_pass):
         if old_pass == new_pass:
-            return -1
+            raise ValueError("New password is the same as old password")
         if self.check_pass(old_pass):
             self.set_pass(new_pass)
             return True
         return False
+
+
+class UserNumber(Boilerplate, Base):
+    __tablename__ = 'user_number'
+    number = Column(String(20), primary_key=True)
+    owner = ForeignKey(User)
+
+
+class Mac(Boilerplate, Base):
+    __tablename__ = 'mac'
+    mac = Column(String(16), primary_key=True)
+    owner = ForeignKey(User)
+
+
+class PanicContact(Boilerplate, Base):
+    __tablename__ = 'panic_contact'
+    id = Column(Integer, Sequence('panic_contact_id_seq'), primary_key=True)
+    name = Column(String())
+    number = Column(String(20))
+    comment = Column(String())
+
+
+class Checkin(Boilerplate, Base):
+    __tablename__ = 'checkin'
+    id = Column(Integer, Sequence('checkin_id_seq'), primary_key=True)
+    time = Column(DateTime())
+    lat = Column(Float)
+    long = Column(Float)
+    accuracy = Column(Float)
+
+
+checkin_user = Table('checkin_user', Base.metadata,
+    Column('checkin_id', Integer, ForeignKey('checkin.id'), primary_key=True),
+    Column('user_id', Integer, ForeignKey('user.id'), primary_key=True),
+)
+