Author: zagy
Date: Wed Nov 5 10:52:49 2008
New Revision: 6983
Log:
eggification of CMFWebmail to gocept.webmail.
not all files are in the right place, yet. stay tuned.
Added:
CMFWebmail/trunk/gocept/
CMFWebmail/trunk/gocept/__init__.py (contents, props changed)
CMFWebmail/trunk/gocept/webmail/ (props changed)
- copied from r6981, CMFWebmail/trunk/products/CMFWebmail/
CMFWebmail/trunk/gocept/webmail/README.js
- copied unchanged from r6982,
CMFWebmail/trunk/products/CMFWebmail/README.js
CMFWebmail/trunk/gocept/webmail/README.txt
- copied, changed from r6982,
CMFWebmail/trunk/products/CMFWebmail/README.txt
CMFWebmail/trunk/setup.py (contents, props changed)
Removed:
CMFWebmail/trunk/gocept/webmail/profiles/default/skins.xml
CMFWebmail/trunk/gocept/webmail/profiles/default/viewlets.xml
CMFWebmail/trunk/products/CMFWebmail/
Modified:
CMFWebmail/trunk/buildout.cfg
CMFWebmail/trunk/gocept/webmail/__init__.py
CMFWebmail/trunk/gocept/webmail/browser/configure.zcml
CMFWebmail/trunk/gocept/webmail/browser/profile.pt
CMFWebmail/trunk/gocept/webmail/configure.zcml
CMFWebmail/trunk/gocept/webmail/profiles/default/rolemap.xml
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer-main.js
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer.js
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/management.pt
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/webmail_composer.pt
CMFWebmail/trunk/gocept/webmail/tests.py
CMFWebmail/trunk/gocept/webmail/webmailer.py
CMFWebmail/trunk/gocept/webmail/xmlcompare.txt
Modified: CMFWebmail/trunk/buildout.cfg
==============================================================================
--- CMFWebmail/trunk/buildout.cfg (original)
+++ CMFWebmail/trunk/buildout.cfg Wed Nov 5 10:52:49 2008
(at)(at) -25,12 +25,13 (at)(at)
eggs =
gocept.imapapi
gocept.restmail
+ gocept.webmail
lxml
zc.testbrowser
# Reference any eggs you are developing here, one per line
# e.g.: develop = src/my.package
-develop =
+develop = .
versions = versions
(at)(at) -81,10 +82,9 (at)(at)
# e.g. zcml = my.package my.other.package
zcml =
gocept.restmail
+ gocept.webmail
-products =
- ${buildout:directory}/products
- ${productdistros:location}
+products = ${productdistros:location}
[zopepy]
recipe = zc.recipe.egg
(at)(at) -164,14 +164,16 (at)(at)
[fakezope2eggs]
recipe = affinitic.recipe.fakezope2eggs
-additional-fake-eggs =
- ZODB3
- mechanize
- ClientForm
+additional-fake-eggs =
+ ZODB3
+ mechanize
+ ClientForm
[test]
recipe = collective.recipe.z2testrunner
-packages = gocept.imapapi
+packages =
+ gocept.imapapi
gocept.restmail
- Products.CMFWebmail
+ gocept.webmail
+extra-paths = .
zope2part = instance
Added: CMFWebmail/trunk/gocept/__init__.py
==============================================================================
--- (empty file)
+++ CMFWebmail/trunk/gocept/__init__.py Wed Nov 5 10:52:49 2008
(at)(at) -0,0 +1,8 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+#namespace package boilerplate
+try:
+ __import__('pkg_resources').declare_namespace(__name__)
+except ImportError, e:
+ from pkgutil import extend_path
+ __path__ = extend_path(__path__, __name__)
Copied: CMFWebmail/trunk/gocept/webmail/README.txt (from r6982,
CMFWebmail/trunk/products/CMFWebmail/README.txt)
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/README.txt (original)
+++ CMFWebmail/trunk/gocept/webmail/README.txt Wed Nov 5 10:52:49 2008
(at)(at) -1,6 +1,6 (at)(at)
-===================
-Products.CMFWebmail
-===================
+==============
+gocept.webmail
+==============
This product is a CMF extension that provides a Web-2.0-y user interface to
read and write email using the RESTful interface provided by gocept.restmail.
(at)(at) -9,6 +9,7 (at)(at)
running[#setup]_:
>>> browser.js.open_tab()
+>>> time.sleep(0.1)
>>> browser.open('/webmail')
>>> browser.getLink('Join').click()
>>> time.sleep(0.5)
(at)(at) -22,6 +23,7 (at)(at)
short-cut for logging into that account:
>>> wait_for_text('Return to homepage')
+>>> time.sleep(0.5)
>>> browser.getControl(name='login').click()
Accessing the profile
(at)(at) -455,15 +457,13 (at)(at)
>>> import sys
>>> def wait_for_text(string):
... print >> sys.stderr, string
- ... found = False
... for i in xrange(100):
... if string in browser.contents:
- ... found = True
... break
... sys.stderr.write('.')
... sys.stderr.flush()
... time.sleep(0.1)
- ... if not found:
+ ... else:
... print >> sys.stderr, 'Did not find', string
Define a helper function to expand/collapse entries in the mail folder
Modified: CMFWebmail/trunk/gocept/webmail/__init__.py
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/__init__.py (original)
+++ CMFWebmail/trunk/gocept/webmail/__init__.py Wed Nov 5 10:52:49 2008
(at)(at) -1,26 +1,22 (at)(at)
import os.path
-import Products.CMFCore.DirectoryView
import Products.CMFSetup
import Products.CMFSetup.interfaces
-Products.CMFCore.DirectoryView.registerDirectory('skins', globals())
-
def initialize(context):
- import Products.CMFWebmail.webmailer
+ import gocept.webmail.webmailer
context.registerClass(
- Products.CMFWebmail.webmailer.Webmailer,
+ gocept.webmail.webmailer.Webmailer,
meta_type='Webmailer',
constructors=(
- Products.CMFWebmail.webmailer.manage_addWebmailerForm,
- Products.CMFWebmail.webmailer.manage_addWebmailer),
+ gocept.webmail.webmailer.manage_addWebmailerForm,
+ gocept.webmail.webmailer.manage_addWebmailer),
)
Products.CMFSetup.profile_registry.registerProfile(
- name='default', title='cmfwebmail', description='',
- product='CMFWebmail',
- path='profiles/default',
+ name='gocept.webmail', title='gocept.webmail', description='',
+ path=os.path.join(os.path.dirname(__file__), 'profiles', 'default'),
profile_type=Products.CMFSetup.interfaces.EXTENSION)
Modified: CMFWebmail/trunk/gocept/webmail/browser/configure.zcml
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/browser/configure.zcml (original)
+++ CMFWebmail/trunk/gocept/webmail/browser/configure.zcml Wed Nov 5 10:52:49
2008
(at)(at) -2,10 +2,10 (at)(at)
xmlns:browser="http://namespaces.zope.org/browser">
<browser:page
- for="..webmailer.Webmailer"
+ for="..interfaces.IWebmailer"
name="index_html"
class=".webmailer.RedirectToProfile"
- permission="CMFWebmail.View"
+ permission="gocept.webmail.View"
/>
<browser:page
(at)(at) -13,8 +13,27 (at)(at)
name="index_html"
class=".profile.Profile"
template="profile.pt"
- permission="CMFWebmail.View"
+ permission="gocept.webmail.View"
/>
+ <browser:page
+ for="gocept.restmail.interfaces.IProfile"
+ name="management"
+ template="../skins/cmfwebmail_templates/management.pt"
+ permission="gocept.webmail.View"
+ />
+
+ <browser:page
+ for="gocept.restmail.interfaces.IDraftMessage"
+ name="webmail_composer"
+ template="../skins/cmfwebmail_templates/webmail_composer.pt"
+ permission="gocept.webmail.View"
+ />
+
+ <browser:resourceDirectory
+ name="gocept.webmail"
+ directory="../skins"/>
+
+
</configure>
Modified: CMFWebmail/trunk/gocept/webmail/browser/profile.pt
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/browser/profile.pt (original)
+++ CMFWebmail/trunk/gocept/webmail/browser/profile.pt Wed Nov 5 10:52:49 2008
(at)(at) -3,12 +3,13 (at)(at)
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="webmailer">
<head
- tal:define="yui_base_url context/yui/build/absolute_url">
+ tal:define="webmailer nocall:context/(at)(at)webmailer;
+ yui_base_url
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_yui/yui/build">
<title>Portal</title>
<script type="text/javascript" tal:content="string:
var yui_base_url = '$yui_base_url';
- var app_base_url = '${context/portal_url}';
+ var app_base_url =
'${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript';
var profile_url = '${context/absolute_url}';
var banner_url = '${view/banner_url}';">
</script>
(at)(at) -17,14 +18,14 (at)(at)
tal:attributes="src
string:$yui_base_url/yuiloader/yuiloader-beta-min.js">
</script>
<script type="text/javascript" src="utilities.js"
- tal:attributes="src context/utilities.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/utilities.js">
</script>
<script type="text/javascript" src="webmailer-main.js"
- tal:attributes="src context/webmailer-main.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/webmailer-main.js">
</script>
<link rel="stylesheet" type="text/css"
- tal:attributes="href context/webmail.css/absolute_url"/>
+ tal:attributes="href
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_styles/webmail.css"/>
</head>
Modified: CMFWebmail/trunk/gocept/webmail/configure.zcml
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/configure.zcml (original)
+++ CMFWebmail/trunk/gocept/webmail/configure.zcml Wed Nov 5 10:52:49 2008
(at)(at) -1,11 +1,27 (at)(at)
<configure xmlns="http://namespaces.zope.org/zope"
- xmlns:five="http://namespaces.zope.org/five">
+ xmlns:five="http://namespaces.zope.org/five"
+ xmlns:browser="http://namespaces.zope.org/browser">
+ <five:registerPackage package="." initialize=".initialize" />
<five:traversable class=".webmailer.Webmailer" />
- <permission id="CMFWebmail.View"
- title="View CMFWebmail content" />
+ <permission id="gocept.webmail.View"
+ title="View gocept.webmail content" />
<include package=".browser" />
+ <view
+ for="*"
+ name="webmailer"
+ type="*"
+ factory=".webmailer.get_webmailer"
+ />
+
+ <view
+ for="*"
+ name="profile"
+ type="*"
+ factory=".webmailer.get_profile"
+ />
+
</configure>
Modified: CMFWebmail/trunk/gocept/webmail/profiles/default/rolemap.xml
==============================================================================
---
CMFWebmail/trunk/products/CMFWebmail/profiles/default/rolemap.xml (original)
+++ CMFWebmail/trunk/gocept/webmail/profiles/default/rolemap.xml Wed Nov 5
10:52:49 2008
(at)(at) -4,7 +4,7 (at)(at)
<role name="Authenticated"/>
</roles>
<permissions>
- <permission name="View CMFWebmail content"
+ <permission name="View gocept.webmail content"
acquire="True">
<role name="Authenticated"/>
</permission>
Modified:
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer-main.js
==============================================================================
---
CMFWebmail/trunk/products/CMFWebmail/skins/cmfwebmail_javascript/composer-main.js (original)
+++
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer-main.js Wed
Nov 5 10:52:49 2008
(at)(at) -18,8 +18,10 (at)(at)
units: [{ position: 'center',
body: 'composer', gutter: '10'}]});
app.layout.on('render', function() {
- app.units.composer =
app.layout.getUnitByPosition('center').body;
- app.composer = new YAHOO.gocept.webmailer.Composer(draft_url,
profile_url);
+ app.units.composer = app.layout.getUnitByPosition(
+ 'center').body;
+ app.composer = new YAHOO.gocept.webmailer.Composer(
+ draft_url, profile_url);
});
app.layout.render();
},
Modified:
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer.js
==============================================================================
---
CMFWebmail/trunk/products/CMFWebmail/skins/cmfwebmail_javascript/composer.js (original)
+++ CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_javascript/composer.js Wed
Nov 5 10:52:49 2008
(at)(at) -100,7 +100,8 (at)(at)
// Initialize the rich text editor for the body.
composer.editor = new YAHOO.widget.SimpleEditor(
- composer.getControl('Body').id, {css: '(at)import
url(editor.css);'});
+ composer.getControl('Body').id, {
+ css: '(at)import url(' + editor_style_url + ');'});
composer.editor._defaultToolbar.titlebar = false;
composer.editor.on('editorKeyPress', composer.handleEditorKey,
composer, true);
composer.editor.on('editorContentLoaded', function() {
Modified:
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/management.pt
==============================================================================
---
CMFWebmail/trunk/products/CMFWebmail/skins/cmfwebmail_templates/management.pt (original)
+++
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/management.pt Wed
Nov 5 10:52:49 2008
(at)(at) -3,27 +3,29 (at)(at)
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="webmailer">
<head
- tal:define="yui_base_url context/yui/build/absolute_url">
+ tal:define="webmailer nocall:context/(at)(at)webmailer;
+ yui_base_url
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_yui/yui/build">
<title>Manage accounts</title>
<script type="text/javascript" tal:content="string:
var yui_base_url = '$yui_base_url';
- var app_base_url = '${context/portal_url}';">
+ var app_base_url =
+ '${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript';">
</script>
<script type="text/javascript"
tal:attributes="src
string:$yui_base_url/yuiloader/yuiloader-beta-min.js">
</script>
<script type="text/javascript" src="utilities.js"
- tal:attributes="src context/utilities.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/utilities.js">
</script>
+
<script type="text/javascript" src="management-main.js"
- tal:attributes="src context/management-main.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/management-main.js">
</script>
<link rel="stylesheet" type="text/css"
- tal:attributes="href context/webmail.css/absolute_url"/>
-
+ tal:attributes="href
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_styles/webmail.css"/>
</head>
<body class="yui-skin-sam">
Modified:
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/webmail_composer.pt
==============================================================================
---
CMFWebmail/trunk/products/CMFWebmail/skins/cmfwebmail_templates/webmail_composer.pt (original)
+++
CMFWebmail/trunk/gocept/webmail/skins/cmfwebmail_templates/webmail_composer.pt Wed
Nov 5 10:52:49 2008
(at)(at) -3,28 +3,30 (at)(at)
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html class="webmailer">
<head
- tal:define="yui_base_url context/yui/build/absolute_url">
+ tal:define="webmailer nocall:context/(at)(at)webmailer;
+ yui_base_url
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_yui/yui/build">
<title>Compose message</title>
<script type="text/javascript" tal:content="string:
var yui_base_url = '$yui_base_url';
- var app_base_url = '${context/portal_url}';
+ var app_base_url =
'${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript';
+ var profile_url = '${context/(at)(at)profile/absolute_url}';
var draft_url = '${context/absolute_url}';
- var profile_url =
'${context/aq_parent/aq_parent/(at)(at)absolute_url}';">
+ var editor_style_url =
'${webmailer/++resource++gocept.webmail}/cmfwebmail_styles/editor.css';
+ ">
</script>
-
<script type="text/javascript"
tal:attributes="src
string:$yui_base_url/yuiloader/yuiloader-beta-min.js">
</script>
<script type="text/javascript" src="utilities.js"
- tal:attributes="src context/utilities.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/utilities.js">
</script>
<script type="text/javascript" src="composer-main.js"
- tal:attributes="src context/composer-main.js/absolute_url">
+ tal:attributes="src
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_javascript/composer-main.js">
</script>
<link rel="stylesheet" type="text/css"
- tal:attributes="href context/webmail.css/absolute_url"/>
+ tal:attributes="href
string:${webmailer/++resource++gocept.webmail}/cmfwebmail_styles/webmail.css"/>
</head>
Modified: CMFWebmail/trunk/gocept/webmail/tests.py
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/tests.py (original)
+++ CMFWebmail/trunk/gocept/webmail/tests.py Wed Nov 5 10:52:49 2008
(at)(at) -14,7 +14,7 (at)(at)
import AccessControl.SecurityManagement
import gocept.restmail.tests
-import Products.CMFWebmail.webmailer
+import gocept.webmail.webmailer
checker = renormalizing.RENormalizing([
(at)(at) -34,13 +34,13 (at)(at)
# add a CMF Site with the CMFWebmail product
addConfiguredSite(app, 'webmail', 'CMFDefault:default',
- extension_ids=('CMFWebmail:default', ))
+ extension_ids=('other:gocept.webmail', ))
cmfsite = test.app['webmail']
# Add a webmail profile to the site
cmfsite._setObject(
'mail',
- Products.CMFWebmail.webmailer.Webmailer('mail'))
+ gocept.webmail.webmailer.Webmailer('mail'))
def tearDown(test):
(at)(at) -49,21 +49,26 (at)(at)
pass
+flags = (doctest.ELLIPSIS + doctest.REPORT_NDIFF +
+ doctest.NORMALIZE_WHITESPACE + doctest.INTERPRET_FOOTNOTES)
+
+
def test_suite():
suite = unittest.TestSuite()
+ suite.addTest(doctest.DocFileSuite(
+ 'xmlcompare.txt',
+ optionflags=flags))
suite.addTest(gocept.restmail.tests.FunctionalDocFileSuite(
- 'README.txt', 'xmlcompare.txt',
+ 'README.txt',
globs=dict(Browser=zc.testbrowser.real.Browser),
- optionflags=(
- doctest.ELLIPSIS + doctest.REPORT_NDIFF +
- doctest.NORMALIZE_WHITESPACE + doctest.INTERPRET_FOOTNOTES),
+ optionflags=flags,
checker=checker,
- products=['CMFWebmail',
- 'ZCTextIndex',
- 'CMFCore',
- 'CMFDefault',
- 'CMFSetup',
- 'MailHost'],
+ products=[
+ 'CMFCore',
+ 'CMFDefault',
+ 'CMFSetup',
+ 'ZCTextIndex',
+ ],
setUp=setUp,
tearDown=tearDown))
return suite
Modified: CMFWebmail/trunk/gocept/webmail/webmailer.py
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/webmailer.py (original)
+++ CMFWebmail/trunk/gocept/webmail/webmailer.py Wed Nov 5 10:52:49 2008
(at)(at) -5,14 +5,15 (at)(at)
import Products.BTreeFolder2.BTreeFolder2
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-import Products.CMFWebmail.interfaces
+import gocept.restmail.interfaces
+import gocept.webmail.interfaces
class Webmailer(Products.BTreeFolder2.BTreeFolder2.BTreeFolder2):
"""Webmailer base object, containing the profiles.
"""
- zope.interface.implements(Products.CMFWebmail.interfaces.IWebmailer)
+ zope.interface.implements(gocept.webmail.interfaces.IWebmailer)
_properties = (dict(id='banner_url', type='string', mode='w'),)
(at)(at) -30,3 +31,17 (at)(at)
webmailer = container[id]
context.REQUEST.RESPONSE.redirect(
webmailer.absolute_url() + '/manage_workspace')
+
+
+def get_webmailer(context, request):
+ candidate = context
+ while not gocept.webmail.interfaces.IWebmailer.providedBy(candidate):
+ candidate = candidate.getParentNode()
+ return candidate
+
+
+def get_profile(context, request):
+ candidate = context
+ while not gocept.restmail.interfaces.IProfile.providedBy(candidate):
+ candidate = candidate.getParentNode()
+ return candidate
Modified: CMFWebmail/trunk/gocept/webmail/xmlcompare.txt
==============================================================================
--- CMFWebmail/trunk/products/CMFWebmail/xmlcompare.txt (original)
+++ CMFWebmail/trunk/gocept/webmail/xmlcompare.txt Wed Nov 5 10:52:49 2008
(at)(at) -16,7 +16,7 (at)(at)
The `xmlcompare` tool tries to make it simpler to write expectations for a
given XML document and analyze differences if they occur.
->>> from Products.CMFWebmail.xmlcompare import compare
+>>> from gocept.webmail.xmlcompare import compare
When a comparison results in no differences, the compare function simply
returns:
Added: CMFWebmail/trunk/setup.py
==============================================================================
--- (empty file)
+++ CMFWebmail/trunk/setup.py Wed Nov 5 10:52:49 2008
(at)(at) -0,0 +1,22 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+from setuptools import setup, find_packages
+
+
+setup(
+ name='gocept.webmail',
+ version='0.1dev',
+ author='gocept gmbh & co. kg',
+ author_email='mail(at)gocept.com',
+ description='A UI for gocept.restmail.',
+ packages=find_packages(),
+ include_package_data=True,
+ zip_safe=False,
+ license='ZPL 2.1',
+ namespace_packages=['gocept'],
+ install_requires=[
+ 'gocept.restmail',
+ 'setuptools',
+ ],
+)
|