From b8464a43b7f3299bd2dc780c0d102709b791137d Mon Sep 17 00:00:00 2001 From: werwty Date: Tue, 19 Dec 2017 15:50:11 -0500 Subject: [PATCH] Update models to use TextField in lieu of ArrayField fixes #3217 https://pulp.plan.io/issues/3217 fixes #1132 https://pulp.plan.io/issues/1132 --- pulp_python/app/models.py | 21 ++++++++++---------- pulp_python/app/serializers.py | 35 +++++++++++++++------------------- 2 files changed, 25 insertions(+), 31 deletions(-) diff --git a/pulp_python/app/models.py b/pulp_python/app/models.py index c3a96729..cca744dd 100644 --- a/pulp_python/app/models.py +++ b/pulp_python/app/models.py @@ -5,7 +5,6 @@ from logging import getLogger from urllib.parse import urljoin, urlparse -from django.contrib.postgres.fields import ArrayField from django.db import models from pulpcore.plugin.models import (Artifact, Content, Importer, Publisher) @@ -70,10 +69,10 @@ class PythonPackageContent(Content): project_url = models.TextField(null=True) platform = models.TextField(null=True) supported_platform = models.TextField(null=True) - requires_dist = ArrayField(models.TextField(), default=[]) - provides_dist = ArrayField(models.TextField(), default=[]) - obsoletes_dist = ArrayField(models.TextField(), default=[]) - requires_external = ArrayField(models.TextField(), default=[]) + requires_dist = models.TextField(default="[]", blank=False) + provides_dist = models.TextField(default="[]", blank=False) + obsoletes_dist = models.TextField(default="[]", blank=False) + requires_external = models.TextField(default="[]", blank=False) class PythonPublisher(Publisher): @@ -104,7 +103,7 @@ class PythonImporter(Importer): """ TYPE = 'python' - projects = ArrayField(models.TextField()) + projects = models.TextField(null=True) def _fetch_inventory(self): """ @@ -131,7 +130,7 @@ def _fetch_remote(self): remote = [] metadata_urls = [urljoin(self.feed_url, 'pypi/%s/json' % project) - for project in self.projects] + for project in json.loads(self.projects)] for metadata_url in metadata_urls: parsed_url = urlparse(metadata_url) @@ -199,10 +198,10 @@ def _parse_metadata(cls, project, version, distribution): package['project_url'] = project.get('project_url') package['platform'] = project.get('platform') package['supported_platform'] = project.get('supported_platform') - package['requires_dist'] = project.get('requires_dist', []) - package['provides_dist'] = project.get('provides_dist', []) - package['obsoletes_dist'] = project.get('obsoletes_dist', []) - package['requires_external'] = project.get('requires_external', []) + package['requires_dist'] = json.dumps(project.get('requires_dist', [])) + package['provides_dist'] = json.dumps(project.get('provides_dist', [])) + package['obsoletes_dist'] = json.dumps(project.get('obsoletes_dist', [])) + package['requires_external'] = json.dumps(project.get('requires_external', [])) package['url'] = distribution['url'] package['md5_digest'] = distribution['md5_digest'] diff --git a/pulp_python/app/serializers.py b/pulp_python/app/serializers.py index 444cf658..fe52f40c 100644 --- a/pulp_python/app/serializers.py +++ b/pulp_python/app/serializers.py @@ -105,29 +105,25 @@ class PythonPackageContentSerializer(platform.ContentSerializer): required=False, allow_blank=True, help_text=_('Field to specify the OS and CPU for which the binary package was compiled. ') ) - requires_dist = serializers.ListField( - child=serializers.CharField(), - required=False, default=[], - help_text=_('List containing names of some other distutils project ' + requires_dist = serializers.CharField( + required=False, default="[]", + help_text=_('A JSON list containing names of some other distutils project ' 'required by this distribution.') ) - provides_dist = serializers.ListField( - child=serializers.CharField(), - required=False, default=[], - help_text=_('List containing names of a Distutils project which is contained' + provides_dist = serializers.CharField( + required=False, default="[]", + help_text=_('A JSON list containing names of a Distutils project which is contained' ' within this distribution.') ) - obsoletes_dist = serializers.ListField( - child=serializers.CharField(), - required=False, default=[], - help_text=_('List containing names of a distutils project\'s distribution which this ' - 'distribution renders obsolete, meaning that the two projects should not ' + obsoletes_dist = serializers.CharField( + required=False, default="[]", + help_text=_('A JSON list containing names of a distutils project\'s distribution which ' + 'this distribution renders obsolete, meaning that the two projects should not ' 'be installed at the same time.') ) - requires_external = serializers.ListField( - child=serializers.CharField(), - required=False, default=[], - help_text=_('List containing some dependency in the system that the distribution ' + requires_external = serializers.CharField( + required=False, default="[]", + help_text=_('A JSON list containing some dependency in the system that the distribution ' 'is to be used.') ) classifiers = ClassifierSerializer( @@ -166,10 +162,9 @@ class PythonImporterSerializer(platform.ImporterSerializer): A Serializer for PythonImporter. """ - projects = serializers.ListField( - child=serializers.CharField(), + projects = serializers.CharField( required=True, - help_text=_('A list of project names to sync.') + help_text=_('A JSON list of project names to sync.') ) class Meta: