'Load document, meta, revision source, and creator.'

def load_prereqs(self, requester, storage):

    needs = []
    doc_path = (u'/%s/docs/%s' % (self.locale, self.slug))
    if (not getattr(self, u'document', None)):
        self.document = storage.get_document(self.locale, self.slug)
    if (not self.document):
        needs.append((u'document', doc_path, {}))
    meta = storage.get_document_metadata(self.locale, self.slug)
    if (meta is None):
        options = {k: v for (k, v) in self.current_options().items() if (k in DocumentBaseSource.STANDARD_DOC_OPTIONS)}
        needs.append((u'document_meta', doc_path, options))
    path = self.source_path()
    rev_source = storage.get_revision_html(path)
    if (not rev_source):
        response = requester.request(path, raise_for_status=False)
        if (response.status_code != 200):
            raise self.SourceError(u'status_code    %s', response.status_code)
        rev_source = response.content
        storage.save_revision_html(path, rev_source)
    data = self.extract_data(rev_source)
    creator_username = data.pop(u'creator')
    creator = storage.get_user(creator_username)
    if (not creator):
        needs.append((u'user', creator_username, {}))
    if self.based_on:
        (b_locale, b_slug, b_id) = self.split_path(self.based_on)
        based_rev = storage.get_revision(b_id)
        if (not based_rev):
            needs.append((u'revision', self.based_on, {}))
    if needs:
        return (False, {u'needs': needs})
    else:
        data[u'id'] = self.revision_id
        data[u'creator'] = creator
        data[u'document'] = self.document
        if (data[u'is_current'] and (data[u'slug'] != self.document.slug)):
            logger.warn(u'Current    revision    %d    has    slug    "%s".    Setting    to    document    slug    "%s".', self.revision_id, data[u'slug'], self.document.slug)
            data[u'slug'] = self.document.slug
        if data[u'is_current']:
            data[u'review_tags'] = meta.get(u'review_tags', [])
            data[u'localization_tags'] = meta.get(u'localization_tags', [])
        if self.based_on:
            data[u'based_on_id'] = based_rev.id
        return (True, data)
