The RPM Epoch, Version, Release tuple.
| 92 | |
| 93 | |
| 94 | class EVR(namedtuple('EVR', 'epoch version release')): |
| 95 | """ |
| 96 | The RPM Epoch, Version, Release tuple. |
| 97 | """ |
| 98 | |
| 99 | def __new__(self, version, release=None, epoch=None): |
| 100 | """ |
| 101 | note: the sort order of the named tuple is the sort order. |
| 102 | But for creation we put the rarely used epoch last with a default to None. |
| 103 | """ |
| 104 | |
| 105 | epoch = str(epoch) if epoch else "" |
| 106 | |
| 107 | if epoch and epoch.strip() and not epoch.isdigit(): |
| 108 | raise ValueError('Invalid epoch: must be a number or empty.') |
| 109 | if not version: |
| 110 | raise ValueError('Version is required: {}'.format(repr(version))) |
| 111 | |
| 112 | return super().__new__(EVR, epoch, version, release) |
| 113 | |
| 114 | def __str__(self, *args, **kwargs): |
| 115 | return self.to_string() |
| 116 | |
| 117 | def to_string(self): |
| 118 | if self.release: |
| 119 | vr = f'{self.version}-{self.release}' |
| 120 | else: |
| 121 | vr = self.version |
| 122 | |
| 123 | if self.epoch: |
| 124 | vr = ':'.join([self.epoch, vr]) |
| 125 | return vr |
| 126 | |
| 127 | |
| 128 | # TODO: add dependencies!!! |