Coverage for portality/datasets.py: 71%

72 statements  

« prev     ^ index     » next       coverage.py v6.4.2, created at 2022-07-20 16:12 +0100

1""" 

2~~DataSets:Data~~ 

3""" 

4 

5import pycountry 

6from collections import OrderedDict 

7 

8 

9def _generate_country_options(): 

10 """ 

11 ~~->Countries:Data~~ 

12 ~~!Countries:Data->PyCountry:Technology~~ 

13 Gather the countries with 2-character codes 

14 """ 

15 country_options_ = [('', '')] 

16 

17 for co in sorted(pycountry.countries, key=lambda x: x.name): 

18 try: 

19 country_options_.append((co.alpha_2.upper(), co.name)) 

20 except AttributeError: 

21 continue 

22 return country_options_ 

23 

24 

25def _generate_currency_options(): 

26 """ 

27 ~~->Currencies:Data~~ 

28 ~~!Currencies:Data->PyCountry:Technology~~ 

29 :return: 

30 """ 

31 currency_options_ = [(CURRENCY_DEFAULT, CURRENCY_DEFAULT)] 

32 

33 for cu in sorted(pycountry.currencies, key=lambda x: x.name): 

34 try: 

35 currency_options_.append((cu.alpha_3, '{name} ({code})'.format(code=cu.alpha_3, name=cu.name))) 

36 except AttributeError: 

37 continue 

38 

39 return currency_options_ 

40 

41 

42def _generate_language_options(): 

43 """ 

44 ~~->Languages:Data~~ 

45 ~~!Languages:Data->PyCountry:Technology~~ 

46 Gather the languages with 2-character codes (ISO 639-2b) 

47 """ 

48 language_options_ = [('', '')] 

49 for l in sorted(pycountry.languages, key=lambda x: x.name): 

50 try: 

51 language_options_.append((l.alpha_2.upper(), l.name)) 

52 except AttributeError: 

53 continue 

54 

55 return language_options_ 

56 

57 

58def _generate_license_options(): 

59 """ 

60 ~~->Licences:Data~~ 

61 Licenses and their rights 

62 """ 

63 licenses_ = { 

64 # The titles and types are made to match the current values of journals in the DOAJ. 

65 # DOAJ currently assumes type and title are the same. 

66 "CC BY": {'BY': True, 'NC': False, 'ND': False, 'SA': False, 'form_label': 'CC BY', "url" : "https://creativecommons.org/licenses/by/4.0/"}, 

67 "CC BY-SA": {'BY': True, 'NC': False, 'ND': False, 'SA': True, 'form_label': 'CC BY-SA', "url" : "https://creativecommons.org/licenses/by-sa/4.0/"}, 

68 "CC BY-ND": {'BY': True, 'NC': False, 'ND': True, 'SA': False, 'form_label': 'CC BY-ND', "url" : "https://creativecommons.org/licenses/by-nd/4.0/"}, 

69 "CC BY-NC": {'BY': True, 'NC': True, 'ND': False, 'SA': False, 'form_label': 'CC BY-NC', "url" : "https://creativecommons.org/licenses/by-nc/4.0/"}, 

70 "CC BY-NC-SA": {'BY': True, 'NC': True, 'ND': False, 'SA': True, 'form_label': 'CC BY-NC-SA', "url" : "https://creativecommons.org/licenses/by-nc-sa/4.0/"}, 

71 "CC BY-NC-ND": {'BY': True, 'NC': True, 'ND': True, 'SA': False, 'form_label': 'CC BY-NC-ND', "url" : "https://creativecommons.org/licenses/by-nc-nd/4.0/"}, 

72 "CC0" : {'BY': False, 'NC': False, 'ND': False, 'SA': False, 'form_label': 'CC0', "url" : "https://creativecommons.org/publicdomain/zero/1.0/"}, 

73 "Public domain" : {'BY': False, 'NC': False, 'ND': False, 'SA': False, 'form_label': 'CC BY', "url" : "https://creativecommons.org/publicdomain/mark/1.0/"}, 

74 } 

75 

76 # The top-level keys in the licenses dict should always be == to the "type" of each license object 

77 for lic_type, lic_info in licenses_.items(): 

78 lic_info['type'] = lic_type 

79 lic_info['title'] = lic_type 

80 

81 license_dict_ = OrderedDict(sorted(list(licenses_.items()), key=lambda x: x[1]['type'])) 

82 

83 main_license_options_ = [] 

84 for lic_type, lic_info in license_dict_.items(): 

85 main_license_options_.append((lic_type, lic_info['form_label'])) 

86 

87 return licenses_, license_dict_, main_license_options_ 

88 

89 

90#################################################### 

91# Datasets for export 

92#################################################### 

93 

94# COUNTRIES 

95# country_options is a list of tuples, [(2-char_code, name)] for 2-char codes (ISO 3166). 

96country_options = _generate_country_options() 

97 

98# CURRENCIES 

99CURRENCY_DEFAULT = '' 

100# currency_options is a list of tuples, [(3-char_code, '3-char_code - name')] for all currencies. 

101currency_options = _generate_currency_options() 

102 

103# LANGUAGES 

104language_options = _generate_language_options() 

105 

106# LICENSES 

107# licenses contains a dict with each license's permissions. license_dict is ordered by the name of the licenses. 

108# main_license_options is a list of tuples [(license_type, label)] for use in dropdown menus. 

109licenses, license_dict, main_license_options = _generate_license_options() 

110 

111 

112def language_for(rep): 

113 """ Get the entire language entry for a given representation """ 

114 try: 

115 return pycountry.languages.lookup(rep) 

116 except LookupError: 

117 return None 

118 

119 

120def name_for_lang(rep): 

121 """ Get the language name from a representation of the language""" 

122 try: 

123 return pycountry.languages.lookup(rep).name 

124 except LookupError: 

125 return rep 

126 

127 

128def get_country_code(current_country, fail_if_not_found=False): 

129 """ Get the two-character country code for a given country name """ 

130 try: 

131 return pycountry.countries.lookup(current_country).alpha_2 

132 except LookupError: 

133 return None if fail_if_not_found else current_country 

134 

135 

136def get_country_name(code): 

137 """ Get the name of a country from its two-character code """ 

138 try: 

139 return pycountry.countries.lookup(code).name 

140 except LookupError: 

141 return code # return what was passed in if not found 

142 

143 

144def get_currency_name(code): 

145 """ get the name of a currency from its code """ 

146 try: 

147 cur = pycountry.currencies.lookup(code) 

148 return '{code} - {name}'.format(code=cur.alpha_3, name=cur.name) 

149 except LookupError: 

150 return code # return what was passed in if not found 

151 

152 

153def get_currency_code(name): 

154 """ Retrieve a currency code by the currency name """ 

155 try: 

156 return pycountry.currencies.lookup(name).alpha_3 

157 except LookupError: 

158 return None