Esempio n. 1
0
class OrdersMaintenance(db.Model):
    IdOrder = db.Column(db.Integer, primary_key=True)
    OrderNumber = db.Column(db.String(250), nullable=True)
    FirstName = db.Column(db.String(250), nullable=True)
    LastName = db.Column(db.String(250), nullable=True)
    PhoneNumber = db.Column(db.String(250), nullable=True)
    Email = db.Column(db.String(250), nullable=True)
    Address = db.Column(db.String(250), nullable=True)
    IdService = db.Column(db.Integer, db.ForeignKey('service.IdService'))
    IdAgent = db.Column(db.Integer, db.ForeignKey('agent.IdAgent'))
    Price = db.Column(db.String(250), nullable=True)
    IdPriority = db.Column(db.Integer, db.ForeignKey('priority.IdPriority'))
    latit = db.Column(db.String(250), nullable=True)
    lon = db.Column(db.String(250), nullable=True)
    IdOrderStatus = db.Column(db.Integer,
                              db.ForeignKey('order_status.IdOrderStatus'))
    Ordertime = db.Column(db.String(250), nullable=True)
    Time = db.Column(db.Integer, db.ForeignKey('time.IdTime'))
    Comment = db.Column(db.String(250), nullable=True)
    CreatedAt = db.Column(db.DateTime, nullable=False)

    service = db.relationship("Service", backref="OrdersMaintenance")
    priority = db.relationship("Priority", backref="OrdersMaintenance")
    status = db.relationship("OrderStatus", backref="OrdersMaintenance")
    time = db.relationship("Time", backref="OrdersMaintenance")
    agent = db.relationship("Agent", backref="OrdersMaintenance")

    def __repr__(self):
        return f"OrdersMaintenance('{self.IdOrder}',{self.OrderNumber}','{self.FirstName}','{self.LastName}','{self.PhoneNumber}','{self.Email}','{self.IdService}','{self.Price}','{self.IdPriority}','{self.IdOrderStatus}','{self.Ordertime}','{self.Time}','{self.IdAgent}','{self.latit}','{self.lon}','{self.Comment}')"
Esempio n. 2
0
class IncidentalFinding(db.Model):
    __tablename__ = 'incidental_findings'

    id = db.Column(db.Integer, primary_key=True)
    session_id = db.Column(db.Integer,
                           db.ForeignKey('sessions.id'),
                           nullable=False)
    session = db.relationship('Session', back_populates="incidental_findings")
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', back_populates="incidental_findings")
Esempio n. 3
0
class MetricValue(db.Model):
    __tablename__ = 'scanmetrics'

    id = db.Column(db.Integer, primary_key=True)
    _value = db.Column('value', db.String)
    scan_id = db.Column(db.Integer, db.ForeignKey('scans.id'), nullable=False)
    scan = db.relationship('Scan', back_populates="metricvalues")
    metrictype_id = db.Column(db.Integer, db.ForeignKey('metrictypes.id'))
    metrictype = db.relationship('MetricType', back_populates="metricvalues")

    @property
    def value(self):
        """Returns the value field from the database.
        The value is stored as a string.
        If the value contains '::' character this will convert it to a list,
        otherwise it will attempt to cast to Float.
        Failing that the value is returned as a string.
        """
        if self._value is None:
            return (None)
        value = self._value.split('::')
        try:
            value = [float(v) for v in value]
        except ValueError:
            return (''.join(value))
        if len(value) == 1:
            return (value[0])
        else:
            return (value)

    @value.setter
    def value(self, value, delimiter=None):
        """Stores the value in the database as a string.
        If the delimiter is specified any characters matching delimiter are
        replaced with '::' for storage.

        Keyword arguments:
        [delimiter] -- optional character string that is replaced by '::' for
            database storage.
        """
        if delimiter is not None:
            try:
                value = value.replace(delimiter, '::')
            except AttributeError:
                pass
        self._value = str(value)

    def __repr__(self):
        return ('<Scan {}: Metric {}: Value {}>'.format(
            self.scan.name, self.metrictype.name, self.value))
