# -*- coding: utf-8 -*-
"""bootstrap_py.classifiers."""
import os
import re
import requests
from bootstrap_py import __file__
# See: https://urllib3.readthedocs.org/en/latest/security.html
requests.packages.urllib3.disable_warnings()
[docs]class Classifiers:
"""Classifiers."""
#: list_classifiers url
url = 'https://pypi.python.org/pypi?%3Aaction=list_classifiers'
#: prefix status
prefix_status = 'Development Status :: '
#: prefix licences
prefix_lic = 'License :: OSI Approved :: '
timeout = 5.000
def __init__(self):
"""Initialize."""
try:
self.resp_text = requests.get(self.url, timeout=self.timeout).text
except requests.exceptions.ConnectionError:
file_path = os.path.abspath(os.path.join(os.path.dirname(__file__),
'data/classifiers.txt'))
with open(file_path) as fobj:
self.resp_text = fobj.read()
[docs] def status(self):
"""Development status."""
return {self._acronym_status(l): l for l in self.resp_text.split('\n')
if l.startswith(self.prefix_status)}
@staticmethod
def _acronym_status(status_statement):
"""Convert development status acronym."""
return status_statement.split(' - ')[1]
[docs] def licenses(self):
"""OSI Approved license."""
return {self._acronym_lic(l): l for l in self.resp_text.split('\n')
if l.startswith(self.prefix_lic)}
[docs] def licenses_desc(self):
"""Remove prefix."""
return {self._acronym_lic(l): l.split(self.prefix_lic)[1]
for l in self.resp_text.split('\n')
if l.startswith(self.prefix_lic)}
def _acronym_lic(self, license_statement):
"""Convert license acronym."""
pat = re.compile(r'\(([\w+\W?\s?]+)\)')
if pat.search(license_statement):
lic = pat.search(license_statement).group(1)
if lic.startswith('CNRI'):
acronym_licence = lic[:4]
else:
acronym_licence = lic.replace(' ', '')
else:
acronym_licence = ''.join(
[w[0]
for w in license_statement.split(self.prefix_lic)[1].split()])
return acronym_licence