MCPcopy
hub / github.com/lektor/lektor / make_editor_session

Function make_editor_session

lektor/editor.py:44–115  ·  view source on GitHub ↗

Creates an editor session for the given path object.

(pad, path, is_attachment=None, alt=PRIMARY_ALT, datamodel=None)

Source from the content-addressed store, hash-verified

42
43
44def make_editor_session(pad, path, is_attachment=None, alt=PRIMARY_ALT, datamodel=None):
45 """Creates an editor session for the given path object."""
46 if not _is_valid_path(path):
47 raise BadEdit("Invalid path")
48 path = cleanup_path(path)
49
50 if alt != PRIMARY_ALT and not pad.db.config.is_valid_alternative(alt):
51 raise BadEdit("Attempted to edit an invalid alternative (%s)" % alt)
52
53 raw_data = pad.db.load_raw_data(path, cls=OrderedDict, alt=alt, fallback=False)
54 raw_data_fallback = None
55 if alt != PRIMARY_ALT:
56 raw_data_fallback = pad.db.load_raw_data(path, cls=OrderedDict)
57 all_data = OrderedDict()
58 all_data.update(raw_data_fallback or ())
59 all_data.update(raw_data or ())
60 else:
61 all_data = raw_data
62
63 id = posixpath.basename(path)
64 if not is_valid_id(id):
65 raise BadEdit("Invalid ID")
66
67 record = None
68 exists = raw_data is not None or raw_data_fallback is not None
69 if raw_data is None:
70 raw_data = OrderedDict()
71
72 if is_attachment is None:
73 if not exists:
74 is_attachment = False
75 else:
76 is_attachment = bool(all_data.get("_attachment_for"))
77 elif bool(all_data.get("_attachment_for")) != is_attachment:
78 raise BadEdit(
79 "The attachment flag passed is conflicting with the "
80 "record's attachment flag."
81 )
82
83 if exists:
84 # XXX: what about changing the datamodel after the fact?
85 if datamodel is not None:
86 raise BadEdit(
87 "When editing an existing record, a datamodel " "must not be provided."
88 )
89 datamodel = pad.db.get_datamodel_for_raw_data(all_data, pad)
90 else:
91 if datamodel is None:
92 datamodel = pad.db.get_implied_datamodel(path, is_attachment, pad)
93 elif isinstance(datamodel, str):
94 datamodel = pad.db.datamodels[datamodel]
95
96 if exists:
97 record = pad.instance_from_data(dict(all_data), datamodel)
98
99 for key in implied_keys:
100 raw_data.pop(key, None)
101 if raw_data_fallback:

Callers 4

editMethod · 0.90
test_make_editor_sessionFunction · 0.90

Calls 13

cleanup_pathFunction · 0.90
is_valid_idFunction · 0.90
_is_valid_pathFunction · 0.85
BadEditClass · 0.85
EditorSessionClass · 0.85
is_valid_alternativeMethod · 0.80
load_raw_dataMethod · 0.80
get_implied_datamodelMethod · 0.80
instance_from_dataMethod · 0.80
updateMethod · 0.45
getMethod · 0.45