Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
nidx = 0
else:
nidx = int(indexes.popleft())
if ninst is None:
ninst = []
cinst._safe_set(pkey, ninst, ncls)
if self.strict_arrays:
if len(ninst) == 0:
newval = ncls.get_deserialization_instance()
ninst.append(newval)
frequencies[cfreq_key][pkey] += 1
if nidx > len(ninst):
raise ValidationError(orig_k,
"%%r Invalid array index %d." % idx)
if nidx == len(ninst):
ninst.append(ncls.get_deserialization_instance())
frequencies[cfreq_key][pkey] += 1
cinst = ninst[nidx]
else:
_m = idxmap[id(ninst)]
cidx = _m.get(nidx, None)
if cidx is None:
cidx = _s2cmi(_m, nidx)
newval = ncls.get_deserialization_instance()
ninst.insert(cidx, newval)
frequencies[cfreq_key][pkey] += 1
cinst = ninst[cidx]
@nillable_string
def decimal_from_string(cls, string):
if cls.Attributes.max_str_len is not None and len(string) > \
cls.Attributes.max_str_len:
raise ValidationError(string, "Decimal %%r longer than %d characters"
% cls.Attributes.max_str_len)
try:
return decimal.Decimal(string)
except decimal.InvalidOperation, e:
raise ValidationError(string, "%%r: %r" % e)
if value.data is not None:
value.path = uuid1().get_hex()
fp = join(self.store, value.path)
if not abspath(fp).startswith(self.store):
raise ValidationError(value.path, "Path %r contains "
"relative path operators (e.g. '..')")
with open(fp, 'wb') as file:
for d in value.data:
file.write(d)
elif value.handle is not None:
value.path = uuid1().get_hex()
fp = join(self.store, value.path)
if not abspath(fp).startswith(self.store):
raise ValidationError(value.path, "Path %r contains "
"relative path operators (e.g. '..')")
data = mmap(value.handle.fileno(), 0) # 0 = whole file
with open(fp, 'wb') as out_file:
out_file.write(data)
elif value.path is not None:
in_file_path = value.path
if not isfile(in_file_path):
logger.error("File path in %r not found" % value)
if dirname(abspath(in_file_path)) != self.store:
dest = join(self.store, uuid1().get_hex())
if value.move:
for k, v in fti.items():
val = d[k]
attrs = self.get_cls_attrs(v)
min_o, max_o = attrs.min_occurs, attrs.max_occurs
if issubclass(v, Array) and v.Attributes.max_occurs == 1:
v, = v._type_info.values()
attrs = self.get_cls_attrs(v)
min_o, max_o = attrs.min_occurs, attrs.max_occurs
if val < min_o:
raise ValidationError("%r.%s" % (cls, k),
'%%s member must occur at least %d times.' % min_o)
elif val > max_o:
raise ValidationError("%r.%s" % (cls, k),
'%%s member must occur at most %d times.' % max_o)
def _doc_to_object(self, ctx, cls, doc, validator=None):
if doc is None:
return []
if issubclass(cls, Any):
return doc
if issubclass(cls, Array):
retval = []
(serializer,) = cls._type_info.values()
if not isinstance(doc, AbcIterable):
raise ValidationError(doc)
for i, child in enumerate(doc):
retval.append(self._from_dict_value(ctx, i, serializer, child,
validator))
return retval
if not self.ignore_wrappers:
if not isinstance(doc, dict):
raise ValidationError("Wrapper documents must be dicts")
if len(doc) == 0:
return None
if len(doc) > 1:
raise ValidationError(doc, "There can be only one entry in a "
"wrapper dict")
def double_from_string(self, cls, string):
try:
return float(string)
except (TypeError, ValueError) as e:
raise ValidationError(string, "%%r: %r" % e)
raise ValidationError("Wrapper documents must be dicts")
if len(doc) == 0:
return None
if len(doc) > 1:
raise ValidationError(doc, "There can be only one entry in a "
"wrapper dict")
subclasses = cls.get_subclasses()
(class_name, doc), = doc.items()
if cls.get_type_name() != class_name and subclasses is not None \
and len(subclasses) > 0:
for subcls in subclasses:
if subcls.get_type_name() == class_name:
break
else:
raise ValidationError(class_name,
"Class name %%r is not registered as a subclass of %r" %
cls.get_type_name())
if not self.issubclass(subcls, cls):
raise ValidationError(class_name,
"Class name %%r is not a subclass of %r" %
cls.get_type_name())
cls = subcls
inst = cls.get_deserialization_instance()
# get all class attributes, including the ones coming from parent classes.
flat_type_info = cls.get_flat_type_info(cls)
# this is for validating cls.Attributes.{min,max}_occurs
frequencies = defaultdict(int)
@nillable_string
def any_xml_from_string(cls, string):
try:
return etree.fromstring(string)
except etree.XMLSyntaxError, e:
raise ValidationError(string, "%%r: %r" % e)
def decompose_incoming_envelope(self, ctx, message=JsonDocument.REQUEST):
indoc = ctx.in_document
if not isinstance(indoc, dict):
raise ValidationError("Invalid Request")
ver = indoc.get(self.VERSION)
if ver is None:
raise ValidationError("Unknown Version")
body = indoc.get(self.BODY)
err = indoc.get(self.FAULT)
if body is None and err is None:
raise ValidationError("Request data not found")
ctx.protocol.error = False
if err is not None:
ctx.in_body_doc = err
ctx.protocol.error = True
else:
if not isinstance(body, dict):
raise ValidationError("Request body not found")
if not len(body) == 1:
raise ValidationError("Need len(body) == 1")
ctx.in_header_doc = indoc.get(self.HEAD)
if not isinstance(ctx.in_header_doc, list):
ctx.in_header_doc = [ctx.in_header_doc]
(ctx.method_request_string,ctx.in_body_doc), = body.items()
def add(ctx, person_type, action, file):
logger.info("Person Type: %r" % person_type)
logger.info("Action: %r" % action)
path = os.path.join(os.path.abspath('./files'), file.name)
if not path.startswith(os.path.abspath('./files')):
raise ValidationError(file.name)
f = open(path, 'w') # if this fails, the client will see an
# internal error.
try:
for data in file.data:
f.write(data)
logger.debug("File written: %r" % file.name)
f.close()
except:
f.close()
os.remove(file.name)
logger.debug("File removed: %r" % file.name)