1717from api import models
1818from api .utils import validate_json
1919from api .exceptions import DryccException
20+ from api .models .base import PROCFILE_TYPE_MIN_LENGTH , PROCFILE_TYPE_MAX_LENGTH
2021from scheduler .resources .pod import DEFAULT_CONTAINER_PORT
2122from .schemas .rules import SCHEMA as RULES_SCHEMA
2223from .schemas .volumes import SCHEMA as VOLUMES_SCHEMA
6970HEALTHCHECK_MISMATCH_MSG = "Healthcheck pattern: %s" % HEALTHCHECK_MATCH .pattern
7071
7172
73+ def validate_procfile_type (value ):
74+ if not re .match (PROCTYPE_MATCH , value ):
75+ raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
76+ if len (value ) < PROCFILE_TYPE_MIN_LENGTH or len (value ) > PROCFILE_TYPE_MAX_LENGTH :
77+ raise serializers .ValidationError (
78+ "The length of procfile_type must be between {} and {}" .format (
79+ PROCFILE_TYPE_MIN_LENGTH , PROCFILE_TYPE_MAX_LENGTH ))
80+ return value
81+
82+
7283class JSONFieldSerializer (serializers .JSONField ):
7384 def __init__ (self , * args , ** kwargs ):
7485 self .convert_to_str = kwargs .pop ('convert_to_str' , True )
@@ -199,16 +210,17 @@ def validate_procfile(data):
199210 for key , value in data .items ():
200211 if value is None or value == "" :
201212 raise serializers .ValidationError ("Command can't be empty for process type" )
202-
203- if not re .match (PROCTYPE_MATCH , key ):
204- raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
205-
213+ validate_procfile_type (key )
206214 return data
207215
208216 @staticmethod
209217 def validate_dryccfile (data ):
210218 if data :
211- return validate_json (data , DRYCCFILE_SCHEMA , serializers .ValidationError )
219+ validate_json (data , DRYCCFILE_SCHEMA , serializers .ValidationError )
220+ procfile_types = set ().union (data .get ("deploy" , {}).keys ())
221+ procfile_types = procfile_types .union (data .get ("build" , {}).get ("docker" , {}).keys ())
222+ for procfile_type in procfile_types :
223+ validate_procfile_type (procfile_type )
212224 return data
213225
214226
@@ -460,12 +472,7 @@ def ToACE(x): return idna.alabel(x).decode("utf-8", "strict")
460472
461473 return aceValue
462474
463- @staticmethod
464- def validate_procfile_type (value ):
465- if not re .match (PROCTYPE_MATCH , value ):
466- raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
467-
468- return value
475+ validate_procfile_type = staticmethod (validate_procfile_type )
469476
470477
471478class ServiceSerializer (serializers .ModelSerializer ):
@@ -502,12 +509,7 @@ def validate_protocol(value):
502509 def validate_target_port (cls , value ):
503510 return cls .validate_port (value )
504511
505- @staticmethod
506- def validate_procfile_type (value ):
507- if not re .match (PROCTYPE_MATCH , value ):
508- raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
509-
510- return value
512+ validate_procfile_type = staticmethod (validate_procfile_type )
511513
512514
513515class CertificateSerializer (serializers .ModelSerializer ):
@@ -719,12 +721,7 @@ def validate_protocol(value):
719721 raise serializers .ValidationError (GATEWAY_PROTOCOL_MISMATCH_MSG )
720722 return value
721723
722- @staticmethod
723- def validate_procfile_type (value ):
724- if not re .match (PROCTYPE_MATCH , value ):
725- raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
726-
727- return value
724+ validate_procfile_type = staticmethod (validate_procfile_type )
728725
729726
730727class RouteSerializer (serializers .Serializer ):
@@ -751,12 +748,7 @@ def validate_kind(value):
751748 raise serializers .ValidationError (ROUTE_PROTOCOL_MISMATCH_MSG )
752749 return value
753750
754- @staticmethod
755- def validate_procfile_type (value ):
756- if not re .match (PROCTYPE_MATCH , value ):
757- raise serializers .ValidationError (PROCTYPE_MISMATCH_MSG )
758-
759- return value
751+ validate_procfile_type = staticmethod (validate_procfile_type )
760752
761753 @staticmethod
762754 def validate_rules (value ):
0 commit comments