Esempio n. 4
0
class ScanComment(db.Model):
    __tablename__ = 'scan_comments'

    id = db.Column(db.Integer, primary_key=True)
    scan_id = db.Column(db.Integer, db.ForeignKey('scans.id'), nullable=False)
    scan = db.relationship('Scan', back_populates="analysis_comments")
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
    user = db.relationship('User', back_populates="analysis_comments")
    analysis_id = db.Column(db.Integer,
                            db.ForeignKey('analyses.id'),
                            nullable=False)
    analysis = db.relationship('Analysis', back_populates="analysis_comments")
    excluded = db.Column(db.Boolean, default=False)
    comment = db.Column(db.String)
Esempio n. 5
0
class LoGrade(db.Model):
    __tablename__ = "lo_grades"

    grade_id = db.Column(db.Integer, primary_key=True)
    lo_id = db.Column(db.Integer, db.ForeignKey(Lo.lo_id))
    user_id = db.Column(db.Integer, db.ForeignKey(Lo.user_id))
    score = db.Column(db.Integer)  # Score (1-5)
    weight = db.Column(db.Integer)  # Score Weight
    time = db.Column(db.DateTime)  # Date and time the score was received
    assignment = db.Column(db.Boolean)  # Whether the score was received for an assignment

    __table_args__ = (db.ForeignKeyConstraint([lo_id, user_id],
                                              [Lo.lo_id, Lo.user_id]),
                      {'extend_existing': True})
    lo = db.relationship("Lo", foreign_keys=[lo_id, user_id], back_populates="grades")
Esempio n. 6
0
class HcGrade(db.Model):
    __tablename__ = "hc_grades"

    grade_id = db.Column(db.Integer, primary_key=True)
    hc_id = db.Column(db.Integer, db.ForeignKey('hcs.hc_id'))
    user_id = db.Column(db.Integer, db.ForeignKey('hcs.user_id'))
    score = db.Column(db.Integer)  # Score (1-5)
    weight = db.Column(db.Integer)  # Score Weight
    time = db.Column(db.DateTime)  # Date and time the grade was received
    assignment = db.Column(db.Boolean)  # Whether the grade was received for an assignment
    transfer = db.Column(db.Boolean)  # Whether the grade counts for transfer

    __table_args__ = (db.ForeignKeyConstraint([hc_id, user_id],
                                              [Hc.hc_id, Hc.user_id]),
                      {'extend_existing': True})
    hc = db.relationship("Hc", foreign_keys=[hc_id, user_id], back_populates="grades")
Esempio n. 7
0
class Post(db.Model):
    __tablename__ = "posts"
    title = db.Column(db.String(255))
    link = db.Column(db.String(255))
    tag = db.Column(db.String(60))
    datetime = db.Column(db.String(60))
    origin = db.Column(db.String(60))
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    # 外键名为 '表名.字段名'
    author_id = db.Column(db.Integer, db.ForeignKey("authors.id"))
    # 创建一个属性代表它的作者对象
    author = db.relationship("Author", back_populates="posts")

    def __init__(self, title, link, tag, origin, author):
        self.title = title
        self.link = link
        self.tag = tag
        self.origin = origin
        self.datetime = None
        self.author = author
        if isinstance(author, Author):
            self.author_id = author.id
        else:
            # 抛出异常
            raise Exception(TypeError)

    @dateTimeFormatter
    def setDateTime(self, date=None):
        self.datetime = date

    # 重写输出函数,方便打印
    def __repr__(self):
        return "Class:{}<id:{} title:{} link:{} tag:{} datetime:{} origin:{}>".format(
            "Post", self.id, self.title, self.link, self.tag, self.datetime,
            self.origin)
