Code Duplication    Length = 21-23 lines in 2 locations

sacred/observers/sql.py 2 locations

@@ 20-42 (lines=23) @@
17
Base = declarative_base()
18
19
20
class Source(Base):
21
    __tablename__ = 'source'
22
23
    @classmethod
24
    def get_or_create(cls, filename, md5sum, session):
25
        instance = session.query(cls).filter_by(filename=filename,
26
                                                md5sum=md5sum).first()
27
        if instance:
28
            return instance
29
        md5sum_ = get_digest(filename)
30
        assert md5sum_ == md5sum, 'Weird: found md5 mismatch for {}: {} != {}'\
31
            .format(filename, md5sum, md5sum_)
32
        with open(filename, 'r') as f:
33
            return cls(filename=filename, md5sum=md5sum, content=f.read())
34
35
    source_id = sa.Column(sa.Integer, primary_key=True)
36
    filename = sa.Column(sa.String(256))
37
    md5sum = sa.Column(sa.String(32))
38
    content = sa.Column(sa.Text)
39
40
    def to_json(self):
41
        return {'filename': self.filename,
42
                'md5sum': self.md5sum}
43
44
45
class Dependency(Base):
@@ 85-105 (lines=21) @@
82
                'filename': self.filename}
83
84
85
class Resource(Base):
86
    __tablename__ = 'resource'
87
88
    @classmethod
89
    def get_or_create(cls, filename, session):
90
        md5sum = get_digest(filename)
91
        instance = session.query(cls).filter_by(filename=filename,
92
                                                md5sum=md5sum).first()
93
        if instance:
94
            return instance
95
        with open(filename, 'rb') as f:
96
            return cls(filename=filename, md5sum=md5sum, content=f.read())
97
98
    resource_id = sa.Column(sa.Integer, primary_key=True)
99
    filename = sa.Column(sa.String(256))
100
    md5sum = sa.Column(sa.String(32))
101
    content = sa.Column(sa.LargeBinary)
102
103
    def to_json(self):
104
        return {'filename': self.filename,
105
                'md5sum': self.md5sum}
106
107
108
class Host(Base):