diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-music-metadata-territories.spec | 690 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 692 insertions, 0 deletions
@@ -0,0 +1 @@ +/music_metadata_territories-22.6.tar.gz diff --git a/python-music-metadata-territories.spec b/python-music-metadata-territories.spec new file mode 100644 index 0000000..8901995 --- /dev/null +++ b/python-music-metadata-territories.spec @@ -0,0 +1,690 @@ +%global _empty_manifest_terminate_build 0 +Name: python-music-metadata-territories +Version: 22.6 +Release: 1 +Summary: Music Metedata - Territory-related tools +License: MIT License +URL: https://matijakolaric.com/development/musicmetadata/ +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/12/a5/79d12de545fea0477fc27db0079ff7e23d93af8887eae6ed88f08b77d9ef/music_metadata_territories-22.6.tar.gz +BuildArch: noarch + + +%description +# Music Metadata - Territories + +[](https://travis-ci.com/musicmetadata/territories) +[](https://coveralls.io/github/musicmetadata/territories?branch=master) + + + +A simple library for dealing with territory hierarchies used in music +metadata, currently primarily focused on CISAC TIS. + +Conversion between TIS and ISO (DDEX!) territories will follow in the next release. + +## Classes + +It has only two classes: + +* `Territory` - the territory, e.g. World, Europe, Croatia +* `TerritoryList` - this class makes including and excluding territories +simpler, it also splits territories down when needed + +### Territory manipulation + +World excluding USA results in a minimal list of included territories: + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') + +l = TerritoryList() +l.include(world) +l.exclude(usa) + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +Result: + +``` +2100 AFRICA +2106 ASIA +0124 CANADA +2113 CENTRAL AMERICA +2120 EUROPE +0484 MEXICO +2130 OCEANIA +2132 SOUTH AMERICA +2134 WEST INDIES +``` + +It is simple to list all the countries as well: + +```python +for t in sorted(l.countries, key=lambda x: x.name): + print(f'{t.tis_a:0>4}', t.name) +``` + +Result: + +``` +AF AFGHANISTAN +AL ALBANIA +DZ ALGERIA +AD ANDORRA +AO ANGOLA +AG ANTIGUA AND BARBUDA +AR ARGENTINA +AM ARMENIA +AU AUSTRALIA +AT AUSTRIA +... + +``` +The shorter version also works, yielding same results: +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136') # WORLD +l.exclude('US') # USA + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +One can check if a country is finally included in the list: + +```python +usa in l +``` + +```Result: +False +``` + +Works also with territories deeper in the structure, also with codes: + +```python +'hr' in l +``` + +```Result: +True +``` + +### Share manipulation + +Share calculations are also possible, by using a second argument to +``TerritoryList.include`` and ``TerritoryList.add``. This second argument can +be any objects that allows adding. + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') +canada = Territory.get('CA') + +l = TerritoryList() +l.include(world, 25) +l.add(usa, 25) +``` + +So, we there is 25 for the whole world and additional 25 for the US. +If we ask for values for the US and Canada: + +```python +l[usa], l[canada] +``` + +We get 50 for the US and 25 for Canada. + +```Result: +(50, 25) +``` + +Any numeric type will work out of the box, +custom ``__add__`` method might be required for complex objects. Here is +an example for a list of numeric fields: + +```python +class Shares(list): + def __add__(self, other): + return Shares([self[i] + other[i] for i in range(len(self))]) +``` + +## Compressing output + +Long lists can be trimmed, both if they have values and if they do not. +Only territories with the same object will be compressed. Consider this: + +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136', 25) +l.exclude('HR') +l.add('US', 25) # US is now at 50 +l.include('HR', 25) # same as it used to be + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +ASIA: 25 +OCEANIA: 25 +AFRICA: 25 +MALTA: 25 +ICELAND: 25 +... 30 territories cut out ... +MEXICO: 25 +UNITED STATES: 50 +CROATIA: 25 +``` + +But, if we compress: + +```python +l.compress() + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +CANADA: 25 +MEXICO: 25 +UNITED STATES: 50 +AFRICA: 25 +ASIA: 25 +EUROPE: 25 +OCEANIA: 25 +WEST INDIES: 25 +SOUTH AMERICA: 25 +CENTRAL AMERICA: 25 +``` +## Testing and demo wrapper + +You may test it online, no coding skills required: https://music-metadata.herokuapp.com/territories/ + +The code for the demo is here: https://github.com/musicmetadata/web-wrapper + + +%package -n python3-music-metadata-territories +Summary: Music Metedata - Territory-related tools +Provides: python-music-metadata-territories +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-music-metadata-territories +# Music Metadata - Territories + +[](https://travis-ci.com/musicmetadata/territories) +[](https://coveralls.io/github/musicmetadata/territories?branch=master) + + + +A simple library for dealing with territory hierarchies used in music +metadata, currently primarily focused on CISAC TIS. + +Conversion between TIS and ISO (DDEX!) territories will follow in the next release. + +## Classes + +It has only two classes: + +* `Territory` - the territory, e.g. World, Europe, Croatia +* `TerritoryList` - this class makes including and excluding territories +simpler, it also splits territories down when needed + +### Territory manipulation + +World excluding USA results in a minimal list of included territories: + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') + +l = TerritoryList() +l.include(world) +l.exclude(usa) + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +Result: + +``` +2100 AFRICA +2106 ASIA +0124 CANADA +2113 CENTRAL AMERICA +2120 EUROPE +0484 MEXICO +2130 OCEANIA +2132 SOUTH AMERICA +2134 WEST INDIES +``` + +It is simple to list all the countries as well: + +```python +for t in sorted(l.countries, key=lambda x: x.name): + print(f'{t.tis_a:0>4}', t.name) +``` + +Result: + +``` +AF AFGHANISTAN +AL ALBANIA +DZ ALGERIA +AD ANDORRA +AO ANGOLA +AG ANTIGUA AND BARBUDA +AR ARGENTINA +AM ARMENIA +AU AUSTRALIA +AT AUSTRIA +... + +``` +The shorter version also works, yielding same results: +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136') # WORLD +l.exclude('US') # USA + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +One can check if a country is finally included in the list: + +```python +usa in l +``` + +```Result: +False +``` + +Works also with territories deeper in the structure, also with codes: + +```python +'hr' in l +``` + +```Result: +True +``` + +### Share manipulation + +Share calculations are also possible, by using a second argument to +``TerritoryList.include`` and ``TerritoryList.add``. This second argument can +be any objects that allows adding. + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') +canada = Territory.get('CA') + +l = TerritoryList() +l.include(world, 25) +l.add(usa, 25) +``` + +So, we there is 25 for the whole world and additional 25 for the US. +If we ask for values for the US and Canada: + +```python +l[usa], l[canada] +``` + +We get 50 for the US and 25 for Canada. + +```Result: +(50, 25) +``` + +Any numeric type will work out of the box, +custom ``__add__`` method might be required for complex objects. Here is +an example for a list of numeric fields: + +```python +class Shares(list): + def __add__(self, other): + return Shares([self[i] + other[i] for i in range(len(self))]) +``` + +## Compressing output + +Long lists can be trimmed, both if they have values and if they do not. +Only territories with the same object will be compressed. Consider this: + +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136', 25) +l.exclude('HR') +l.add('US', 25) # US is now at 50 +l.include('HR', 25) # same as it used to be + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +ASIA: 25 +OCEANIA: 25 +AFRICA: 25 +MALTA: 25 +ICELAND: 25 +... 30 territories cut out ... +MEXICO: 25 +UNITED STATES: 50 +CROATIA: 25 +``` + +But, if we compress: + +```python +l.compress() + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +CANADA: 25 +MEXICO: 25 +UNITED STATES: 50 +AFRICA: 25 +ASIA: 25 +EUROPE: 25 +OCEANIA: 25 +WEST INDIES: 25 +SOUTH AMERICA: 25 +CENTRAL AMERICA: 25 +``` +## Testing and demo wrapper + +You may test it online, no coding skills required: https://music-metadata.herokuapp.com/territories/ + +The code for the demo is here: https://github.com/musicmetadata/web-wrapper + + +%package help +Summary: Development documents and examples for music-metadata-territories +Provides: python3-music-metadata-territories-doc +%description help +# Music Metadata - Territories + +[](https://travis-ci.com/musicmetadata/territories) +[](https://coveralls.io/github/musicmetadata/territories?branch=master) + + + +A simple library for dealing with territory hierarchies used in music +metadata, currently primarily focused on CISAC TIS. + +Conversion between TIS and ISO (DDEX!) territories will follow in the next release. + +## Classes + +It has only two classes: + +* `Territory` - the territory, e.g. World, Europe, Croatia +* `TerritoryList` - this class makes including and excluding territories +simpler, it also splits territories down when needed + +### Territory manipulation + +World excluding USA results in a minimal list of included territories: + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') + +l = TerritoryList() +l.include(world) +l.exclude(usa) + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +Result: + +``` +2100 AFRICA +2106 ASIA +0124 CANADA +2113 CENTRAL AMERICA +2120 EUROPE +0484 MEXICO +2130 OCEANIA +2132 SOUTH AMERICA +2134 WEST INDIES +``` + +It is simple to list all the countries as well: + +```python +for t in sorted(l.countries, key=lambda x: x.name): + print(f'{t.tis_a:0>4}', t.name) +``` + +Result: + +``` +AF AFGHANISTAN +AL ALBANIA +DZ ALGERIA +AD ANDORRA +AO ANGOLA +AG ANTIGUA AND BARBUDA +AR ARGENTINA +AM ARMENIA +AU AUSTRALIA +AT AUSTRIA +... + +``` +The shorter version also works, yielding same results: +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136') # WORLD +l.exclude('US') # USA + +for t in sorted(l, key=lambda x: x.name): + print(f'{t.tis_n:0>4}', t.name) +``` + +One can check if a country is finally included in the list: + +```python +usa in l +``` + +```Result: +False +``` + +Works also with territories deeper in the structure, also with codes: + +```python +'hr' in l +``` + +```Result: +True +``` + +### Share manipulation + +Share calculations are also possible, by using a second argument to +``TerritoryList.include`` and ``TerritoryList.add``. This second argument can +be any objects that allows adding. + +```python +from music_metadata.territories.territory import Territory +from music_metadata.territories.territory_list import TerritoryList + +world = Territory.get('2136') +usa = Territory.get('US') +canada = Territory.get('CA') + +l = TerritoryList() +l.include(world, 25) +l.add(usa, 25) +``` + +So, we there is 25 for the whole world and additional 25 for the US. +If we ask for values for the US and Canada: + +```python +l[usa], l[canada] +``` + +We get 50 for the US and 25 for Canada. + +```Result: +(50, 25) +``` + +Any numeric type will work out of the box, +custom ``__add__`` method might be required for complex objects. Here is +an example for a list of numeric fields: + +```python +class Shares(list): + def __add__(self, other): + return Shares([self[i] + other[i] for i in range(len(self))]) +``` + +## Compressing output + +Long lists can be trimmed, both if they have values and if they do not. +Only territories with the same object will be compressed. Consider this: + +```python +from music_metadata.territories.territory_list import TerritoryList + +l = TerritoryList() +l.include('2136', 25) +l.exclude('HR') +l.add('US', 25) # US is now at 50 +l.include('HR', 25) # same as it used to be + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +ASIA: 25 +OCEANIA: 25 +AFRICA: 25 +MALTA: 25 +ICELAND: 25 +... 30 territories cut out ... +MEXICO: 25 +UNITED STATES: 50 +CROATIA: 25 +``` + +But, if we compress: + +```python +l.compress() + +for t, v in l.items(): + print(f'{t.name}: {v}') +``` + +```Result: +CANADA: 25 +MEXICO: 25 +UNITED STATES: 50 +AFRICA: 25 +ASIA: 25 +EUROPE: 25 +OCEANIA: 25 +WEST INDIES: 25 +SOUTH AMERICA: 25 +CENTRAL AMERICA: 25 +``` +## Testing and demo wrapper + +You may test it online, no coding skills required: https://music-metadata.herokuapp.com/territories/ + +The code for the demo is here: https://github.com/musicmetadata/web-wrapper + + +%prep +%autosetup -n music-metadata-territories-22.6 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-music-metadata-territories -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 22.6-1 +- Package Spec generated @@ -0,0 +1 @@ +ba7695bfc986fe915bcc8487895a897a music_metadata_territories-22.6.tar.gz |