Esempio n. 8
0
class OrdersCleaning(db.Model):
    IdOrder = db.Column(db.Integer, primary_key=True)
    OrderNumber = db.Column(db.String(250), nullable=True)
    FirstName = db.Column(db.String(250), nullable=True)
    LastName = db.Column(db.String(250), nullable=True)
    PhoneNumber = db.Column(db.String(250), nullable=True)
    Email = db.Column(db.String(250), nullable=True)
    Address = db.Column(db.String(250), nullable=True)
    Service = db.Column(db.String(250), nullable=True)
    Price = db.Column(db.String(250), nullable=True)
    BookingType = db.Column(db.Integer, nullable=True)
    IdOrderStatus = db.Column(db.Integer,
                              db.ForeignKey('order_status.IdOrderStatus'))
    Time = db.Column(db.String(250), nullable=True)
    latit = db.Column(db.String(250), nullable=True)
    lon = db.Column(db.String(250), nullable=True)
    Maid = db.Column(db.String(250), nullable=True)
    OrderDate = db.Column(db.String(250), nullable=True)
    Comment = db.Column(db.String(250), nullable=True)
    CreatedAt = db.Column(db.DateTime, nullable=False)

    status = db.relationship("OrderStatus", backref="OrdersCleaning")

    def __repr__(self):
        return f"OrdersCleaning('{self.IdOrder}',{self.OrderNumber}','{self.FirstName}','{self.LastName}','{self.PhoneNumber}','{self.Email}','{self.Service}','{self.Price}','{self.Maid}','{self.OnceDate}','{self.BookingType}','{self.IdOrderStatus}','{self.Ordertime}','{self.Time}','{self.Comment}','{self.StartDate}','{self.latit}','{self.lon}','{self.EndDate}')"
Esempio n. 9
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    dam_id = db.Column(db.Integer, db.ForeignKey('dam.id'), nullable=False)

    def __repr__(self):
        return f"User({self.username}, {self.dam_id})"
Esempio n. 10
0
class Size(db.Model):
    IdSize = db.Column(db.Integer, primary_key=True)
    Size = db.Column(db.String(250), nullable=False)
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    CreatedAt = db.Column(db.DateTime, nullable=False)
    situation = db.relationship('Situation', backref='Size')

    def __repr__(self):
        return f"Portion('{self.IdSize }','{self.Enabled }','{self.Size }','{self.CreatedAt}')"
Esempio n. 11
0
class Categories(db.Model):
    IdCategory = db.Column(db.Integer, primary_key=True)
    Category = db.Column(db.String(250), nullable=False)
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    CreatedAt = db.Column(db.DateTime, nullable=False)
    situation = db.relationship('Situation', backref='Categories')

    def __repr__(self):
        return f"Categories('{self.IdCategory}','{self.Category },'{self.Enabled}','{self.CreatedAt}')"
Esempio n. 12
0
class ExtraService(db.Model):
    IdService = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(250), nullable=False)
    Price = db.Column(db.String(250), nullable=False)
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    CreatedAt = db.Column(db.DateTime, nullable=False)
    situation = db.relationship('Situation', backref='ExtraService')

    def __repr__(self):
        return f"ExtraService('{self.IdService}','{self.Name},'{self.Price}','{self.Enabled}','{self.CreatedAt}')"
Esempio n. 13
0
class Device(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), nullable=False)
    mac = db.Column(db.String(17), nullable=False)
    data_measured = db.Column(db.String(30), nullable=False)
    api_key = db.Column(db.String(32), unique=True, nullable=False)
    dam_id = db.Column(db.Integer, db.ForeignKey('dam.id'), nullable=False)
    data = db.relationship('Data', backref='collected_by', lazy=True)

    def __repr__(self):
        return f"Device({self.name}, {self.mac}, {self.data_measured})"
Esempio n. 14
0
class Agent(db.Model):
    IdAgent = db.Column(db.Integer, primary_key=True)
    FirstName = db.Column(db.String(250), nullable=True)
    LastName = db.Column(db.String(250), nullable=True)
    Password = db.Column(db.String(250), nullable=True)
    PhoneNumber = db.Column(db.String(250), nullable=True)
    Address = db.Column(db.String(250), nullable=True)
    IdService = db.Column(db.Integer, db.ForeignKey('service.IdService'))
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    Time = db.Column(db.Integer, db.ForeignKey('time.IdTime'))
    lat = db.Column(db.String(250), nullable=True)
    lon = db.Column(db.String(250), nullable=True)
    CreatedAt = db.Column(db.DateTime, nullable=False)

    service = db.relationship('Service', backref="Agent")
    time = db.relationship('Time', backref="Agent")
    situation = db.relationship('Situation', backref='Agent')

    def __repr__(self):
        return f"Agent('{self.IdAgent}',{self.FirstName}','{self.LastName}','{self.Password}','{self.PhoneNumber}','{self.Address}','{self.IdService}','{self.Time}',,'{self.lat}','{self.lon}','{self.CreatedAt}')"
