Source code for livebridge.base.posts
# -*- coding: utf-8 -*-
#
# Copyright 2016 dpa-infocom GmbH
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
class BasePost(object):
"""Base class for posts.
Every concrete implementation of this base class have to implement the \
poperties defined here. This is needed, so the specific targets do not have \
to differentiate by the post type, but rather have a unified way to access \
common properties from the resource, regardless of their source."""
__module__ = "livebridge.base"
source = ""
[docs] def __init__(self, data, *, content="", images=[]):
"""Base constructor for targets.
:param data: - dictionary of source post data
:param content: - string of convertered post content, optional
:param images: - list of iage_paths, optional"""
self.data = data
self.content = content
self.images = images
self._existing = None
self._target_id = None
self._target_doc = None
@property
def id(self):
"""Returns the id of the resource at its source."""
raise NotImplementedError("Property not implemented.")
@property
def source_id(self):
"""Returns the id of the source. For example the id of the blog polled."""
raise NotImplementedError("Property not implemented.")
@property
def created(self):
"""Returns created datetime of the resource, has to be a :py:class:`datetime.datetime` object."""
raise NotImplementedError("Property not implemented.")
@property
def updated(self):
"""Returns updated datetime of the resource, has to be a :py:class:`datetime.datetime` object."""
raise NotImplementedError("Property not implemented.")
@property
def is_update(self):
"""Returns boolean if resource is updated or not."""
raise NotImplementedError("Property not implemented.")
@property
def is_deleted(self):
"""Returns boolean if resource is deleted or not."""
raise NotImplementedError("Property not implemented.")
@property
def is_sticky(self):
"""Returns boolean if resource is sticky or not."""
raise NotImplementedError("Property not implemented.")
@property
def is_submitted(self):
"""Returns boolean if resource is in submitted state."""
raise NotImplementedError("Property not implemented.")
@property
def is_draft(self):
"""Returns boolean if resource is in drafted state."""
raise NotImplementedError("Property not implemented.")
@property
def is_known(self):
"""Returns boolean if resource is already known to livebridge."""
return bool(self._existing)
[docs] def get_action(self):
"""Returns type of action which has to be handled by the target.
Can be either **create**, **update**, **delete** or **ignore**."""
raise NotImplementedError("Method not implemented.")
@property
def target_doc(self):
"""Returns resource doc as at the target, when the posting was already created \
at the target. This property normally contains the **target_doc** data from \
the livebrigde storage item, saved in a syndication earlier.
:returns: dict"""
if not hasattr(self, "_target_doc") or not self._target_doc:
if self._existing:
self._target_doc = self._existing.get("target_doc", {})
return self._target_doc
@target_doc.setter
def target_doc(self, value):
"""Setter method for **target_doc** property."""
self._target_doc = value
@property
def target_id(self):
"""Returns the id the target, to which this post has to be syndicated.
:returns: string"""
# already set?
if self._target_id:
return self._target_id
# post already exists?
if self._existing:
self._target_id = self._existing.get("target_id")
return self._target_id
[docs] def set_existing(self, existing):
"""Takes existing doc at target.
:param existing: - dict, resource doc at target."""
self._existing = existing
[docs] def get_existing(self):
"""Returns existing resource at target.
:returns: - dict of resource"""
return self._existing