40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy import Column, Integer, String, ForeignKey
|
|
from sqlalchemy.orm import relationship, backref
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class Project(Base):
|
|
__tablename__ = 'project'
|
|
id = Column(Integer, primary_key=True)
|
|
name = Column(String, unique=True, nullable=False)
|
|
path = Column(String)
|
|
files = relationship('File',
|
|
backref='project',
|
|
cascade="all, delete, delete-orphan")
|
|
|
|
|
|
class File(Base):
|
|
__tablename__ = 'file'
|
|
id = Column(Integer, primary_key=True)
|
|
project_id = Column(Integer, ForeignKey('project.id'))
|
|
name = Column(String, nullable=False)
|
|
path = Column(String)
|
|
sha = Column(String)
|
|
lines = relationship('Line',
|
|
backref='file',
|
|
cascade="all, delete, delete-orphan")
|
|
|
|
@property
|
|
def project_path(self):
|
|
return '%s/%s' % (self.project.name, self.name)
|
|
|
|
|
|
class Line(Base):
|
|
__tablename__ = 'line'
|
|
id = Column(Integer, primary_key=True)
|
|
file_id = Column(Integer, ForeignKey('file.id'))
|
|
number = Column(Integer, nullable=False)
|
|
content = Column(String)
|