Esempio n. 15
0
class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime,
                            nullable=False,
                            default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Post('{self.title}', '{self.date_posted}')"
Esempio n. 16
0
class Study(db.Model):
    __tablename__ = 'studies'

    id = db.Column(db.Integer, primary_key=True)
    nickname = db.Column(db.String(12), index=True, unique=True)
    name = db.Column(db.String(64))
    scantypes = db.relationship('ScanType',
                                secondary=study_scantype_table,
                                back_populates='studies')
    sites = db.relationship('Site',
                            secondary=study_site_table,
                            back_populates='studies')
    sessions = db.relationship('Session')
    description = db.Column(db.String(1024))
    fullname = db.Column(db.String(1024))
    primary_contact_id = db.Column(db.Integer, db.ForeignKey('people.id'))
    primary_contact = db.relationship('Person')
    users = db.relationship('User',
                            secondary=study_user_table,
                            back_populates='studies')

    def __repr__(self):
        return ('<Study {}>'.format(self.nickname))

    def get_valid_metric_names(self):
        """return a list of metric names with duplicates removed"""
        valid_fmri_scantypes = ['IMI', 'RST', 'EMP', 'OBS', 'SPRL', 'VN-SPRL']
        names = []
        for scantype in self.scantypes:
            for metrictype in scantype.metrictypes:
                if scantype.name.startswith('DTI'):
                    names.append(('DTI', metrictype.name))
                elif scantype.name in valid_fmri_scantypes:
                    names.append(('FMRI', metrictype.name))
                elif scantype.name == 'T1':
                    names.append(('T1', metrictype.name))

        names = sorted(set(names))
        return (names)

    def session_count(self, type=None):
        if type.lower() == 'human':
            sessions = [
                session for session in self.sessions if not session.is_phantom
            ]
        elif type.lower() == 'phantom':
            sessions = [
                session for session in self.sessions if session.is_phantom
            ]
        else:
            sessions = [session for session in self.sessions]

        return (len(sessions))
Esempio n. 17
0
class Data(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    data = db.Column(db.Integer, nullable=False)
    timestamp = db.Column(db.DateTime,
                          nullable=False,
                          default=datetime.datetime.utcnow())
    device_id = db.Column(db.Integer,
                          db.ForeignKey('device.id'),
                          nullable=False)

    def __repr__(self):
        return f"Data({self.data}, {self.timestamp})"
Esempio n. 18
0
class Users(db.Model, UserMixin):
    IdUser = db.Column(db.Integer, primary_key=True)
    IdRole = db.Column(db.Integer, db.ForeignKey('role.IdRole'))
    FirstName = db.Column(db.String(250), nullable=True)
    LastName = db.Column(db.String(250), nullable=True)
    Email = db.Column(db.String(250), nullable=True)
    PhoneNumber = db.Column(db.String(250), nullable=True)
    Address = db.Column(db.String(250), nullable=True)
    Pasword = db.Column(db.String(250), nullable=True)
    CreatedAt = db.Column(db.DateTime, nullable=False)
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    role = db.relationship('Role', backref="Users")
    situation = db.relationship('Situation', backref='Users')

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.IdUser}).decode('utf-8')

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except TypeError:
            print('Type error in verify reset token')
        except Exception as e:
            print("Error '{0}' occurred. Arguments {1}.".format(
                e.message, e.args))
        finally:
            if user_id is None:
                user_id = None
        return Users.query.get(user_id)

    def __repr__(self):
        return f"Users('{self.IdUser}','{self.IdRole},'{self.FirstName}','{self.LastName}','{self.Email}','{self.PhoneNumber}','{self.Address}','{self.Pasword}','{self.CreatedAt}','{self.Enabled}')"

    def get_id(self):
        return (self.IdUser)
