cleanup
[mediagoblin.git] / mediagoblin / tools / licenses.py
index 48cb442bb6d421f737f7829cb11985e6c8ade841..a964980e8928946313265086b3612977abfb636e 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-SORTED_SUPPORTED_LICENSES = [
-    ("",
-     {"name": "No license specified",
-      "abbreviation": "All rights reserved"}),
-    ("http://creativecommons.org/licenses/by/3.0/",
-     {"name": "Creative Commons Attribution Unported 3.0",
-      "abbreviation": "CC BY 3.0"}),
-    ("http://creativecommons.org/licenses/by-sa/3.0/",
-     {"name": "Creative Commons Attribution-ShareAlike Unported 3.0",
-      "abbreviation": "CC BY-SA 3.0"}),
-    ("http://creativecommons.org/licenses/by-nd/3.0/",
-     {"name": "Creative Commons Attribution-NoDerivs 3.0 Unported",
-      "abbreviation": "CC BY-ND 3.0"}),
-    ("http://creativecommons.org/licenses/by-nc/3.0/",
-     {"name": "Creative Commons Attribution-NonCommercial Unported 3.0",
-      "abbreviation": "CC BY-NC 3.0"}),
-    ("http://creativecommons.org/licenses/by-nc-sa/3.0/",
-     {"name": "Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported",
-      "abbreviation": "CC BY-NC-SA 3.0"}),
-    ("http://creativecommons.org/licenses/by-nc-nd/3.0/",
-     {"name": "Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported",
-      "abbreviation": "CC BY-NC-ND 3.0"}),
-    ("http://creativecommons.org/publicdomain/zero/1.0/",
-     {"name": "Creative Commons CC0 1.0 Universal",
-      "abbreviation": "CC0 1.0"}),
-    ("http://creativecommons.org/publicdomain/mark/1.0/",
-     {"name": "Public Domain",
-      "abbreviation": "Public Domain"})]
-
-SUPPORTED_LICENSES = dict(SORTED_SUPPORTED_LICENSES)
+from collections import namedtuple
+# Give a License attribute names: uri, name, abbreviation
+License = namedtuple("License", ["abbreviation", "name", "uri"])
 
+SORTED_LICENSES = [
+    License("All rights reserved", "No license specified", ""),
+    License("CC BY 3.0", "Creative Commons Attribution Unported 3.0",
+           "http://creativecommons.org/licenses/by/3.0/"),
+    License("CC BY-SA 3.0",
+           "Creative Commons Attribution-ShareAlike Unported 3.0",
+           "http://creativecommons.org/licenses/by-sa/3.0/"),
+    License("CC BY-ND 3.0",
+           "Creative Commons Attribution-NoDerivs 3.0 Unported",
+           "http://creativecommons.org/licenses/by-nd/3.0/"),
+    License("CC BY-NC 3.0",
+          "Creative Commons Attribution-NonCommercial Unported 3.0",
+          "http://creativecommons.org/licenses/by-nc/3.0/"),
+    License("CC BY-NC-SA 3.0",
+           "Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported",
+           "http://creativecommons.org/licenses/by-nc-sa/3.0/"),
+    License("CC BY-NC-ND 3.0",
+           "Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported",
+           "http://creativecommons.org/licenses/by-nc-nd/3.0/"),
+    License("CC0 1.0",
+           "Creative Commons CC0 1.0 Universal",
+           "http://creativecommons.org/publicdomain/zero/1.0/"),
+    License("Public Domain","Public Domain",
+           "http://creativecommons.org/publicdomain/mark/1.0/"),
+    ]
 
-def licenses_as_choices():
-    license_list = []
+# dict {uri: License,...} to enable fast license lookup by uri. Ideally,
+# we'd want to use an OrderedDict (python 2.7+) here to avoid having the
+# same data in two structures
+SUPPORTED_LICENSES = dict(((l.uri, l) for l in SORTED_LICENSES))
+
+
+def get_license_by_url(url):
+    """Look up a license by its url and return the License object"""
+    try:
+        return SUPPORTED_LICENSES[url]
+    except KeyError:
+        # in case of an unknown License, just display the url given
+        # rather than exploding in the user's face.
+        return License(url, url, url)
 
-    for uri, data in SORTED_SUPPORTED_LICENSES:
-        license_list.append((uri, data["abbreviation"]))
 
-    return license_list
+def licenses_as_choices():
+    """List of (uri, abbreviation) tuples for HTML choice field population
+
+    The data seems to be consumed/deleted during usage, so hand over a
+    throwaway list, rather than just a generator.
+    """
+    return [(lic.uri, lic.abbreviation) for lic in SORTED_LICENSES]