Esempio n. 1
0
def save_site(data):
    """Create or update an site content type"""

    content_type = content_type_check_and_load("Site Content Type")

    if data["hidden_node_id"] and data["hidden_node_version"]:  # Assume update
        existing_content = load_and_revise(data["hidden_node_id"], SiteRevision)
        update_object_hash_and_save(existing_content, data)

        return existing_content

    else:  # Assume new site
        node = _register_node()

        site = Site(
            _version=1,
            _node_id=node._id,
            _lock="",
            site_name=data["site_name"],
            environment_name=data["environment_name"],
            local_build_dir=data["local_build_dir"],
            static_files_dir=data["static_files_dir"],
            hosting_type=data["hosting_type"],
            index_content=data["index_content"],
            menu_content=data["menu_content"],
            groups_content=data["groups_content"],
        )
        # First save get's our article ID to include in the hash
        #!!! <- being first save
        db.session.add(site)
        db.session.commit()
        db.session.refresh(site)
        #!!! -> end first saved
        ### reuse hash and save here
        site._hash = _hash_table(site)  # Hash after getting id
        site._hash_chain = _hash_table(site, chain=True)
        db.session.add(site)
        db.session.commit()
        db.session.refresh(site)

        content_obj = _associate_node(node, site, content_type)

        return content_obj