| 172 | return args |
| 173 | |
| 174 | class Range: |
| 175 | def __init__(self, ranges, defaultStep='+1'): |
| 176 | # we might be passed in a single value or a list of strings |
| 177 | # if we receive a single value, we want to feed it right back |
| 178 | if type(ranges) != list: |
| 179 | self.expanded = ranges |
| 180 | elif ranges[0] == None: |
| 181 | self.expanded = [None] |
| 182 | else: |
| 183 | self.expanded = [] |
| 184 | for thisRange in ranges: |
| 185 | thisRange = str(thisRange) |
| 186 | if re.search('^\+\d+$', thisRange): |
| 187 | self.expanded = self.expanded + [thisRange] |
| 188 | elif thisRange == 'max': |
| 189 | self.expanded = self.expanded + ['max'] |
| 190 | else: |
| 191 | #elif thisRange != 'max': |
| 192 | if thisRange.count(':'): |
| 193 | self._stepAmount = thisRange.split(':')[1] |
| 194 | else: |
| 195 | self._stepAmount = defaultStep |
| 196 | thisRange = thisRange.split(':')[0] |
| 197 | |
| 198 | if self._stepAmount.count('x'): |
| 199 | self._stepper = '_mult' |
| 200 | else: |
| 201 | self._stepper = '_add' |
| 202 | self._stepAmount = self._stepAmount.lstrip('+x') |
| 203 | self._stepAmount = int(self._stepAmount) |
| 204 | |
| 205 | if thisRange.count('-'): |
| 206 | self.begin = int(thisRange.split('-')[0]) |
| 207 | self.end = int(thisRange.split('-')[1]) |
| 208 | else: |
| 209 | self.begin = int(thisRange.split('-')[0]) |
| 210 | self.end = int(thisRange.split('-')[0]) |
| 211 | self.current = self.begin |
| 212 | |
| 213 | if self.begin == 0 and self._stepper == '_mult': |
| 214 | self.expanded = self.expanded + [0] |
| 215 | else: |
| 216 | while self.current <= self.end: |
| 217 | self.expanded = self.expanded + [self.current] |
| 218 | self._step() |
| 219 | |
| 220 | # now we want to uniquify and sort the expanded range |
| 221 | self.expanded = list(set(self.expanded)) |
| 222 | self.expanded.sort() |
| 223 | |
| 224 | # advance current value to next |
| 225 | def _step(self): |
| 226 | getattr(self, self._stepper)() |
| 227 | |
| 228 | def _mult(self): |
| 229 | self.current = self.current * self._stepAmount |
| 230 | |
| 231 | def _add(self): |