Esempio n. 19
0
class Products(db.Model):
    IdProduct = db.Column(db.Integer, primary_key=True)
    Name = db.Column(db.String(250), nullable=True)
    Description = db.Column(db.String(250), nullable=True)
    Benefit = db.Column(db.String(250), nullable=True)
    Usage = db.Column(db.String(250), nullable=True)
    ImageUrl = db.Column(db.String(250), nullable=True)
    IdSize = db.Column(db.Integer, db.ForeignKey('size.IdSize'))
    IdUser = db.Column(db.Integer, db.ForeignKey('users.IdUser'))
    Enabled = db.Column(db.Integer, db.ForeignKey('situation.IdSituation'))
    IdCategory = db.Column(db.Integer, db.ForeignKey('categories.IdCategory'))
    Price = db.Column(db.String(250), nullable=True)
    CreatedAt = db.Column(db.DateTime, nullable=False)
    size = db.relationship("Size", backref="Products")
    user = db.relationship('Users', backref="Products")
    cat = db.relationship('Categories', backref="Products")
    situation = db.relationship('Situation', backref='Products')

    def __repr__(self):
        return f"Products('{self.IdProduct}',{self.Name}','{self.Description}','{self.Benefit}','{self.Usage}','{self.ImageUrl}','{self.IdSize}','{self.Enabled}','{self.IdUser}','{self.IdCategory}','{self.Price}','{self.CreatedAt}')"

    @property
    def serialize(self):
        """Return object data in easily serializable format"""
        return {
            'IdProduct': self.IdProduct,
            'Name': self.Name,
            'Description': self.Description,
            'Benefit': self.Benefit,
            'ImageUrl': self.ImageUrl,
            'IdSize': self.size.Size,
            'IdCategory': self.cat.Category,
            'Enabled': self.Enabled,
            'Price': self.Price,
            'CreatedAt': self.CreatedAt
        }
Esempio n. 20
0
class MetricType(db.Model):
    __tablename__ = 'metrictypes'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(12))
    scantype_id = db.Column(db.Integer,
                            db.ForeignKey('scantypes.id'),
                            nullable=False)
    scantype = db.relationship('ScanType', back_populates='metrictypes')
    metricvalues = db.relationship('MetricValue')

    db.UniqueConstraint('name', 'scantype_id')

    def __repr__(self):
        return ('<MetricType {}>'.format(self.name))
Esempio n. 21
0
class Tasks(db.Model):

    __tablename__ = 'Tasks'
    __bind_key__ = 'flask'

    id = db.Column(db.Integer, primary_key=True)
    created = db.Column(db.DateTime, default=datetime.utcnow)
    ownerid = db.Column(db.Integer, db.ForeignKey('Users.id'))
    marketid = db.Column(db.String(64), nullable=False)
    taskid = db.Column(db.String(64), nullable=False)
    taskicon = db.Column(db.String(64), nullable=False)
    taskname = db.Column(db.String(64), nullable=False)
    progress = db.Column(db.String(64), default='?/?')
    completion = db.Column(db.Integer, default=0)

    # repr method represents how one object of this datatable
    # will look like
    def __repr__(self):
        return str(self.taskname)
