Fri, 02 Aug 2024 18:02:56 +0200
Third Party Packages
- Upgraded `pip-licenses` to version 5.0.0.
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | #!/usr/bin/env python |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | # -*- coding: utf-8 -*- |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
3 | # vim:fenc=utf-8 ff=unix ft=python ts=4 sw=4 sts=4 si et |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | """ |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | pip-licenses |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | MIT License |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | Copyright (c) 2018 raimon |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | Permission is hereby granted, free of charge, to any person obtaining a copy |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | of this software and associated documentation files (the "Software"), to deal |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | in the Software without restriction, including without limitation the rights |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | copies of the Software, and to permit persons to whom the Software is |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | furnished to do so, subject to the following conditions: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | The above copyright notice and this permission notice shall be included in all |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | copies or substantial portions of the Software. |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
25 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | SOFTWARE. |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | """ |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
29 | |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
30 | # |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
31 | # Modified to be used within the eric-ide project. |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
32 | # |
10439
21c28b0f9e41
Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10352
diff
changeset
|
33 | # Copyright (c) 2022 - 2024 Detlev Offenbach <detlev@die-offenbachs.de> |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
34 | # |
9310 | 35 | # Modifications: |
36 | # - removed dependency to prettytable | |
37 | # - removed some not needed code | |
38 | # - changed 'create_licenses_table' to 'create_licenses_list' | |
39 | # - changed 'create_summary_table' to 'create_summary_list' | |
40 | # - changed 'create_output_string' to return a JSON string | |
10881
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
41 | # - removed 'load_config_from_file()' because we only use command line |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
42 | # configuration |
9310 | 43 | # |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
44 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
45 | from __future__ import annotations |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
46 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | import argparse |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | import codecs |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
49 | import json |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
50 | import os |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
51 | import re |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
52 | import subprocess |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | import sys |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | from collections import Counter |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | from enum import Enum, auto |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
56 | from pathlib import Path |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
57 | from typing import TYPE_CHECKING, List, Type, cast |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
58 | |
9851
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
59 | # modified for 'eric-ide' for Python < 3.8 |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
60 | try: |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
61 | from importlib import metadata as importlib_metadata |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
62 | except ImportError: |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
63 | importlib_metadata = None |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
64 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
65 | if TYPE_CHECKING: |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
66 | from email.message import Message |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
67 | from typing import Callable, Dict, Iterator, Optional, Sequence |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
69 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
70 | __pkgname__ = "pip-licenses" |
10881
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
71 | __version__ = "5.0.0" |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
72 | __summary__ = ( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
73 | "Dump the software license list of Python packages installed with pip." |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
74 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | FIELD_NAMES = ( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | 'Name', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | 'Version', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | 'License', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | 'LicenseFile', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | 'LicenseText', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | 'NoticeFile', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
84 | 'NoticeText', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
85 | 'Author', |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
86 | "Maintainer", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | 'Description', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | 'URL', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
92 | SUMMARY_FIELD_NAMES = ( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
93 | "Count", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
94 | "License", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
95 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
96 | |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
97 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | DEFAULT_OUTPUT_FIELDS = ( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | 'Name', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | 'Version', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | SUMMARY_OUTPUT_FIELDS = ( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | 'Count', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | 'License', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
110 | def extract_homepage(metadata: Message) -> Optional[str]: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
111 | """Extracts the homepage attribute from the package metadata. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
112 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
113 | Not all python packages have defined a home-page attribute. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
114 | As a fallback, the `Project-URL` metadata can be used. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
115 | The python core metadata supports multiple (free text) values for |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
116 | the `Project-URL` field that are comma separated. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
117 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
118 | Args: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
119 | metadata: The package metadata to extract the homepage from. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
120 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
121 | Returns: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
122 | The home page if applicable, None otherwise. |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
123 | """ |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
124 | homepage = metadata.get("home-page", None) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
125 | if homepage is not None: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
126 | return homepage |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
127 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
128 | candidates: Dict[str, str] = {} |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
129 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
130 | for entry in metadata.get_all("Project-URL", []): |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
131 | key, value = entry.split(",", 1) |
10179
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
132 | candidates[key.strip().lower()] = value.strip() |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
133 | |
10179
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
134 | for priority_key in [ "homepage", |
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
135 | "source", |
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
136 | "repository", |
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
137 | "changelog", |
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
138 | "bug tracker", |
c2125fcab4b8
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10027
diff
changeset
|
139 | ]: |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
140 | if priority_key in candidates: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
141 | return candidates[priority_key] |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
142 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
143 | return None |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
144 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
145 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
146 | PATTERN_DELIMITER = re.compile(r"[-_.]+") |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
147 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
148 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
149 | def normalize_pkg_name(pkg_name: str) -> str: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
150 | """Return normalized name according to PEP specification |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
151 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
152 | See here: https://peps.python.org/pep-0503/#normalized-names |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
153 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
154 | Args: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
155 | pkg_name: Package name it is extracted from the package metadata |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
156 | or specified in the CLI |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
157 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
158 | Returns: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
159 | normalized packege name |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
160 | """ |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
161 | return PATTERN_DELIMITER.sub("-", pkg_name).lower() |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
162 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
163 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
164 | METADATA_KEYS: Dict[str, List[Callable[[Message], Optional[str]]]] = { |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
165 | "home-page": [extract_homepage], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
166 | "author": [ |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
167 | lambda metadata: metadata.get("author"), |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
168 | lambda metadata: metadata.get("author-email"), |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
169 | ], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
170 | "maintainer": [ |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
171 | lambda metadata: metadata.get("maintainer"), |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
172 | lambda metadata: metadata.get("maintainer-email"), |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
173 | ], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
174 | "license": [lambda metadata: metadata.get("license")], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
175 | "summary": [lambda metadata: metadata.get("summary")], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
176 | } |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | # Mapping of FIELD_NAMES to METADATA_KEYS where they differ by more than case |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | FIELDS_TO_METADATA_KEYS = { |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | 'URL': 'home-page', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | 'Description': 'summary', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | 'License-Metadata': 'license', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | 'License-Classifier': 'license_classifier', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | } |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | SYSTEM_PACKAGES = ( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | __pkgname__, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | 'pip', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | 'setuptools', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | 'wheel', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | LICENSE_UNKNOWN = 'UNKNOWN' |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
197 | def get_packages( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
198 | args: CustomNamespace, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
199 | ) -> Iterator[dict[str, str | list[str]]]: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
200 | def get_pkg_included_file( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
201 | pkg, file_names_rgx: str |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
202 | ) -> tuple[str, str]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
203 | """ |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | Attempt to find the package's included file on disk and return the |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | tuple (included_file_path, included_file_contents). |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | """ |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | included_file = LICENSE_UNKNOWN |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | included_text = LICENSE_UNKNOWN |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
209 | |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
210 | pkg_files = pkg.files or () |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
211 | pattern = re.compile(file_names_rgx) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
212 | matched_rel_paths = filter( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
213 | lambda file: pattern.match(file.name), pkg_files |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
214 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
215 | for rel_path in matched_rel_paths: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
216 | abs_path = Path(pkg.locate_file(rel_path)) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
217 | if not abs_path.is_file(): |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
218 | continue |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
219 | included_file = str(abs_path) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
220 | with open( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
221 | abs_path, encoding="utf-8", errors="backslashreplace" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
222 | ) as included_file_handle: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
223 | included_text = included_file_handle.read() |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
224 | break |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | return (included_file, included_text) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
227 | def get_pkg_info(pkg) -> dict[str, str | list[str]]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | (license_file, license_text) = get_pkg_included_file( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
229 | pkg, "LICEN[CS]E.*|COPYING.*" |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | ) |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
231 | (notice_file, notice_text) = get_pkg_included_file(pkg, "NOTICE.*") |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
232 | pkg_info: dict[str, str | list[str]] = { |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
233 | "name": pkg.metadata["name"], |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
234 | "version": pkg.version, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
235 | "namever": "{} {}".format(pkg.metadata["name"], pkg.version), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
236 | "licensefile": license_file, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
237 | "licensetext": license_text, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
238 | "noticefile": notice_file, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
239 | "noticetext": notice_text, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
240 | } |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
241 | metadata = pkg.metadata |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
242 | for field_name, field_selector_fns in METADATA_KEYS.items(): |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
243 | value = None |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
244 | for field_selector_fn in field_selector_fns: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
245 | # Type hint of `Distribution.metadata` states `PackageMetadata` |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
246 | # but it's actually of type `email.Message` |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
247 | value = field_selector_fn(metadata) # type: ignore |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
248 | if value: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
249 | break |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
250 | pkg_info[field_name] = value or LICENSE_UNKNOWN |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
252 | classifiers: list[str] = metadata.get_all("classifier", []) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
253 | pkg_info["license_classifier"] = find_license_from_classifier( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
254 | classifiers |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
255 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | if args.filter_strings: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
258 | |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
259 | def filter_string(item: str) -> str: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
260 | return item.encode( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
261 | args.filter_code_page, errors="ignore" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
262 | ).decode(args.filter_code_page) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
263 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | for k in pkg_info: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | if isinstance(pkg_info[k], list): |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
266 | pkg_info[k] = list(map(filter_string, pkg_info[k])) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267 | else: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
268 | pkg_info[k] = filter_string(cast(str, pkg_info[k])) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | return pkg_info |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
272 | def get_python_sys_path(executable: str) -> list[str]: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
273 | script = "import sys; print(' '.join(filter(bool, sys.path)))" |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
274 | output = subprocess.run( |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
275 | [executable, "-c", script], |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
276 | capture_output=True, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
277 | env={**os.environ, "PYTHONPATH": "", "VIRTUAL_ENV": ""}, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
278 | ) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
279 | return output.stdout.decode().strip().split() |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
280 | |
9851
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
281 | # modified for 'eric-ide' for Python < 3.8 |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
282 | if importlib_metadata is None: |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
283 | return [] |
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
284 | else: |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
285 | if args.python == sys.executable: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
286 | search_paths = sys.path |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
287 | else: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
288 | search_paths = get_python_sys_path(args.python) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
289 | pkgs = importlib_metadata.distributions(path=search_paths) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
290 | ignore_pkgs_as_normalize = [ |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
291 | normalize_pkg_name(pkg) for pkg in args.ignore_packages |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
292 | ] |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
293 | pkgs_as_normalize = [normalize_pkg_name(pkg) for pkg in args.packages] |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295 | fail_on_licenses = set() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296 | if args.fail_on: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297 | fail_on_licenses = set(map(str.strip, args.fail_on.split(";"))) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
299 | allow_only_licenses = set() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
300 | if args.allow_only: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301 | allow_only_licenses = set(map(str.strip, args.allow_only.split(";"))) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
303 | for pkg in pkgs: |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
304 | pkg_name = normalize_pkg_name(pkg.metadata["name"]) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
305 | pkg_name_and_version = pkg_name + ":" + pkg.metadata["version"] |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
306 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
307 | if ( |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
308 | pkg_name.lower() in ignore_pkgs_as_normalize |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
309 | or pkg_name_and_version.lower() in ignore_pkgs_as_normalize |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
310 | ): |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311 | continue |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
313 | if pkgs_as_normalize and pkg_name.lower() not in pkgs_as_normalize: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
314 | continue |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316 | if not args.with_system and pkg_name in SYSTEM_PACKAGES: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317 | continue |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319 | pkg_info = get_pkg_info(pkg) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321 | license_names = select_license_by_source( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322 | args.from_, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
323 | cast(List[str], pkg_info["license_classifier"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
324 | cast(str, pkg_info["license"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
325 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327 | if fail_on_licenses: |
10756
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
328 | failed_licenses = set() |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
329 | if not args.partial_match: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
330 | failed_licenses = case_insensitive_set_intersect( |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
331 | license_names, fail_on_licenses |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
332 | ) |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
333 | else: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
334 | failed_licenses = case_insensitive_partial_match_set_intersect( |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
335 | license_names, fail_on_licenses |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
336 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
337 | if failed_licenses: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338 | sys.stderr.write( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339 | "fail-on license {} was found for package " |
10352
37d8616b44ca
Upgraded pip-licenses to version 4.3.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
340 | "{}:{}\n".format( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
341 | "; ".join(sorted(failed_licenses)), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
342 | pkg_info["name"], |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
343 | pkg_info["version"], |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
344 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346 | sys.exit(1) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348 | if allow_only_licenses: |
10756
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
349 | uncommon_licenses = set() |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
350 | if not args.partial_match: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
351 | uncommon_licenses = case_insensitive_set_diff( |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
352 | license_names, allow_only_licenses |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
353 | ) |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
354 | else: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
355 | uncommon_licenses = case_insensitive_partial_match_set_diff( |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
356 | license_names, allow_only_licenses |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
357 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
358 | if len(uncommon_licenses) == len(license_names): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359 | sys.stderr.write( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360 | "license {} not in allow-only licenses was found" |
10352
37d8616b44ca
Upgraded pip-licenses to version 4.3.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10331
diff
changeset
|
361 | " for package {}:{}\n".format( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
362 | "; ".join(sorted(uncommon_licenses)), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
363 | pkg_info["name"], |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
364 | pkg_info["version"], |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
365 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366 | ) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367 | sys.exit(1) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369 | yield pkg_info |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371 | |
9851
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
372 | # modified for 'eric-ide' |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373 | def create_licenses_list( |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
374 | args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS): |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
375 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376 | licenses = [] |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377 | for pkg in get_packages(args): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378 | row = {} |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379 | for field in output_fields: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380 | if field == 'License': |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381 | license_set = select_license_by_source( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
382 | args.from_, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
383 | cast(List[str], pkg["license_classifier"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
384 | cast(str, pkg["license"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
385 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
386 | license_str = "; ".join(sorted(license_set)) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387 | row[field] = license_str |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388 | elif field == 'License-Classifier': |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
389 | row[field] = ( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
390 | "; ".join(sorted(pkg["license_classifier"])) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
391 | or LICENSE_UNKNOWN |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
392 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393 | elif field.lower() in pkg: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
394 | row[field] = cast(str, pkg[field.lower()]) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | else: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
396 | row[field] = cast(str, pkg[FIELDS_TO_METADATA_KEYS[field]]) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397 | licenses.append(row) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399 | return licenses |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
401 | |
9851
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
402 | # modified for 'eric-ide' |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
403 | def create_summary_list(args: "CustomNamespace"): |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404 | counts = Counter( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
405 | "; ".join( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
406 | sorted( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
407 | select_license_by_source( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
408 | args.from_, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
409 | cast(List[str], pkg["license_classifier"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
410 | cast(str, pkg["license"]), |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
411 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
412 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
413 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
414 | for pkg in get_packages(args) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
415 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
416 | |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
417 | licenses = [] |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418 | for license, count in counts.items(): |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
419 | licenses.append({ |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
420 | "Count": count, |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
421 | "License": license, |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
422 | }) |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
423 | |
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
424 | return licenses |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
425 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426 | |
9849
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
427 | def case_insensitive_set_intersect(set_a, set_b): |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
428 | """Same as set.intersection() but case-insensitive""" |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
429 | common_items = set() |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
430 | set_b_lower = {item.lower() for item in set_b} |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
431 | for elem in set_a: |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
432 | if elem.lower() in set_b_lower: |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
433 | common_items.add(elem) |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
434 | return common_items |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
435 | |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
436 | |
10756
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
437 | def case_insensitive_partial_match_set_intersect(set_a, set_b): |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
438 | common_items = set() |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
439 | for item_a in set_a: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
440 | for item_b in set_b: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
441 | if item_b.lower() in item_a.lower(): |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
442 | common_items.add(item_a) |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
443 | return common_items |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
444 | |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
445 | |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
446 | def case_insensitive_partial_match_set_diff(set_a, set_b): |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
447 | uncommon_items = set_a.copy() |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
448 | for item_a in set_a: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
449 | for item_b in set_b: |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
450 | if item_b.lower() in item_a.lower(): |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
451 | uncommon_items.remove(item_a) |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
452 | return uncommon_items |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
453 | |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
454 | |
9849
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
455 | def case_insensitive_set_diff(set_a, set_b): |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
456 | """Same as set.difference() but case-insensitive""" |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
457 | uncommon_items = set() |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
458 | set_b_lower = {item.lower() for item in set_b} |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
459 | for elem in set_a: |
10331
c1a2ff7e3575
Modernized some code and corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10179
diff
changeset
|
460 | if elem.lower() not in set_b_lower: |
9849
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
461 | uncommon_items.add(elem) |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
462 | return uncommon_items |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
463 | |
99782ca569ed
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9653
diff
changeset
|
464 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
465 | def find_license_from_classifier(classifiers: list[str]) -> list[str]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
466 | licenses = [] |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
467 | for classifier in filter(lambda c: c.startswith("License"), classifiers): |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
468 | license = classifier.split(" :: ")[-1] |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
470 | # Through the declaration of 'Classifier: License :: OSI Approved' |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
471 | if license != "OSI Approved": |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
472 | licenses.append(license) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474 | return licenses |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
477 | def select_license_by_source( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
478 | from_source: FromArg, license_classifier: list[str], license_meta: str |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
479 | ) -> set[str]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480 | license_classifier_set = set(license_classifier) or {LICENSE_UNKNOWN} |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
481 | if ( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
482 | from_source == FromArg.CLASSIFIER |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
483 | or from_source == FromArg.MIXED |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
484 | and len(license_classifier) > 0 |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
485 | ): |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486 | return license_classifier_set |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487 | else: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488 | return {license_meta} |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
491 | def get_output_fields(args: CustomNamespace) -> list[str]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492 | if args.summary: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493 | return list(SUMMARY_OUTPUT_FIELDS) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495 | output_fields = list(DEFAULT_OUTPUT_FIELDS) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497 | if args.from_ == FromArg.ALL: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
498 | output_fields.append("License-Metadata") |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
499 | output_fields.append("License-Classifier") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500 | else: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
501 | output_fields.append("License") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503 | if args.with_authors: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
504 | output_fields.append("Author") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
506 | if args.with_maintainers: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
507 | output_fields.append("Maintainer") |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
508 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509 | if args.with_urls: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
510 | output_fields.append("URL") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512 | if args.with_description: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
513 | output_fields.append("Description") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514 | |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
515 | if args.no_version: |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
516 | output_fields.remove("Version") |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
517 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
518 | if args.with_license_file: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
519 | if not args.no_license_path: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
520 | output_fields.append("LicenseFile") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
522 | output_fields.append("LicenseText") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524 | if args.with_notice_file: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
525 | output_fields.append("NoticeText") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526 | if not args.no_license_path: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
527 | output_fields.append("NoticeFile") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529 | return output_fields |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531 | |
9851
ec12090e9cd9
Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9850
diff
changeset
|
532 | # modified for 'eric-ide' |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
533 | def create_output_string(args: "CustomNamespace"): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
534 | output_fields = get_output_fields(args) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
535 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536 | if args.summary: |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
537 | licenses = create_summary_list(args) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538 | else: |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
539 | licenses = create_licenses_list(args, output_fields) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540 | |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
541 | return json.dumps(licenses) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544 | class CustomHelpFormatter(argparse.HelpFormatter): # pragma: no cover |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545 | def __init__( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
546 | self, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
547 | prog: str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
548 | indent_increment: int = 2, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
549 | max_help_position: int = 24, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
550 | width: Optional[int] = None, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551 | ) -> None: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552 | max_help_position = 30 |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553 | super().__init__( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
554 | prog, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
555 | indent_increment=indent_increment, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
556 | max_help_position=max_help_position, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
557 | width=width, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
558 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
560 | def _format_action(self, action: argparse.Action) -> str: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561 | flag_indent_argument: bool = False |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562 | text = self._expand_help(action) |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
563 | separator_pos = text[:3].find("|") |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
564 | if separator_pos != -1 and "I" in text[:separator_pos]: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
565 | self._indent() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
566 | flag_indent_argument = True |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
567 | help_str = super()._format_action(action) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568 | if flag_indent_argument: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
569 | self._dedent() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
570 | return help_str |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
571 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572 | def _expand_help(self, action: argparse.Action) -> str: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573 | if isinstance(action.default, Enum): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
574 | default_value = enum_key_to_value(action.default) |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
575 | return cast(str, self._get_help_string(action)) % { |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
576 | "default": default_value |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
577 | } |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
578 | return super()._expand_help(action) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
579 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
580 | def _split_lines(self, text: str, width: int) -> List[str]: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
581 | separator_pos = text[:3].find("|") |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582 | if separator_pos != -1: |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
583 | flag_splitlines: bool = "R" in text[:separator_pos] |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
584 | text = text[separator_pos + 1:] # fmt: skip |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585 | if flag_splitlines: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586 | return text.splitlines() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587 | return super()._split_lines(text, width) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
590 | class CustomNamespace(argparse.Namespace): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
591 | from_: "FromArg" |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
592 | order: "OrderArg" |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
593 | summary: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
594 | output_file: str |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595 | ignore_packages: List[str] |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
596 | packages: List[str] |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597 | with_system: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
598 | with_authors: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
599 | with_urls: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
600 | with_description: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
601 | with_license_file: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
602 | no_license_path: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603 | with_notice_file: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604 | filter_strings: bool |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
605 | filter_code_page: str |
10756
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
606 | partial_match: bool |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607 | fail_on: Optional[str] |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608 | allow_only: Optional[str] |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
611 | class CompatibleArgumentParser(argparse.ArgumentParser): |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
612 | def parse_args( # type: ignore[override] |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
613 | self, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
614 | args: None | Sequence[str] = None, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
615 | namespace: None | CustomNamespace = None, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
616 | ) -> CustomNamespace: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
617 | args_ = cast(CustomNamespace, super().parse_args(args, namespace)) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
618 | self._verify_args(args_) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
619 | return args_ |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
620 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
621 | def _verify_args(self, args: CustomNamespace) -> None: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
622 | if args.with_license_file is False and ( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
623 | args.no_license_path is True or args.with_notice_file is True |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
624 | ): |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
625 | self.error( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
626 | "'--no-license-path' and '--with-notice-file' require " |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
627 | "the '--with-license-file' option to be set" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
628 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
629 | if args.filter_strings is False and args.filter_code_page != "latin1": |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630 | self.error( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631 | "'--filter-code-page' requires the '--filter-strings' " |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
632 | "option to be set" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
633 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634 | try: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635 | codecs.lookup(args.filter_code_page) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636 | except LookupError: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637 | self.error( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638 | "invalid code page '%s' given for '--filter-code-page, " |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639 | "check https://docs.python.org/3/library/codecs.html" |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640 | "#standard-encodings for valid code pages" |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
641 | % args.filter_code_page |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
642 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645 | class NoValueEnum(Enum): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646 | def __repr__(self): # pragma: no cover |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647 | return '<%s.%s>' % (self.__class__.__name__, self.name) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650 | class FromArg(NoValueEnum): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651 | META = M = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652 | CLASSIFIER = C = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653 | MIXED = MIX = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654 | ALL = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
657 | class OrderArg(NoValueEnum): |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658 | COUNT = C = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659 | LICENSE = L = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660 | NAME = N = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661 | AUTHOR = A = auto() |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
662 | MAINTAINER = M = auto() |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663 | URL = U = auto() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666 | def value_to_enum_key(value: str) -> str: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667 | return value.replace('-', '_').upper() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670 | def enum_key_to_value(enum_key: Enum) -> str: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671 | return enum_key.name.replace('_', '-').lower() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
673 | |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
674 | def choices_from_enum(enum_cls: Type[NoValueEnum]) -> List[str]: |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
675 | return [ |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
676 | key.replace("_", "-").lower() for key in enum_cls.__members__.keys() |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
677 | ] |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
678 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
679 | |
10881
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
680 | def get_value_from_enum( |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
681 | enum_cls: Type[NoValueEnum], value: str |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
682 | ) -> NoValueEnum: |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
683 | return getattr(enum_cls, value_to_enum_key(value)) |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
684 | |
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
685 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686 | MAP_DEST_TO_ENUM = { |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
687 | 'from_': FromArg, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
688 | 'order': OrderArg, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
689 | } |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
691 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692 | class SelectAction(argparse.Action): |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
693 | def __call__( # type: ignore[override] |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
694 | self, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
695 | parser: argparse.ArgumentParser, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696 | namespace: argparse.Namespace, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
697 | values: str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
698 | option_string: Optional[str] = None, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699 | ) -> None: |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700 | enum_cls = MAP_DEST_TO_ENUM[self.dest] |
10881
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
701 | setattr(namespace, self.dest, get_value_from_enum(enum_cls, values)) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
703 | |
10881
c20d7e202152
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10756
diff
changeset
|
704 | def create_parser() -> CompatibleArgumentParser: |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
705 | parser = CompatibleArgumentParser( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
706 | description=__summary__, formatter_class=CustomHelpFormatter |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
707 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
708 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
709 | common_options = parser.add_argument_group('Common options') |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
710 | format_options = parser.add_argument_group('Format options') |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
711 | verify_options = parser.add_argument_group('Verify options') |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
712 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
713 | parser.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
714 | "-v", "--version", action="version", version="%(prog)s " + __version__ |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
715 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
716 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
717 | common_options.add_argument( |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
718 | "--python", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
719 | type=str, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
720 | default=sys.executable, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
721 | metavar="PYTHON_EXEC", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
722 | help="R| path to python executable to search distributions from\n" |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
723 | "Package will be searched in the selected python's sys.path\n" |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
724 | "By default, will search packages for current env executable\n" |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
725 | "(default: sys.executable)", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
726 | ) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
727 | |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
728 | common_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
729 | "--from", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
730 | dest="from_", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
731 | action=SelectAction, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
732 | type=str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
733 | default=FromArg.MIXED, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
734 | metavar="SOURCE", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
735 | choices=choices_from_enum(FromArg), |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
736 | help="R|where to find license information\n" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
737 | '"meta", "classifier, "mixed", "all"\n' |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
738 | "(default: %(default)s)", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
739 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
740 | common_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
741 | "-o", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
742 | "--order", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
743 | action=SelectAction, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
744 | type=str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
745 | default=OrderArg.NAME, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
746 | metavar="COL", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
747 | choices=choices_from_enum(OrderArg), |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
748 | help="R|order by column\n" |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
749 | '"name", "license", "author", "url"\n' |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
750 | "(default: %(default)s)", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
751 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
752 | common_options.add_argument( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
753 | '--summary', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
754 | action='store_true', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
755 | default=False, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
756 | help='dump summary of each license') |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
757 | common_options.add_argument( |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
758 | '--output-file', |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
759 | action='store', type=str, |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
760 | help='save license list to file') |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
761 | common_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
762 | "-i", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
763 | "--ignore-packages", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
764 | action="store", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
765 | type=str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
766 | nargs="+", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
767 | metavar="PKG", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
768 | default=[], |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
769 | help="ignore package name in dumped list", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
770 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
771 | common_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
772 | "-p", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
773 | "--packages", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
774 | action="store", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
775 | type=str, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
776 | nargs="+", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
777 | metavar="PKG", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
778 | default=[], |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
779 | help="only include selected packages in output", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
780 | ) |
9003
6bc210cd5726
Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9002
diff
changeset
|
781 | |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
782 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
783 | "-s", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
784 | "--with-system", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
785 | action="store_true", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
786 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
787 | help="dump with system packages", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
788 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
789 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
790 | "-a", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
791 | "--with-authors", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
792 | action="store_true", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
793 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
794 | help="dump with package authors", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
795 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
796 | format_options.add_argument( |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
797 | "--with-maintainers", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
798 | action="store_true", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
799 | default=False, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
800 | help="dump with package maintainers", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
801 | ) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
802 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
803 | "-u", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
804 | "--with-urls", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
805 | action="store_true", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
806 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
807 | help="dump with package urls", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
808 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
809 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
810 | "-d", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
811 | "--with-description", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
812 | action="store_true", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
813 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
814 | help="dump with short package description", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
815 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
816 | format_options.add_argument( |
10027
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
817 | "-nv", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
818 | "--no-version", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
819 | action="store_true", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
820 | default=False, |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
821 | help="dump without package version", |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
822 | ) |
63728909f3ff
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9851
diff
changeset
|
823 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
824 | "-l", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
825 | "--with-license-file", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
826 | action="store_true", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
827 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
828 | help="dump with location of license file and " |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
829 | "contents, most useful with JSON output", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
830 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
831 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
832 | "--no-license-path", |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
833 | action="store_true", |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
834 | default=False, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
835 | help="I|when specified together with option -l, " |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
836 | "suppress location of license file output", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
837 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
838 | format_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
839 | "--with-notice-file", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
840 | action="store_true", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
841 | default=False, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
842 | help="I|when specified together with option -l, " |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
843 | "dump with location of license file and contents", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
844 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
845 | format_options.add_argument( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
846 | "--filter-strings", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
847 | action="store_true", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
848 | default=False, |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
849 | help="filter input according to code page", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
850 | ) |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
851 | format_options.add_argument( |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
852 | "--filter-code-page", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
853 | action="store", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
854 | type=str, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
855 | default="latin1", |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
856 | metavar="CODE", |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
857 | help="I|specify code page for filtering " "(default: %(default)s)", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
858 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
859 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
860 | verify_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
861 | "--fail-on", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
862 | action="store", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
863 | type=str, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
864 | default=None, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
865 | help="fail (exit with code 1) on the first occurrence " |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
866 | "of the licenses of the semicolon-separated list", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
867 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
868 | verify_options.add_argument( |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
869 | "--allow-only", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
870 | action="store", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
871 | type=str, |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
872 | default=None, |
9590
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
873 | help="fail (exit with code 1) on the first occurrence " |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
874 | "of the licenses not in the semicolon-separated list", |
8fad82cb88ab
Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
9310
diff
changeset
|
875 | ) |
10756
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
876 | verify_options.add_argument( |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
877 | "--partial-match", |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
878 | action="store_true", |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
879 | default=False, |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
880 | help="enables partial matching for --allow-only/--fail-on", |
0702be694bc4
Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
10637
diff
changeset
|
881 | ) |
9002
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
882 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
883 | return parser |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
884 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
885 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
886 | def main(): # pragma: no cover |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
887 | parser = create_parser() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
888 | args = parser.parse_args() |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
889 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
890 | output_string = create_output_string(args) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
891 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
892 | print(output_string) |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
893 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
894 | |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
895 | if __name__ == '__main__': # pragma: no cover |
31a7decd3393
Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
896 | main() |