aboutsummaryrefslogtreecommitdiff
path: root/license.py
diff options
context:
space:
mode:
Diffstat (limited to 'license.py')
-rw-r--r--license.py107
1 files changed, 0 insertions, 107 deletions
diff --git a/license.py b/license.py
deleted file mode 100644
index 7a66a3e..0000000
--- a/license.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-class License(object):
- def __init__(self, name):
- self.name = name
-
- def __iter__(self):
- yield self
-
- def flatten(self):
- yield self.name
-
- def __str__(self, depth=0):
- return self.name
-
- def __repr__(self):
- return '<%s %s>' % (self.__class__.__name__, self.name)
-
-class Licenses(object):
- def __init__(self, xs):
- self.xs = xs
-
- def __iter__(self):
- for x in self.xs:
- yield x
-
- def flatten(self):
- for x in self.xs:
- for y in x.flatten():
- yield y
-
- def __str__(self, depth=0):
- j = ' %s ' % (self._join,)
- ss = [x.__str__(depth=depth+1) for x in self.xs]
- s = j.join(ss)
-
- if depth > 0:
- s = '(%s)' % s
-
- return s
-
- def __repr__(self):
- return '<%s %r>' % (self.__class__.__name__, self.xs)
-
-class AllLicenses(Licenses):
- _join = 'and'
-
-class AnyLicense(Licenses):
- _join = 'or'
-
-def parse_licenses(s):
- """
- >>> ls = parse_licenses("X")
- >>> ls
- <License X>
- >>> print ls
- X
- >>> list(ls)
- [<License X>]
- >>> list(ls.flatten())
- ['X']
-
- >>> ls = parse_licenses("X or Y or Z")
- >>> ls
- <AnyLicense [<License X>, <License Y>, <License Z>]>
- >>> print ls
- X or Y or Z
- >>> list(ls)
- [<License X>, <License Y>, <License Z>]
- >>> list(ls.flatten())
- ['X', 'Y', 'Z']
-
- >>> ls = parse_licenses("X and Y and Z")
- >>> ls
- <AllLicenses [<License X>, <License Y>, <License Z>]>
- >>> print ls
- X and Y and Z
- >>> list(ls)
- [<License X>, <License Y>, <License Z>]
- >>> list(ls.flatten())
- ['X', 'Y', 'Z']
-
- >>> print parse_licenses("X or Y and Z")
- X or (Y and Z)
-
- >>> print parse_licenses("X and Y or Z")
- (X and Y) or Z
-
- >>> print parse_licenses("X, and Y or Z")
- X and (Y or Z)
-
- >>> print parse_licenses("X | Y")
- X or Y
- """
-
- splits = (
- (', and ', AllLicenses),
- (' or ', AnyLicense),
- (' | ', AnyLicense),
- (' and ', AllLicenses))
-
- for (split_str, cls) in splits:
- if split_str in s:
- return cls([parse_licenses(sub) for sub in s.split(split_str)])
-
- return License(s)