From f6ff935e7193327cb56ebc52a0c1a11bf51a9545 Mon Sep 17 00:00:00 2001 From: tdruez Date: Thu, 27 May 2021 15:31:14 +0200 Subject: [PATCH] Add is_binary, is_text, and is_archive fields to the CodebaseResource model #75 Signed-off-by: tdruez --- CHANGELOG.rst | 6 ++++ ...7_resource_is_binary_is_text_is_archive.py | 28 +++++++++++++++++++ scanpipe/models.py | 3 ++ scanpipe/pipes/scancode.py | 3 -- scanpipe/tests/test_api.py | 2 +- scanpipe/tests/test_pipes.py | 4 ++- 6 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 scanpipe/migrations/0007_resource_is_binary_is_text_is_archive.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index b8aefc607b..3c27e48283 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,6 +1,12 @@ // Release notes // ------------- +### unreleased + +- Add the is_binary, is_text, and is_archive fields to the CodebaseResource + model. + https://github.com/nexB/scancode.io/issues/75 + ### v21.5.12 - Adds a new way to fetch docker images using skopeo provided as a diff --git a/scanpipe/migrations/0007_resource_is_binary_is_text_is_archive.py b/scanpipe/migrations/0007_resource_is_binary_is_text_is_archive.py new file mode 100644 index 0000000000..20070d5509 --- /dev/null +++ b/scanpipe/migrations/0007_resource_is_binary_is_text_is_archive.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.1 on 2021-05-27 12:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('scanpipe', '0006_codebaseresource_compliance_alert'), + ] + + operations = [ + migrations.AddField( + model_name='codebaseresource', + name='is_archive', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='codebaseresource', + name='is_binary', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='codebaseresource', + name='is_text', + field=models.BooleanField(default=False), + ), + ] diff --git a/scanpipe/models.py b/scanpipe/models.py index 87b82de1bc..3633013762 100644 --- a/scanpipe/models.py +++ b/scanpipe/models.py @@ -967,6 +967,9 @@ class Type(models.TextChoices): blank=True, help_text=_("Descriptive file type for this resource."), ) + is_binary = models.BooleanField(default=False) + is_text = models.BooleanField(default=False) + is_archive = models.BooleanField(default=False) class Compliance(models.TextChoices): OK = "ok" diff --git a/scanpipe/pipes/scancode.py b/scanpipe/pipes/scancode.py index c3dafac40c..a0ea2ee1eb 100644 --- a/scanpipe/pipes/scancode.py +++ b/scanpipe/pipes/scancode.py @@ -101,9 +101,6 @@ def get_resource_info(location): # Missing fields on CodebaseResource model returned by `get_file_info`. unsupported_fields = [ - "is_binary", - "is_text", - "is_archive", "is_media", "is_source", "is_script", diff --git a/scanpipe/tests/test_api.py b/scanpipe/tests/test_api.py index 8233006826..bdc6100317 100644 --- a/scanpipe/tests/test_api.py +++ b/scanpipe/tests/test_api.py @@ -371,6 +371,6 @@ def test_scanpipe_api_serializer_get_model_serializer(self): def test_scanpipe_api_serializer_get_serializer_fields(self): self.assertEqual(28, len(get_serializer_fields(DiscoveredPackage))) - self.assertEqual(21, len(get_serializer_fields(CodebaseResource))) + self.assertEqual(24, len(get_serializer_fields(CodebaseResource))) with self.assertRaises(LookupError): get_serializer_fields(None) diff --git a/scanpipe/tests/test_pipes.py b/scanpipe/tests/test_pipes.py index 9da8cec569..c9d7827c0a 100644 --- a/scanpipe/tests/test_pipes.py +++ b/scanpipe/tests/test_pipes.py @@ -221,6 +221,7 @@ def test_scanpipe_pipes_scancode_get_resource_info(self): "type": CodebaseResource.Type.FILE, "name": "notice", "extension": ".NOTICE", + "is_text": True, "size": 1178, "sha1": "4bd631df28995c332bf69d9d4f0f74d7ee089598", "md5": "90cd416fd24df31f608249b77bae80f1", @@ -228,7 +229,8 @@ def test_scanpipe_pipes_scancode_get_resource_info(self): "mime_type": "text/plain", "file_type": "ASCII text", } - self.assertEqual(expected, scancode.get_resource_info(input_location)) + resource_info = scancode.get_resource_info(input_location) + self.assertEqual(expected, resource_info) def test_scanpipe_pipes_scancode_scan_file(self): input_location = str(self.data_location / "notice.NOTICE")