mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-16 20:15:44 +00:00
factor out read_license_file
This commit is contained in:
@ -35,6 +35,48 @@ from .version import inventreeApiText
|
||||
logger = structlog.get_logger('inventree')
|
||||
|
||||
|
||||
def read_license_file(path: Path) -> list:
|
||||
"""Extract license information from the provided file.
|
||||
|
||||
Arguments:
|
||||
path: Path to the license file
|
||||
|
||||
Returns: A list of items containing the license information
|
||||
"""
|
||||
# Check if the file exists
|
||||
if not path.exists():
|
||||
logger.error("License file not found at '%s'", path)
|
||||
return []
|
||||
|
||||
try:
|
||||
data = json.loads(path.read_text())
|
||||
except json.JSONDecodeError as e:
|
||||
logger.exception("Failed to parse license file '%s': %s", path, e)
|
||||
return []
|
||||
except Exception as e:
|
||||
logger.exception("Exception while reading license file '%s': %s", path, e)
|
||||
return []
|
||||
|
||||
output = []
|
||||
names = set()
|
||||
|
||||
# Ensure we do not have any duplicate 'name' values in the list
|
||||
for entry in data:
|
||||
name = None
|
||||
for key in entry:
|
||||
if key.lower() == 'name':
|
||||
name = entry[key]
|
||||
break
|
||||
|
||||
if name is None or name in names:
|
||||
continue
|
||||
|
||||
names.add(name)
|
||||
output.append({key.lower(): value for key, value in entry.items()})
|
||||
|
||||
return output
|
||||
|
||||
|
||||
class LicenseViewSerializer(serializers.Serializer):
|
||||
"""Serializer for license information."""
|
||||
|
||||
@ -49,47 +91,6 @@ class LicenseView(APIView):
|
||||
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def read_license_file(self, path: Path) -> list:
|
||||
"""Extract license information from the provided file.
|
||||
|
||||
Arguments:
|
||||
path: Path to the license file
|
||||
|
||||
Returns: A list of items containing the license information
|
||||
"""
|
||||
# Check if the file exists
|
||||
if not path.exists():
|
||||
logger.error("License file not found at '%s'", path)
|
||||
return []
|
||||
|
||||
try:
|
||||
data = json.loads(path.read_text())
|
||||
except json.JSONDecodeError as e:
|
||||
logger.exception("Failed to parse license file '%s': %s", path, e)
|
||||
return []
|
||||
except Exception as e:
|
||||
logger.exception("Exception while reading license file '%s': %s", path, e)
|
||||
return []
|
||||
|
||||
output = []
|
||||
names = set()
|
||||
|
||||
# Ensure we do not have any duplicate 'name' values in the list
|
||||
for entry in data:
|
||||
name = None
|
||||
for key in entry:
|
||||
if key.lower() == 'name':
|
||||
name = entry[key]
|
||||
break
|
||||
|
||||
if name is None or name in names:
|
||||
continue
|
||||
|
||||
names.add(name)
|
||||
output.append({key.lower(): value for key, value in entry.items()})
|
||||
|
||||
return output
|
||||
|
||||
@extend_schema(responses={200: OpenApiResponse(response=LicenseViewSerializer)})
|
||||
def get(self, request, *args, **kwargs):
|
||||
"""Return information about the InvenTree server."""
|
||||
@ -98,8 +99,8 @@ class LicenseView(APIView):
|
||||
'web/static/web/.vite/dependencies.json'
|
||||
)
|
||||
return JsonResponse({
|
||||
'backend': self.read_license_file(backend),
|
||||
'frontend': self.read_license_file(frontend),
|
||||
'backend': read_license_file(backend),
|
||||
'frontend': read_license_file(frontend),
|
||||
})
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user