Esempio n. 22
0
class Player_Hero(db.Model):

    id = db.Column(db.Integer, primary_key=True)
    hero_id = db.Column(db.String(256), nullable=False)
    energy = db.Column(db.Float, nullable=False)
    active = db.Column(db.Boolean, default=False)
    recovery_rate = db.Column(db.DateTime,
                              default=datetime.datetime.now() +
                              datetime.timedelta(minutes=30))
    user_id = db.Column(db.String(),
                        db.ForeignKey('user.username'),
                        nullable=False)

    def __init__(self, hero_id, energy, recovery_rate, user_id):

        self.hero_id = hero_id
        self.energy = energy
        self.user_id = user_id
        self.recovery_rate = recovery_rate

    def save_to_db(self):

        db.session.add(self)
        db.session.commit()
        return self

    def delele_from_db(self):
        try:
            db.session.delete(self)
            db.session.commit()
            return self
        except:
            return None

    def update_db(self):
        try:
            db.session.commit()
            return True
        except:
            return False

    @classmethod
    def get_playerHero(self, username):
        try:
            player_hero = Player_Hero.query.filter_by(user_id=username)
            hero_list = []
            for hero in player_hero:
                hero_list.append(int(hero.hero_id))
            return hero_list
        except:
            return None

    @classmethod
    def get_active_playerHero(self, username):
        try:
            player_hero = Player_Hero.query.filter_by(user_id=username)
            hero_list = []
            for hero in player_hero:
                if hero.active:
                    hero_list.append(int(hero.hero_id))
            return hero_list
        except:
            return None

    def get_oneHero(username, hero_id):
        return Player_Hero.query.filter(
            Player_Hero.user_id == username,
            Player_Hero.hero_id == hero_id).first()

    @classmethod
    def get_exist_playerHero(self, username, hero_id):
        try:
            player_hero = self.get_oneHero(username, hero_id)
            return player_hero
        except:
            return None

    @classmethod
    def boost_energy(self, username, hero_id):
        try:
            player_hero = self.get_oneHero(username, hero_id)
            hero = Hero.get_hero_by_heroID(hero_id)
            player_hero.energy = hero.energy
            return player_hero
        except:
            return None

    @classmethod
    def start_game(self, username, hero1, hero2, hero3):
        player_hero = Player_Hero.query.filter_by(user_id=username)
        hero_list = []
        for hero in player_hero:
            if (hero.hero_id == hero1 or hero.hero_id == hero2
                    or hero.hero_id == hero3):
                if (hero.energy > 0):
                    hero.energy -= 1
                    hero_list.append(hero.hero_id)
                    hero.active = True
        if self.update_db(self):
            return hero_list
        return None

    #balad nistam khob :)
    def update_energy_by_username(self, username):

        player_hero = Player_Hero.query.filter_by(user_id=username).first()

        for hero in player_hero:
            if (datetime.datetime.now() > hero.recovery_rate()):
                hero.energy += 1
                hero.recovery_rate = datetime.datetime.now(
                ) + datetime.timedelta(minutes=30)

                db.session.commit()
