code: def save_post(self, title, text, user_id, tags, draft=False,
                    post_date=None, last_modified_date=None, meta_data=None,
                    post_id=None):
          
          raise NotImplementedError("This method needs to be implemented by "
                                    "the inheriting class")
docs: Persist the blog post data. If ``post_id`` is ``None`` or ``post_id``
          is invalid, the post must be inserted into the storage. If ``post_id``
          is a valid id, then the data must be updated.
  
          :param title: The title of the blog post
          :type title: str
          :param text: The text of the blog post
          :type text: str
          :param user_id: The user identifier
          :type user_id: str
          :param tags: A list of tags
          :type tags: list
          :param draft: If the post is a draft of if needs to be published.
          :type draft: bool
          :param post_date: (Optional) The date the blog was posted (default
           datetime.datetime.utcnow())
          :type post_date: datetime.datetime
          :param last_modified_date: (Optional) The date when blog was last
           modified  (default datetime.datetime.utcnow())
          :type last_modified_date: datetime.datetime
          :param meta_data: The meta data for the blog post
          :type meta_data: dict
          :param post_id: The post identifier. This should be ``None`` for an
           insert call, and a valid value for update.
          :type post_id: int
  
          :return: The post_id value, in case of a successful insert or update.
          Return ``None`` if there were errors.