def validate_serial(req_data): """Verify serial in data validates Args: req_data (dict): request with serial and possibly models """ if req_data.get('version') != SCHEMA_COMMON.version: raise util.SRException('serverUpgraded', None) with _global_lock: sim_type = sirepo.template.assert_sim_type(req_data.simulationType) sid = req_data.models.simulation.simulationId req_ser = req_data.models.simulation.simulationSerial curr = read_simulation_json(sim_type, sid=sid) curr_ser = curr.models.simulation.simulationSerial if not req_ser is None: if req_ser == curr_ser: return status = 'newer' if req_ser > curr_ser else 'older' raise util.Error( PKDict( sim_type=sim_type, error='invalidSerial', simulationData=req_data, ), '{}: incoming serial {} than stored serial={} sid={}, resetting client', req_ser, status, curr_ser, sid, )
def api_updateFolder(): #TODO(robnagler) Folder should have a serial, or should it be on data req = http_request.parse_post() o = srschema.parse_folder(req.req_data['oldName']) if o == '/': raise util.Error('cannot rename root ("/") folder') n = srschema.parse_folder(req.req_data['newName']) if n == '/': raise util.Error('cannot folder to root ("/")') for r in simulation_db.iterate_simulation_datafiles( req.type, _simulation_data_iterator): f = r.models.simulation.folder l = o.lower() if f.lower() == o.lower(): r.models.simulation.folder = n elif f.lower().startswith(o.lower() + '/'): r.models.simulation.folder = n + f[len():] else: continue simulation_db.save_simulation_json(r) return http_reply.gen_json_ok()
def parse_folder(folder): """Verifies syntax of folder is correct Args: folder (str): what to validate Returns: str: cleaned up folder name """ if folder is None or len(folder) == 0: raise util.Error('blank folder') res = [] for f in folder.split('/'): if len(f): res.append(parse_name(f)) return '/' + '/'.join(res)
def parse_name(name): """Verifies syntax of simulation is correct Args: folder (str): what to validate Returns: str: cleaned up folder name """ if name is None: name = '' else: # ignore leading and trailing spaces name = name.strip() if len(name) == 0: raise util.Error('blank name') if not _NAME_ILLEGALS_RE.search(name): raise util.Error( '"{}" contains an illegal character (one of "{}"'.format( name, _NAME_ILLEGALS), ) if name.startswith('.'): raise util.Error('"{}" may not start with a dot (".")'.format(name), ) if name.endswith('.'): raise util.Error('"{}" may not end with a dot (".")'.format(name), ) return name
def parse_name(name): """Verifies syntax of simulation is correct Args: folder (str): what to validate Returns: str: cleaned up folder name """ if name is None: name = '' else: # ignore leading and trailing spaces name = name.strip() # don't raise an error on invalid name - the client is not looking for them # instead, remove illegal characters and throw an error if nothing is left name = re.sub(_NAME_ILLEGALS_RE, '', name) name = re.sub(_NAME_ILLEGAL_PERIOD, '', name) if len(name) == 0: raise util.Error('blank name') return name