Source code for changes.models.filecoverage

from __future__ import absolute_import, division

import uuid

from datetime import datetime
from sqlalchemy import Column, DateTime, ForeignKey, String, Text, Integer
from sqlalchemy.orm import relationship
from sqlalchemy.schema import Index, UniqueConstraint

from changes.config import db
from changes.db.types.guid import GUID


[docs]class FileCoverage(db.Model): """ Unique to file/job/project. Contains a data-blob-string, where each character is either - U Unconvered - C Covered - N No Info filled in when file coverage artifacts are collected (updated with additional lines for each new artifact in a job) """ __tablename__ = 'filecoverage' __table_args__ = ( Index('idx_filecoverage_job_id', 'job_id'), Index('idx_filecoverage_project_id', 'project_id'), Index('idx_filecoverage_step_id', 'step_id'), UniqueConstraint('job_id', 'filename', name='unq_job_filname'), ) id = Column(GUID, nullable=False, primary_key=True, default=uuid.uuid4) step_id = Column(GUID, ForeignKey('jobstep.id', ondelete="CASCADE")) job_id = Column(GUID, ForeignKey('job.id', ondelete="CASCADE"), nullable=False) project_id = Column(GUID, ForeignKey('project.id', ondelete="CASCADE"), nullable=False) filename = Column(String(256), nullable=False, primary_key=True) data = Column(Text) date_created = Column(DateTime, default=datetime.utcnow) lines_covered = Column(Integer) lines_uncovered = Column(Integer) diff_lines_covered = Column(Integer) diff_lines_uncovered = Column(Integer) step = relationship('JobStep') job = relationship('Job') project = relationship('Project') def __init__(self, **kwargs): super(FileCoverage, self).__init__(**kwargs) if not self.id: self.id = uuid.uuid4()