diff options
-rw-r--r-- | gemato/manifest.py | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/gemato/manifest.py b/gemato/manifest.py index aeb800a..b01e5d4 100644 --- a/gemato/manifest.py +++ b/gemato/manifest.py @@ -17,12 +17,15 @@ class ManifestEntryTIMESTAMP(object): ISO-8601 timestamp. """ + tag = 'TIMESTAMP' + def __init__(self, ts): assert isinstance(ts, datetime.datetime) self.ts = ts @classmethod def from_list(cls, l): + assert l[0] == cls.tag if len(l) != 2: raise ManifestSyntaxError( '{} line: expects 1 value, got: {}'.format(l[0], l[1:])) @@ -34,7 +37,7 @@ class ManifestEntryTIMESTAMP(object): return cls(ts) def to_list(self): - return ('TIMESTAMP', self.ts.strftime('%Y-%m-%dT%H:%M:%SZ')) + return (self.tag, self.ts.strftime('%Y-%m-%dT%H:%M:%SZ')) class ManifestPathEntry(object): @@ -62,12 +65,15 @@ class ManifestEntryIGNORE(ManifestPathEntry): Ignored path. """ + tag = 'IGNORE' + @classmethod def from_list(cls, l): + assert l[0] == cls.tag return cls(cls.process_path(l)) def to_list(self): - return ('IGNORE', self.path) + return (self.tag, self.path) class ManifestEntryOPTIONAL(ManifestPathEntry): @@ -75,6 +81,8 @@ class ManifestEntryOPTIONAL(ManifestPathEntry): Optional path. """ + tag = 'OPTIONAL' + def __init__(self, path): super(ManifestEntryOPTIONAL, self).__init__(path) self.size = None @@ -82,10 +90,11 @@ class ManifestEntryOPTIONAL(ManifestPathEntry): @classmethod def from_list(cls, l): + assert l[0] == cls.tag return cls(cls.process_path(l)) def to_list(self): - return ('OPTIONAL', self.path) + return (self.tag, self.path) class ManifestFileEntry(ManifestPathEntry): @@ -140,14 +149,17 @@ class ManifestEntryMANIFEST(ManifestFileEntry): Sub-Manifest file reference. """ + tag = 'MANIFEST' + @classmethod def from_list(cls, l): + assert l[0] == cls.tag path = cls.process_path(l[:2]) size, checksums = cls.process_checksums(l) return cls(path, size, checksums) def to_list(self): - return super(ManifestEntryMANIFEST, self).to_list('MANIFEST') + return super(ManifestEntryMANIFEST, self).to_list(self.tag) class ManifestEntryDATA(ManifestFileEntry): @@ -155,14 +167,17 @@ class ManifestEntryDATA(ManifestFileEntry): Regular file reference. """ + tag = 'DATA' + @classmethod def from_list(cls, l): + assert l[0] == cls.tag path = cls.process_path(l[:2]) size, checksums = cls.process_checksums(l) return cls(path, size, checksums) def to_list(self): - return super(ManifestEntryDATA, self).to_list('DATA') + return super(ManifestEntryDATA, self).to_list(self.tag) class ManifestEntryMISC(ManifestFileEntry): @@ -170,14 +185,17 @@ class ManifestEntryMISC(ManifestFileEntry): Non-obligatory file reference. """ + tag = 'MISC' + @classmethod def from_list(cls, l): + assert l[0] == cls.tag path = cls.process_path(l[:2]) size, checksums = cls.process_checksums(l) return cls(path, size, checksums) def to_list(self): - return super(ManifestEntryMISC, self).to_list('MISC') + return super(ManifestEntryMISC, self).to_list(self.tag) class ManifestEntryDIST(ManifestFileEntry): @@ -185,6 +203,8 @@ class ManifestEntryDIST(ManifestFileEntry): Distfile reference. """ + tag = 'DIST' + @classmethod def from_list(cls, l): path = cls.process_path(l[:2]) @@ -195,7 +215,7 @@ class ManifestEntryDIST(ManifestFileEntry): return cls(path, size, checksums) def to_list(self): - return super(ManifestEntryDIST, self).to_list('DIST') + return super(ManifestEntryDIST, self).to_list(self.tag) class ManifestEntryEBUILD(ManifestFileEntry): @@ -203,14 +223,17 @@ class ManifestEntryEBUILD(ManifestFileEntry): Deprecated ebuild file reference (equivalent to DATA). """ + tag = 'EBUILD' + @classmethod def from_list(cls, l): + assert l[0] == cls.tag path = cls.process_path(l[:2]) size, checksums = cls.process_checksums(l) return cls(path, size, checksums) def to_list(self): - return super(ManifestEntryEBUILD, self).to_list('EBUILD') + return super(ManifestEntryEBUILD, self).to_list(self.tag) class ManifestEntryAUX(ManifestFileEntry): @@ -218,6 +241,8 @@ class ManifestEntryAUX(ManifestFileEntry): Deprecated AUX file reference (DATA with 'files/' prepended). """ + tag = 'AUX' + def __init__(self, aux_path, size, checksums): self.aux_path = aux_path super(ManifestEntryAUX, self).__init__( @@ -225,12 +250,13 @@ class ManifestEntryAUX(ManifestFileEntry): @classmethod def from_list(cls, l): + assert l[0] == cls.tag path = cls.process_path(l[:2]) size, checksums = cls.process_checksums(l) return cls(path, size, checksums) def to_list(self): - ret = super(ManifestEntryAUX, self).to_list('AUX') + ret = super(ManifestEntryAUX, self).to_list(self.tag) assert ret[1].startswith('files/') ret[1] = ret[1][6:] return ret |