Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
cubicweb
cubes
activitystream
Commits
fe416ee3cf81
Commit
33cb55af
authored
Aug 05, 2011
by
Sylvain Thénault
Browse files
propose a more flexible implementation
parent
76cb4680f2af
Changes
2
Hide whitespace changes
Inline
Side-by-side
entities.py
View file @
fe416ee3
...
...
@@ -13,30 +13,73 @@
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
"""cubicweb-astream adapters"""
"""cubicweb-astream entity's classes"""
from
cubicweb.selectors
import
is_instance
from
cubicweb.selectors
import
is_instance
,
adaptable
from
cubicweb.view
import
EntityAdapter
from
cubicweb.appobject
import
AppObject
class
IActivityStreamAdapter
(
EntityAdapter
):
__regid__
=
'IActivityStream'
@
property
def
rql
(
self
):
raise
NotImplementedError
()
def
astream_rql
(
self
):
"""return a RQL query to get the whole activity stream of the adapted
entity.
class
IActivityStreamItemA
dapte
r
(
E
ntity
Adapter
):
__regid__
=
'IActivityStreamItem'
In this query, %(x)s will refer to the eid of the a
dapte
d e
ntity
. The
returned query is expected to select:
@
property
def
content
(
self
):
raise
NotImplementedError
()
1. the eid of the activity
2. its date
3. the actor of the activity
4. some content.
and to be ordered on date (descending)
"""
rqls
=
[]
for
part
in
self
.
_cw
.
vreg
[
'astream'
].
possible_objects
(
self
.
_cw
,
entity
=
self
.
entity
):
rqls
+=
part
.
rql_parts
assert
rqls
,
'no activity stream for %s'
%
self
.
entity
if
len
(
rqls
)
>
1
:
rql
=
' UNION '
.
join
(
'(%s)'
%
rql
for
rql
in
rqls
)
else
:
rql
=
rqls
[
0
]
return
'Any X,XD,XA,XC ORDERBY XD DESC WITH X,XD,XA,XC BEING (%s)'
%
rql
class
ActivityStreamPart
(
AppObject
):
__registry__
=
'astream'
@
property
def
date
(
self
):
raise
NotImplementedError
()
def
rql_parts
(
self
):
"""return a list of RQL queries to get some path of the activity stream
of the adapted entity.
In each query, %(x)s will refer to the eid of the adapted entity. The
returned query is expected to select:
1. the eid of the activity
2. its date
3. the actor of the activity
4. some content.
class
AnyAStreamItemAdapter
(
IActivityStreamItemAdapter
):
and should not be ordered.
"""
raise
NotImplementedError
class
StatefulAStreamPart
(
ActivityStreamPart
):
__select__
=
adaptable
(
'IWorkflowable'
)
__regid__
=
'stateful'
rql_parts
=
(
'Any TI,TICD,U,TIC WHERE TI is TrInfo, TI wf_info_for X, X eid %(x)s,'
'TI creation_date TICD, TI created_by U?, TI comment TIC'
,)
class
IActivityStreamItemAdapter
(
EntityAdapter
):
__regid__
=
'IActivityStreamItem'
__select__
=
is_instance
(
'Any'
)
@
property
...
...
@@ -47,7 +90,12 @@ class AnyAStreamItemAdapter(IActivityStreamItemAdapter):
def
date
(
self
):
return
self
.
entity
.
creation_date
class
TrinfoAStreamItemAdapter
(
AnyAStreamItemAdapter
):
@
property
def
actor
(
self
):
return
self
.
entity
.
dc_creator
()
class
TrinfoAStreamItemAdapter
(
IActivityStreamItemAdapter
):
__select__
=
is_instance
(
'TrInfo'
)
@
property
...
...
views.py
View file @
fe416ee3
...
...
@@ -4,14 +4,16 @@ from cubicweb.view import EntityView
class
AStreamView
(
EntityView
):
__regid__
=
'activitystream'
__select__
=
EntityView
.
__select__
&
adaptable
(
'IActivityStream'
)
title
=
_
(
'activitystream'
)
def
cell_call
(
self
,
row
,
col
):
entity
=
self
.
cw_rset
.
get_entity
(
row
,
col
)
rset
=
self
.
_cw
.
execute
(
entity
.
cw_adapt_to
(
'IActivityStream'
).
rql
,
rset
=
self
.
_cw
.
execute
(
entity
.
cw_adapt_to
(
'IActivityStream'
).
astream_
rql
,
dict
(
x
=
entity
.
eid
))
self
.
paginate
(
rset
=
rset
)
self
.
wview
(
'activitystream_item'
,
rset
,
'null'
)
class
AStreamItemView
(
EntityView
):
__regid__
=
'activitystream_item'
__select__
=
EntityView
.
__select__
&
adaptable
(
'IActivityStreamItem'
)
...
...
@@ -19,13 +21,11 @@ class AStreamItemView(EntityView):
def
cell_call
(
self
,
row
,
col
):
self
.
_cw
.
add_css
(
'cubes.astream.css'
)
entity
=
self
.
cw_rset
.
get_entity
(
row
,
col
)
ablock
=
entity
.
dc_creator
()
activity
=
entity
.
cw_adapt_to
(
'IActivityStreamItem'
)
self
.
w
(
u
'<div class="activitystream">'
u
'<span class="author">%s</span>'
u
'<span class="msgtxt">%s</span>'
u
'<span class="meta"><a href="%s">%s</a></span>'
u
'</div>'
%
(
ablock
,
activity
.
content
,
entity
.
absolute_url
(),
activity
.
date
))
u
'</div>'
%
(
activity
.
actor
,
activity
.
content
,
entity
.
absolute_url
(),
self
.
_cw
.
format_date
(
activity
.
date
,
time
=
True
)))
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment