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
email
Commits
090fc60bb09b
Commit
6eacc277
authored
Jul 07, 2010
by
Sylvain Thénault
Browse files
cw 3.8/3.9 api update
parent
56dfc62f3f1c
Changes
5
Hide whitespace changes
Inline
Side-by-side
entities.py
View file @
090fc60b
...
...
@@ -10,24 +10,15 @@ import re
from
logilab.common
import
umessage
from
cubicweb.interfaces
import
ITree
from
cubicweb.mixins
import
TreeMixIn
from
cubicweb.entities
import
AnyEntity
,
fetch_config
from
cubicweb.entities
import
AnyEntity
,
fetch_config
,
adapters
from
cubicweb.selectors
import
is_instance
from
cubes.email.emailcites
import
parse_body
class
Email
(
TreeMixIn
,
AnyEntity
):
class
Email
(
AnyEntity
):
"""customized class for Email entities"""
__regid__
=
'Email'
fetch_attrs
,
fetch_order
=
fetch_config
([
'subject'
])
__implements__
=
AnyEntity
.
__implements__
+
(
ITree
,)
tree_attribute
=
'reply_to'
def
parent
(
self
):
"""for breadcrumbs"""
return
self
.
thread
def
dc_title
(
self
):
return
self
.
subject
...
...
@@ -98,6 +89,7 @@ class Email(TreeMixIn, AnyEntity):
return
umessage
.
message_from_string
(
headers
+
'
\n\n
'
)
class
EmailPart
(
AnyEntity
):
"""customized class for EmailPart entities"""
__regid__
=
'EmailPart'
...
...
@@ -131,3 +123,9 @@ class EmailThread(AnyEntity):
def
dc_title
(
self
):
return
self
.
title
class
EmailITreeAdapter
(
adapters
.
ITreeAdapter
):
__select__
=
is_instance
(
'Email'
)
tree_relation
=
'reply_to'
hooks.py
View file @
090fc60b
...
...
@@ -5,7 +5,7 @@
linking information are found
:organization: Logilab
:copyright: 2003-200
9
LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:copyright: 2003-20
1
0 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
"""
__docformat__
=
"restructuredtext en"
...
...
@@ -14,7 +14,7 @@ from logilab.mtconverter import TransformError
from
cubicweb
import
UnknownEid
,
typed_eid
from
cubicweb.mail
import
parse_message_id
from
cubicweb.selectors
import
i
mplements
from
cubicweb.selectors
import
i
s_instance
from
cubicweb.server
import
hook
...
...
@@ -23,10 +23,10 @@ def fix_ownership(session, eid, email):
if
(
sender
and
sender
.
e_schema
==
'CWUser'
and
sender
.
eid
!=
session
.
actual_session
().
user
.
eid
):
# match a user which is not the session's user, set owned_by / created_by
session
.
unsafe_
execute
(
'SET X owned_by U WHERE X eid %(x)s, U eid %(u)s'
,
{
'x'
:
eid
,
'u'
:
sender
.
eid
}
,
'x'
)
session
.
unsafe_
execute
(
'SET X created_by U WHERE X eid %(x)s, U eid %(u)s'
,
{
'x'
:
eid
,
'u'
:
sender
.
eid
}
,
'x'
)
session
.
execute
(
'SET X owned_by U WHERE X eid %(x)s, U eid %(u)s'
,
{
'x'
:
eid
,
'u'
:
sender
.
eid
})
session
.
execute
(
'SET X created_by U WHERE X eid %(x)s, U eid %(u)s'
,
{
'x'
:
eid
,
'u'
:
sender
.
eid
})
class
ExtractEmailInformation
(
hook
.
Operation
):
...
...
@@ -42,7 +42,7 @@ class ExtractEmailInformation(hook.Operation):
except
UnknownEid
:
self
.
error
(
'email %s is referencing an unknown eid %s'
,
email
.
messageid
,
origeid
)
return
return
if
origetype
in
self
.
session
.
vreg
.
schema
[
'comments'
].
objects
(
'Comment'
):
try
:
part
=
email
.
parts_in_order
(
prefered_mime_type
=
'text/plain'
)[
0
]
...
...
@@ -56,12 +56,12 @@ class ExtractEmailInformation(hook.Operation):
origeid
,
email
)
def
insert_comment
(
self
,
eid
,
emailpart
):
com
=
self
.
session
.
unsafe_
execute
(
com
=
self
.
session
.
execute
(
'INSERT Comment C: C content %(content)s, '
'C content_format %(format)s, C comments X, C generated_by E '
'WHERE X eid %(x)s, E eid %(e)s'
,
{
'x'
:
eid
,
'e'
:
self
.
email
.
eid
,
'format'
:
u
'text/plain'
,
'content'
:
emailpart
.
actual_content
()}
,
'x'
)
'content'
:
emailpart
.
actual_content
()})
fix_ownership
(
self
.
session
,
com
[
0
][
0
],
self
.
email
)
...
...
@@ -89,7 +89,7 @@ class AddEmailHook(hook.Hook):
"""an email has been added, check if associated content should be created
"""
__regid__
=
'extractmailcontent'
__select__
=
hook
.
Hook
.
__select__
&
i
mplements
(
'Email'
)
__select__
=
hook
.
Hook
.
__select__
&
i
s_instance
(
'Email'
)
events
=
(
'after_add_entity'
,)
def
__call__
(
self
):
...
...
test/test_
e
email.py
→
test/test_email.py
View file @
090fc60b
File moved
views/__init__.py
View file @
090fc60b
from
cubicweb.selectors
import
is_instance
from
cubicweb.web
import
uicfg
from
cubicweb.web.views
import
ibreadcrumbs
_pvs
=
uicfg
.
primaryview_section
_pvs
.
tag_object_of
((
'Email'
,
'in_thread'
,
'EmailThread'
),
'hidden'
)
...
...
@@ -14,3 +16,8 @@ _afs.tag_object_of(('*', 'sender', 'EmailAddress'), 'main', 'hidden')
_afs
.
tag_object_of
((
'*'
,
'recipients'
,
'EmailAddress'
),
'main'
,
'hidden'
)
_afs
.
tag_object_of
((
'*'
,
'cc'
,
'EmailAddress'
),
'main'
,
'hidden'
)
_afs
.
tag_subject_of
((
'*'
,
'generated_by'
,
'Email'
),
'main'
,
'hidden'
)
class
EmailPartIBreadCrumbsAdapter
(
ibreadcrumbs
.
IBreadCrumbsAdapter
):
__select__
=
is_instance
(
'EmailPart'
)
def
parent_entity
(
self
):
return
self
.
entity
.
thread
views/email.py
View file @
090fc60b
"""Specific views for email related entities
:organization: Logilab
:copyright: 2003-200
9
LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:copyright: 2003-20
1
0 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
"""
__docformat__
=
"restructuredtext en"
...
...
@@ -9,9 +9,8 @@ _ = unicode
from
logilab.mtconverter
import
xml_escape
from
cubicweb.selectors
import
i
mplements
from
cubicweb.selectors
import
i
s_instance
from
cubicweb.uilib
import
soup2xhtml
from
cubicweb.mixins
import
TreeViewMixIn
from
cubicweb.web
import
uicfg
,
formwidgets
from
cubicweb.web.views
import
baseviews
,
primary
...
...
@@ -38,7 +37,7 @@ def formated_sender(email):
return
email
.
_cw
.
_
(
'unknown sender'
)
class
EmailPrimaryView
(
primary
.
PrimaryView
):
__select__
=
i
mplements
(
'Email'
)
__select__
=
i
s_instance
(
'Email'
)
def
render_entity_attributes
(
self
,
entity
):
self
.
w
(
u
'<div class="emailheader"><table>'
)
...
...
@@ -75,7 +74,7 @@ class EmailPrimaryView(primary.PrimaryView):
class
EmailHeadersView
(
baseviews
.
EntityView
):
"""display email's headers"""
__regid__
=
'headers'
__select__
=
i
mplements
(
'Email'
)
__select__
=
i
s_instance
(
'Email'
)
title
=
_
(
'headers'
)
templatable
=
False
content_type
=
'text/plain'
...
...
@@ -89,7 +88,7 @@ class EmailOneLineView(baseviews.OneLineView):
"""short view usable in the context of the email sender/recipient (in which
case the caller should specify its context eid) or outside any context
"""
__select__
=
i
mplements
(
'Email'
)
__select__
=
i
s_instance
(
'Email'
)
title
=
_
(
'oneline'
)
def
cell_call
(
self
,
row
,
col
,
contexteid
=
None
):
...
...
@@ -120,25 +119,20 @@ class EmailInContextView(EmailOneLineView):
"""short view inside the context of the email"""
__regid__
=
'incontext'
class
EmailTreeItemView
(
EmailOutOfContextView
):
__regid__
=
'treeitem'
title
=
None
class
EmailPartOutOfContextView
(
baseviews
.
OutOfContextView
):
"""out of context an email part is redirecting to related email view"""
__select__
=
i
mplements
(
'EmailPart'
)
__select__
=
i
s_instance
(
'EmailPart'
)
def
cell_call
(
self
,
row
,
col
):
entity
=
self
.
cw_rset
.
get_entity
(
row
,
col
)
entity
.
reverse_parts
[
0
].
view
(
'outofcontext'
,
w
=
self
.
w
)
class
EmailThreadView
(
TreeViewMixIn
,
baseviews
.
ListView
):
"""display email's headers"""
__select__
=
implements
(
'Email'
)
title
=
_
(
'thread view'
)
item_vid
=
'outofcontext'
class
EmailThreadPrimaryView
(
primary
.
PrimaryView
):
__select__
=
i
mplements
(
'EmailThread'
)
__select__
=
i
s_instance
(
'EmailThread'
)
def
cell_call
(
self
,
row
,
col
):
entity
=
self
.
cw_rset
.
complete_entity
(
row
,
col
)
...
...
@@ -158,7 +152,7 @@ class EmailThreadPrimaryView(primary.PrimaryView):
rset
=
self
.
_cw
.
execute
(
'DISTINCT Any X,D ORDERBY D '
'WHERE X date D, X in_thread E, '
'NOT X reply_to Y, E eid %(x)s'
,
{
'x'
:
entity
.
eid
}
,
'x'
)
{
'x'
:
entity
.
eid
})
if
rset
:
self
.
w
(
u
'<ul>'
)
self
.
w
(
u
'
\n
'
.
join
(
email
.
view
(
'tree'
)
for
email
in
rset
.
entities
()))
...
...
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