if provider is None: continue if not provider.available(): continue item_ids = [] for item in provider.provide(): id = str(item.id) item_ids.append(id) content_item = db.query(ContentItem).filter_by(type=type, type_key=id).first() if content_item is None: content_item = ContentItem() content_item.type = type content_item.type_key = id content_item.started_at = item.started_at content_item.created_at = item.created_at content_item.permissions = content_types[type].get("permissions", 0) content_item.data = item.data for kv_directory in item.kv: kv = item.kv[kv_directory] for k, v in kv() if callable(kv) else kv: if k not in kv_storage[kv_directory]: kv_storage[kv_directory][k] = v() if callable(v) else v db.add(content_item) db.flush() provider.on_item_inserted(content_item) db.flush()