Esempio n. 23
0
Object definition file for dashboard app
"""

from dashboard import db
import utils
from hashlib import md5
from sqlalchemy.orm import validates
from flask_login import UserMixin
import os
import logging

logger = logging.getLogger(__name__)

study_site_table = db.Table(
    'study_site', db.Column('study_id', db.Integer,
                            db.ForeignKey('studies.id')),
    db.Column('site_id', db.Integer, db.ForeignKey('sites.id')))

study_scantype_table = db.Table(
    'study_scantypes',
    db.Column('study_id', db.Integer, db.ForeignKey('studies.id')),
    db.Column('scantype_id', db.Integer, db.ForeignKey('scantypes.id')))

study_people_table = db.Table(
    'study_people',
    db.Column('study_id', db.Integer, db.ForeignKey('studies.id')),
    db.Column('person_id', db.Integer, db.ForeignKey('people.id')))
study_user_table = db.Table(
    'study_users',
    db.Column('study_id', db.Integer, db.ForeignKey('studies.id')),
    db.Column('user_id', db.Integer, db.ForeignKey('users.id')))
Esempio n. 24
0
class Scan(db.Model):
    __tablename__ = 'scans'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), index=True, unique=True)
    description = db.Column(db.String(128))
    session_id = db.Column(db.Integer,
                           db.ForeignKey('sessions.id'),
                           nullable=False)
    session = db.relationship('Session', back_populates='scans')
    scantype_id = db.Column(db.Integer,
                            db.ForeignKey('scantypes.id'),
                            nullable=False)
    scantype = db.relationship('ScanType', back_populates="scans")
    metricvalues = db.relationship('MetricValue', cascade="all, delete-orphan")
    bl_comment = db.Column(db.String(1024))
    series_number = db.Column(db.Integer, nullable=False)
    repeat_number = db.Column(db.Integer)
    analysis_comments = db.relationship('ScanComment')

    def __repr__(self):
        return ('<Scan {}>'.format(self.name))

    def is_blacklisted(self):
        if self.bl_comment:
            return True

    @property
    def comment_count(self):
        return len(self.analysis_comments)

    @validates('bl_comment')
    def validate_comment(self, key, comment):
        """
        check the comment isn't empty and that the blacklist.csv can be updated
        """
        assert comment, 'Comment not provided for scan:{}'.format(self.name)

        try:
            utils.update_blacklist('{}_{}'.format(self.name, self.description),
                                   comment,
                                   study_name=self.session.study.nickname)
        except:
            logger.error('Failed updating blacklist for scan:{}'.format(
                self.name))
            return False
        return comment

    def get_file_path(self):
        nii_path = utils.get_study_folder(study=self.session.study.nickname,
                                          folder_type='nii')
        file_name = '_'.join([self.name, self.description]) + '.nii.gz'
        path = os.path.join(nii_path, self.session.name, file_name)
        return (path)

    def get_hcp_path(self):
        """
        Returns the path to the scan hcp pipelines folder
        False if subject folder doesnt exists
        """
        hcp_path = utils.get_study_folder(study=self.session.study.nickname,
                                          folder_type='hcp')
        sub_path = os.path.join(hcp_path, 'qc_MNIfsaverage32k',
                                self.session.name)
        if not os.path.isdir(sub_path):
            return False

        return sub_path
Esempio n. 25
0
class Session(db.Model):
    __tablename__ = 'sessions'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(256))
    date = db.Column(db.DateTime)
    study_id = db.Column(db.Integer,
                         db.ForeignKey('studies.id'),
                         nullable=False)
    study = db.relationship('Study', back_populates='sessions')
    site_id = db.Column(db.Integer, db.ForeignKey('sites.id'), nullable=False)
    site = db.relationship('Site', back_populates='sessions')
    scans = db.relationship('Scan',
                            order_by="Scan.series_number",
                            cascade="all, delete-orphan")
    is_phantom = db.Column(db.Boolean)
    is_repeated = db.Column(db.Boolean)
    repeat_count = db.Column(db.Integer)
    last_repeat_qc_generated = db.Column(db.Integer, default=1)
    last_repeat_qcd = db.Column(db.Integer)
    cl_comment = db.Column(db.String(1024))
    gh_issue = db.Column(db.Integer)
    redcap_record = db.Column(db.Integer)  # ID of the record in redcap
    redcap_entry_date = db.Column(db.Date)  # date of record entry in redcap
    redcap_user = db.Column(
        db.Integer)  # ID of the user who filled in the redcap record
    redcap_comment = db.Column(db.String(1024))  # Redcap comment field
    redcap_url = db.Column(db.String(1024))  # URL for the redcap server
    redcap_projectid = db.Column(db.Integer)  # ID for redcap Project
    redcap_instrument = db.Column(db.String(1024))  # name of the redcap form
    incidental_findings = db.relationship('IncidentalFinding')

    def __repr__(self):
        return ('<Session {} from Study {} at Site {}>'.format(
            self.name, self.study.nickname, self.site.name))

    def is_qcd(self):
        """checks if session has (ever) been quality checked"""
        if self.cl_comment:
            return True

    def is_current_qcd(self):
        """
        checks if the most recent repeat of a session has been quality checked
        """
        if self.last_repeat_qcd == self.repeat_count:
            return True

    def get_qc_doc(self):
        """Return the absolute path to the session qc doc if it exists"""
        return (utils.get_qc_doc(str(self.name)))

    def flush_changes(self):
        """Flush changes to the object back to the database"""
        db.session.add(self)
        db.session.commit()

    def scan_count(self):
        return len(self.scans)

    @property
    def incidental_finding(self):
        return len(self.incidental_findings)

    @validates('cl_comment')
    def validate_comment(self, key, comment):
        """
        check the comment isn't empty and that the checklist.csv can be updated
        """
        assert comment
        assert utils.update_checklist(self.name,
                                      comment,
                                      study_name=self.study.nickname)
        self.last_repeat_qcd = self.repeat_count
        return comment