def make_editor_session(pad, path, is_attachment=None, alt=PRIMARY_ALT, datamodel=None): """Creates an editor session for the given path object.""" if alt != PRIMARY_ALT and not pad.db.config.is_valid_alternative(alt): raise BadEdit('Attempted to edit an invalid alternative (%s)' % alt) raw_data = pad.db.load_raw_data(path, cls=OrderedDict, alt=alt, fallback=False) raw_data_fallback = None if alt != PRIMARY_ALT: raw_data_fallback = pad.db.load_raw_data(path, cls=OrderedDict) all_data = OrderedDict() all_data.update(raw_data_fallback or ()) all_data.update(raw_data or ()) else: all_data = raw_data id = posixpath.basename(path) if not is_valid_id(id): raise BadEdit('Invalid ID') record = None exists = all_data is not None if raw_data is None: raw_data = OrderedDict() if is_attachment is None: if not exists: is_attachment = False else: is_attachment = bool(all_data.get('_attachment_for')) elif bool(all_data.get('_attachment_for')) != is_attachment: raise BadEdit('The attachment flag passed is conflicting with the ' 'record\'s attachment flag.') if exists: # XXX: what about changing the datamodel after the fact? if datamodel is not None: raise BadEdit('When editing an existing record, a datamodel ' 'must not be provided.') datamodel = pad.db.get_datamodel_for_raw_data(all_data, pad) else: if datamodel is None: datamodel = pad.db.get_implied_datamodel(path, is_attachment, pad) elif isinstance(datamodel, six.string_types): datamodel = pad.db.datamodels[datamodel] if exists: record = pad.instance_from_data(dict(all_data), datamodel) for key in implied_keys: raw_data.pop(key, None) if raw_data_fallback: raw_data_fallback.pop(key, None) return EditorSession(pad, id, six.text_type(path), raw_data, raw_data_fallback, datamodel, record, exists, is_attachment, alt)
def make_editor_session(pad, path, is_attachment=None, alt=PRIMARY_ALT, datamodel=None): """Creates an editor session for the given path object.""" if alt != PRIMARY_ALT and not pad.db.config.is_valid_alternative(alt): raise BadEdit('Attempted to edit an invalid alternative (%s)' % alt) raw_data = pad.db.load_raw_data(path, cls=OrderedDict, alt=alt) id = posixpath.basename(path) if not is_valid_id(id): raise BadEdit('Invalid ID') record = None exists = raw_data is not None if raw_data is None: raw_data = OrderedDict() if is_attachment is None: if not exists: is_attachment = False else: is_attachment = bool(raw_data.get('_attachment_for')) elif bool(raw_data.get('_attachment_for')) != is_attachment: raise BadEdit('The attachment flag passed is conflicting with the ' 'record\'s attachment flag.') if exists: # XXX: what about changing the datamodel after the fact? if datamodel is not None: raise BadEdit('When editing an existing record, a datamodel ' 'must not be provided.') datamodel = pad.db.get_datamodel_for_raw_data(raw_data, pad) else: if datamodel is None: datamodel = pad.db.get_implied_datamodel(path, is_attachment, pad) elif isinstance(datamodel, basestring): datamodel = pad.db.datamodels[datamodel] if exists: record = pad.instance_from_data(dict(raw_data), datamodel) for key in implied_keys: raw_data.pop(key, None) return EditorSession(pad, id, unicode(path), raw_data, datamodel, record, exists, is_attachment, alt)
def add_new_record(): values = request.get_json() exists = False if not is_valid_id(values['id']): return jsonify(valid_id=False, exists=False, path=None) path = posixpath.join(values['path'], values['id']) ts = g.admin_context.pad.edit(path, datamodel=values.get('model')) with ts: if ts.exists: exists = True else: ts.update(values.get('data') or {}) return jsonify({'valid_id': True, 'exists': exists, 'path': path})
def add_new_record(): values = request.get_json() alt = values.get("alt") or PRIMARY_ALT exists = False if not is_valid_id(values["id"]): return jsonify(valid_id=False, exists=False, path=None) path = posixpath.join(values["path"], values["id"]) ts = g.admin_context.tree.edit(path, datamodel=values.get("model"), alt=alt) with ts: if ts.exists: exists = True else: ts.update(values.get("data") or {}) return jsonify({"valid_id": True, "exists": exists, "path": path})
def make_editor_session(pad, path, is_attachment=None, datamodel=None): """Creates an editor session for the given path object.""" raw_data = pad.db.load_raw_data(path, cls=OrderedDict) id = posixpath.basename(path) if not is_valid_id(id): raise BadEdit('Invalid ID') record = None exists = raw_data is not None if raw_data is None: raw_data = OrderedDict() if is_attachment is None: if not exists: is_attachment = False else: is_attachment = bool(raw_data.get('_attachment_for')) elif bool(raw_data.get('_attachment_for')) != is_attachment: raise BadEdit('The attachment flag passed is conflicting with the ' 'record\'s attachment flag.') if exists: # XXX: what about changing the datamodel after the fact? if datamodel is not None: raise BadEdit('When editing an existing record, a datamodel ' 'must not be provided.') datamodel = pad.db.get_datamodel_for_raw_data(raw_data, pad) else: if datamodel is None: datamodel = pad.db.get_implied_datamodel(path, is_attachment, pad) elif isinstance(datamodel, basestring): datamodel = pad.db.datamodels[datamodel] if exists: record = pad.instance_from_data(dict(raw_data), datamodel) for key in implied_keys: raw_data.pop(key, None) return EditorSession(pad, id, unicode(path), raw_data, datamodel, record, exists, is_attachment)
def add_new_record(): values = request.get_json() exists = False if not is_valid_id(values['id']): return jsonify(valid_id=False, exists=False, path=None) path = posixpath.join(values['path'], values['id']) ts = g.admin_context.pad.edit(path, datamodel=values.get('model')) with ts: if ts.exists: exists = True else: ts.update(values.get('data') or {}) return jsonify({ 'valid_id': True, 'exists': exists, 'path': path })
def make_editor_session(pad, path, is_attachment=None, alt=PRIMARY_ALT, datamodel=None): """Creates an editor session for the given path object.""" if alt != PRIMARY_ALT and not pad.db.config.is_valid_alternative(alt): raise BadEdit("Attempted to edit an invalid alternative (%s)" % alt) raw_data = pad.db.load_raw_data(path, cls=OrderedDict, alt=alt, fallback=False) raw_data_fallback = None if alt != PRIMARY_ALT: raw_data_fallback = pad.db.load_raw_data(path, cls=OrderedDict) all_data = OrderedDict() all_data.update(raw_data_fallback or ()) all_data.update(raw_data or ()) else: all_data = raw_data id = posixpath.basename(path) if not is_valid_id(id): raise BadEdit("Invalid ID") record = None exists = all_data is not None if raw_data is None: raw_data = OrderedDict() if is_attachment is None: if not exists: is_attachment = False else: is_attachment = bool(all_data.get("_attachment_for")) elif bool(all_data.get("_attachment_for")) != is_attachment: raise BadEdit("The attachment flag passed is conflicting with the " "record's attachment flag.") if exists: # XXX: what about changing the datamodel after the fact? if datamodel is not None: raise BadEdit("When editing an existing record, a datamodel " "must not be provided.") datamodel = pad.db.get_datamodel_for_raw_data(all_data, pad) else: if datamodel is None: datamodel = pad.db.get_implied_datamodel(path, is_attachment, pad) elif isinstance(datamodel, string_types): datamodel = pad.db.datamodels[datamodel] if exists: record = pad.instance_from_data(dict(all_data), datamodel) for key in implied_keys: raw_data.pop(key, None) if raw_data_fallback: raw_data_fallback.pop(key, None) return EditorSession( pad, id, text_type(path), raw_data, raw_data_fallback, datamodel, record, exists, is_attachment, alt, )