<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ecmarchitect.com &#187; CMIS</title>
	<atom:link href="http://ecmarchitect.com/categories/content-management/cmis-content-management/feed" rel="self" type="application/rss+xml" />
	<link>http://ecmarchitect.com</link>
	<description>Jeff Potts on ECM, portals, search, collaboration, and a bunch of personal stuff</description>
	<lastBuildDate>Tue, 15 May 2012 07:05:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>cmislib extension supports Alfresco aspects</title>
		<link>http://ecmarchitect.com/archives/2012/01/27/1534</link>
		<comments>http://ecmarchitect.com/archives/2012/01/27/1534#comments</comments>
		<pubDate>Fri, 27 Jan 2012 22:14:40 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Apache Chemistry]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[cmislib]]></category>
		<category><![CDATA[aspects]]></category>
		<category><![CDATA[Examples]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1534</guid>
		<description><![CDATA[I can&#8217;t believe I didn&#8217;t know about this sooner. It completely passed me by. Patrice Collardez created an extension for cmislib that gives it the capability to work with aspects. Patrice&#8217;s version works with cmislib 0.4.1. I cloned it and made the updates necessary for it to work with cmislib 0.5. What this means is [...]]]></description>
			<content:encoded><![CDATA[<p>I can&#8217;t believe I didn&#8217;t know about this sooner. It completely passed me by. Patrice Collardez created an <a title="Google Code: cmislib-alfresco-extension" href="http://code.google.com/p/cmislib-alfresco-extension/">extension for cmislib</a> that gives it the capability to work with aspects. Patrice&#8217;s version works with cmislib 0.4.1. I <a title="Google Code: cmislib-alfresco-extension clone for cmislib 0.5" href="http://code.google.com/r/jeffpotts01-cmislib-latest/source/browse">cloned it</a> and made the updates necessary for it to work with cmislib 0.5.</p>
<p>What this means is that you can now use Python and <a href="http://incubator.apache.org/chemistry/cmislib.html" alt="Apache Chemistry cmislib">cmislib</a> to work with <a href="http://www.alfresco.com" alt="Alfresco Home">Alfresco</a> aspects. Patrice&#8217;s extension adds &#8220;addAspect&#8221;, &#8220;removeAspect&#8221; and &#8220;getAspects&#8221; to Document and Folder objects. It also allows you to call getProperties and updateProperties on Folders and Documents even when those properties are defined in an aspect.</p>
<p>Check it out:<br />
<code><br />
properties = {}<br />
properties['cmis:objectTypeId'] = "D:sc:whitepaper"<br />
properties['cmis:name'] = fileName</p>
<p>docText = "This is a sample " + TYPE + " document called " + NAME</p>
<p>doc = folder.createDocumentFromString(fileName, properties, contentString=docText, contentType="text/plain")</p>
<p># Add two custom aspects and set aspect-related properties<br />
doc.addAspect('P:sc:webable')<br />
doc.addAspect('P:sc:productRelated')<br />
props = {}<br />
props['sc:isActive'] = True<br />
props['sc:published'] = datetime.datetime(2007, 4, 1)<br />
props['sc:product'] = 'SomePortal'<br />
props['sc:version'] = '1.1'<br />
doc.updateProperties(props)<br />
</code></p>
<p>Also, if you saw the <a title="ecmarchitect.com blog post: Getting Started with CMIS Webinar" href="http://ecmarchitect.com/archives/2012/01/25/1526">webinar</a> yesterday you know I showed some Python examples in the shell, but I then switched over to some OpenCMIS Java examples in Eclipse that I included in the <a title="ecmarchitect.com Alfresco Developer Series Tutorial: Working with Custom Content Types" href="http://ecmarchitect.com/archives/2012/01/09/1509">custom content types tutorial</a>. I didn&#8217;t want my fellow Pythonistas to feel neglected, so I ported those OpenCMIS examples to Python. Grab them <a title="CMIS examples using cmislib" href="http://ecmarchitect.com/images/articles/cmis/CmisExamples.py.zip">here</a>.</p>
<p>The examples assume you also have Patrice&#8217;s extension installed (my clone if you are using cmislib 0.5). If you don&#8217;t want to use Patrice&#8217;s extension for some reason, just comment out the &#8220;import cmislibalf&#8221; statement as well as the lines in the createTestDoc method that deal with aspects and aspect-defined properties. You should then be able to run the examples in straight cmislib.</p>
<p>If you don&#8217;t have cmislib you can install it by typing &#8220;easy_install cmislib&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2012/01/27/1534/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webinar: Getting Started with CMIS</title>
		<link>http://ecmarchitect.com/archives/2012/01/25/1526</link>
		<comments>http://ecmarchitect.com/archives/2012/01/25/1526#comments</comments>
		<pubDate>Wed, 25 Jan 2012 19:38:15 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Apache Chemistry]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[cmislib]]></category>
		<category><![CDATA[OpenCMIS]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1526</guid>
		<description><![CDATA[If you are brand new to CMIS or have heard about it but aren&#8217;t sure how to get started, you might want to join me in a free webinar on Thursday, January 26 at 15:00 GMT. I&#8217;m going to give a brief intro to the Content Management Interoperability Services (CMIS) standard and then I&#8217;m going [...]]]></description>
			<content:encoded><![CDATA[<p>If you are brand new to CMIS or have heard about it but aren&#8217;t sure how to get started, you might want to join me in a free <a title="Alfresco webinar: Getting Started with CMIS" href="http://blogs.alfresco.com/wp/webcasts/2012/01/getting-started-with-cmis-2/">webinar</a> on Thursday, January 26 at 15:00 GMT. I&#8217;m going to give a brief intro to the <a title="CMIS specification at OASIS" href="http://docs.oasis-open.org/cmis/CMIS/v1.0/os/cmis-spec-v1.0.doc">Content Management Interoperability Services</a> (CMIS) standard and then I&#8217;m going to jump right in to examples that leverage Apache Chemistry <a title="Apache Chemistry OpenCMIS" href="http://chemistry.apache.org/java/opencmis.html">OpenCMIS</a> (Java), Apache Chemistry <a title="Apache Chemistry cmislib" href="http://chemistry.apache.org/python/cmislib.html">cmislib</a> (Python), and Groovy (via the OpenCMIS Workbench).</p>
<p>UPDATED on 1/26 to fix webinar link (thanks, Alessandro). See comments for a link to webinar recording and slides.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2012/01/25/1526/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Apache Chemistry cmislib 0.4 incubating now available</title>
		<link>http://ecmarchitect.com/archives/2011/02/07/1284</link>
		<comments>http://ecmarchitect.com/archives/2011/02/07/1284#comments</comments>
		<pubDate>Mon, 07 Feb 2011 17:14:52 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[Apache Chemistry]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[cmislib]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Interoperability]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1284</guid>
		<description><![CDATA[The Apache Chemistry development team is pleased to announce that the 0.4 incubating release of cmislib, the Python client API for CMIS, is now available for download. You may have to use one of the backup servers until the mirrors fully update. Alternatively, you can use easy_install to install cmislib by typing &#8220;easy_install cmislib&#8221;. This [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://incubator.apache.org/chemistry/"><img border="0" class="alignleft" title="Apache Chemistry Logo" src="http://ecmarchitect.com/images/chemistry_logo_small.png" alt="Apache Chemistry Logo" width="224" height="27" /></a>The Apache Chemistry development team is pleased to announce that the 0.4 incubating release of <a href="http://incubator.apache.org/chemistry/cmislib.html" alt="Apache Chemistry cmislib">cmislib</a>, the Python client API for <a href="http://www.oasis-open.org/committees/cmis/">CMIS</a>, is now available for <a href="http://www.apache.org/dyn/closer.cgi/incubator/chemistry/cmislib/0.4-incubating/">download</a>. You may have to use one of the backup servers until the mirrors fully update. Alternatively, you can use easy_install to install cmislib by typing &#8220;easy_install cmislib&#8221;.</p>
<p>This release has various fixes and enhancements that the community has contributed since cmislib joined the Apache Chemistry project with its 0.3 release. If you are using Alfresco, you might be interested in an enhancement in cmislib 0.4 that makes it possible to use ticket-based authentication instead of basic auth.</p>
<p>For those who haven&#8217;t used it, cmislib makes it easy to work with CMIS-compliant repositories from Python.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2011/02/07/1284/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Metaversant is up-and-running</title>
		<link>http://ecmarchitect.com/archives/2010/06/07/1167</link>
		<comments>http://ecmarchitect.com/archives/2010/06/07/1167#comments</comments>
		<pubDate>Mon, 07 Jun 2010 06:01:47 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Metaversant]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1167</guid>
		<description><![CDATA[First off, thanks so much to my readers, clients, colleagues, and other friends in the community who have provided a wealth of support in terms of well-wishes and congratulations on the forming of my new company, Metaversant. Several people have asked how things are going so here&#8217;s a brief update&#8230; Metaversant is up-and-running and I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>First off, thanks so much to my readers, clients, colleagues, and other friends in the community who have provided a wealth of support in terms of well-wishes and congratulations on the forming of my new company, <a title="Metaversant Group, Inc.'s Home Page" href="http://www.metaversant.com" target="_blank">Metaversant</a>. Several people have asked how things are going so here&#8217;s a brief update&#8230;</p>
<p>Metaversant is up-and-running and I&#8217;m as busy as can be. I finally got a web site up, a logo designed, and business cards aren&#8217;t far behind. I&#8217;ve even got people to give them to which is an important pre-requisite to actually having business cards.</p>
<p>I&#8217;m currently billing on an Alfresco Share customization project. I can&#8217;t tell you who or exactly what but the pattern will be familiar: A company needs to manage digital assets. Some come from internal sources, some come from external sources, and all need metadata and security applied. The front-end communicates with the Alfresco repository via RESTful Web Script calls while back-office content providers and application administrators use Alfresco Share (customized here and there) to upload assets, set metadata, and manage the business process. It&#8217;s a pretty classic pattern and other than extraordinarily tight timeline pressure, it&#8217;s going well.</p>
<p>Beyond technical execution I&#8217;ve also conducted some Alfresco training for a pharma client in New England. It was just a quick engagement but it was fun to help a team that had been doing some playing with Alfresco on their own discover the capabilities of the platform and how they could be applied to their business problems. I also love to see the expression on people&#8217;s faces when it hits them: They don&#8217;t need Documentum for all things DM any more.</p>
<p>I had a great trip to New York City for the Alfresco Community Meet-up. I don&#8217;t know what the official ratio was but the customers seemed to heavily outnumber the partners as this particular meet-up which is good for everyone, I think. I caught up with a lot of old friends and met some new ones. I was particularly excited to come across someone who had some plans to leverage <a href="http://code.google.com/p/cmislib" alt="Google Code Project: cmislib">cmislib</a>, my client-side CMIS API for Python, a project I&#8217;ve sorely neglected this Spring with all of the startup stuff going on. All of this Java code I&#8217;ve been writing has me missing Python&#8211;I will find time for cmislib soon.</p>
<p>Being fully billable while still having to find new business and take care of everything else about the business is tough, as I knew it would be. I&#8217;m loving every minute of it though. One thing I didn&#8217;t expect is the helpfulness of friends, former colleagues, and even strangers who have started their own businesses. The entrepreneur community is not unlike the open source community. Everyone loves to talk shop and trade tips and advice. It&#8217;s really cool.</p>
<p>My exercise regimen (a generous description) has suffered and it looks like my blogging velocity is on a similar trend. I feel like I&#8217;m getting into some regular rhythms though so maybe I can get things back in balance shortly. I&#8217;ve got all kinds of things that I need to write about: Alfresco 3.3 Enterprise is out, Alfresco hired the jBPM guys (I totally called it!), and I don&#8217;t think I&#8217;ve written anything at all about the Alfresco Community Committer Program. It&#8217;s going to be a busy Summer.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/06/07/1167/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using cmislib to migrate digital assets to CMIS repositories</title>
		<link>http://ecmarchitect.com/archives/2010/03/26/1149</link>
		<comments>http://ecmarchitect.com/archives/2010/03/26/1149#comments</comments>
		<pubDate>Fri, 26 Mar 2010 14:18:04 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1149</guid>
		<description><![CDATA[The follow-on to my introduction to cmislib, published on developerWorks earlier in the week, is now live. In the article, Jay Brown, the development lead for IBM&#8217;s CMIS servers, walks you through a small utility that leverages Python and cmislib to xcopy image files (and their embedded EXIF metadata) into a CMIS repository. When Jay [...]]]></description>
			<content:encoded><![CDATA[<p>The follow-on to my <a title="IBM developerWorks article: A CMIS API library for Python, Part 1" href="http://www.ibm.com/developerworks/xml/library/x-cmis1/index.html" target="_blank">introduction to cmislib</a>, published on <a title="IBM developerWorks: XML" href="http://www.ibm.com/developerworks/xml/" target="_blank">developerWorks</a> earlier in the week, is now live. <a title="IBM developerWorks article: A CMIS API library for Python, Part 2" href="http://www.ibm.com/developerworks/library/x-cmis2/index.html" target="_blank">In the article</a>, Jay Brown, the development lead for IBM&#8217;s CMIS servers, walks you through a small utility that leverages Python and <a href="http://code.google.com/p/cmislib" alt="Google Code Project: cmislib">cmislib</a> to xcopy image files (and their embedded EXIF metadata) into a CMIS repository.</p>
<p>When Jay wrote the article and the code that goes with it, he initially tested against his own IBM CMIS servers. As soon as the core functionality was complete, he changed the service URL in his config file to point to Alfresco&#8217;s CMIS server and it ran like a charm. That&#8217;s the beauty of <a href="http://www.oasis-open.org/committees/cmis/">CMIS</a> and cmislib: Write once, manage digital assets anywhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/03/26/1149/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New developerWorks article on cmislib</title>
		<link>http://ecmarchitect.com/archives/2010/03/23/1145</link>
		<comments>http://ecmarchitect.com/archives/2010/03/23/1145#comments</comments>
		<pubDate>Tue, 23 Mar 2010 14:53:34 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1145</guid>
		<description><![CDATA[If you would like to learn more about cmislib, an open source CMIS client API for Python that works with any CMIS-compliant repository such as Alfresco, FileNet, Nuxeo, OpenText, and others, check out my new developerWorks article. This is part one in a two-part series. In the second part, which will be published soon, Jay [...]]]></description>
			<content:encoded><![CDATA[<p>If you would like to learn more about <a href="http://code.google.com/p/cmislib" alt="Google Code Project: cmislib">cmislib</a>, an open source <a href="http://www.oasis-open.org/committees/cmis/">CMIS</a> client API for Python that works with any CMIS-compliant repository such as Alfresco, FileNet, Nuxeo, OpenText, and others, check out my new <a href="http://www.ibm.com/developerworks/xml/library/x-cmis1/">developerWorks article</a>.</p>
<p>This is part one in a two-part series. In the second part, which will be published soon, Jay Brown from IBM talks about how he used cmislib to create an xcopy-like utility that copies images from a file system into any CMIS repository. As it does the copy, it inspects the image&#8217;s EXIF tags and if the target document type has corresponding properties, it populates those properties with the image metadata.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/03/23/1145/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Drupal Open Atrium and Alfresco CMIS files</title>
		<link>http://ecmarchitect.com/archives/2010/03/22/1141</link>
		<comments>http://ecmarchitect.com/archives/2010/03/22/1141#comments</comments>
		<pubDate>Mon, 22 Mar 2010 13:17:48 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1141</guid>
		<description><![CDATA[A lot of people have been asking for the files we used to integrate Alfresco CMIS with Drupal Open Atrium (See ecmarchitect.com blog post). I&#8217;ve happily mailed those to whomever asked. I&#8217;ve had the intention of testing them with the latest version, cleaning them up, and putting somewhere more appropriate like the Open Atrium feature [...]]]></description>
			<content:encoded><![CDATA[<p>A lot of people have been asking for the files we used to integrate <a href="http://www.alfresco.com">Alfresco</a> CMIS with <a href="http://drupal.org">Drupal</a> <a title="Open Atrium Home" href="http://openatrium.org" target="_blank">Open Atrium</a> (See <a title="ecmarchitect.com blog post: Screenast of Drupal Open Atrium and Alfresco CMIS integration" href="http://ecmarchitect.com/archives/2009/10/13/1058" target="_self">ecmarchitect.com blog post</a>). I&#8217;ve happily mailed those to whomever asked. I&#8217;ve had the intention of testing them with the latest version, cleaning them up, and putting somewhere more appropriate like the Open Atrium feature server, or at the very least, Google Code or GitHub. But it hasn&#8217;t happened yet so I figured I&#8217;d make them available <a title="Download the cmis-open-atrium.zip file" href="http://ecmarchitect.com/images/openatrium/cmis-open-atrium.zip">here</a> and appeal to the Community to give them a good home.</p>
<p>The zip includes a readme file with (very) rough install/config directions.</p>
<p>Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/03/22/1141/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Vote to include my CMIS session at Drupalcon</title>
		<link>http://ecmarchitect.com/archives/2010/02/16/1135</link>
		<comments>http://ecmarchitect.com/archives/2010/02/16/1135#comments</comments>
		<pubDate>Tue, 16 Feb 2010 23:56:46 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Drupal]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1135</guid>
		<description><![CDATA[Fellow Optaros colleague, Chris Fuller, and I want to present on the Alfresco-Drupal integration at Drupalcon in San Francisco (April 19-21). If you&#8217;re interested in Alfresco, Drupal, and CMIS (any or all of the above), please vote for our session.]]></description>
			<content:encoded><![CDATA[<p>Fellow <a href="http://www.optaros.com" alt="Optaros Home">Optaros</a> colleague, Chris Fuller, and I want to present on the Alfresco-Drupal integration at Drupalcon in San Francisco (April 19-21). If you&#8217;re interested in Alfresco, Drupal, and CMIS (any or all of the above), please <a title="Drupalcon San Francisco Session: Drupal, Alfresco, &amp; CMIS" href="http://sf2010.drupal.org/conference/sessions/enterprise-content-management-drupal-alfresco-and-cmis" target="_blank">vote for our session</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/02/16/1135/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updated Python CMIS library released</title>
		<link>http://ecmarchitect.com/archives/2010/01/13/1127</link>
		<comments>http://ecmarchitect.com/archives/2010/01/13/1127#comments</comments>
		<pubDate>Wed, 13 Jan 2010 08:01:43 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[cmislib]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[FileNet]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1127</guid>
		<description><![CDATA[I&#8217;ve tagged and released a new version of cmislib, the Python CMIS client library. What&#8217;s cool about this release is that it is the first one known to work with more than one CMIS provider. Yea for interoperability! The beauty of CMIS, realized! Okay, it wasn&#8217;t that beautiful, it&#8217;s still &#8220;0.1&#8243;, and there are known [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve tagged and released a new version of <a href="http://code.google.com/p/cmislib" alt="Google Code Project: cmislib">cmislib</a>, the Python CMIS client library. What&#8217;s cool about this release is that it is the first one known to work with more than one CMIS provider. Yea for interoperability! The beauty of CMIS, realized! Okay, it wasn&#8217;t that beautiful, it&#8217;s still &#8220;0.1&#8243;, and there are <a title="Google Code: cmislib wiki page: Known Issues" href="http://code.google.com/p/cmislib/wiki/KnownIssues" target="_blank">known issues</a>. But I can now say the library works with both <a href="http://www.alfresco.com" alt="Alfresco Home">Alfresco</a> and IBM FileNet and that&#8217;s a Good Thing.</p>
<p>IBM was a big help with this. Al Brown, one of the <a href="http://www.oasis-open.org/committees/cmis/">CMIS</a> spec leads turned one of his colleagues, Jay Brown, onto cmislib. Jay called me up and asked, &#8220;If I give you access to a FileNet P8 server, can you test cmislib against it?&#8221; I was on it faster than you could say, &#8220;unittest.main()&#8221;.</p>
<p>I think the effort was valuable for all sides. Our little &#8220;mini plugfest&#8221; turned up issues in my client as well as both CMIS providers. Jay worked hard to chase down everything on the FileNet side. Dave Caruana chased a few down on the Alfresco side as well. Thanks to everyone for the team effort.</p>
<p>Anyway, give the new cmislib release a try and give me your feedback. If you want a feel for how easy it can be to work with CMIS repositories using the cmislib API, check out the <a title="Google Code: cmislib: Documentation" href="http://cmislib.googlecode.com/svn/trunk/src/doc/build/index.html" target="_blank">documentation</a> or dive right in. Installation is as easy as &#8220;easy_install cmislib&#8221; (<a title="Setuptools/easy_install instructions on python.org" href="http://pypi.python.org/pypi/setuptools" target="_blank">easy_install instructions</a>).</p>
<p>Next up is <a title="Nuxeo CMIS Page" href="http://www.nuxeo.org/xwiki/bin/view/Main/CMIS" target="_blank">Nuxeo</a>. Can the open source ECM vendor achieve cmislib Unit Test Greatness faster than Big Blue? We shall see!</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2010/01/13/1127/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>cmislib: A CMIS client library for Python</title>
		<link>http://ecmarchitect.com/archives/2009/12/18/1113</link>
		<comments>http://ecmarchitect.com/archives/2009/12/18/1113#comments</comments>
		<pubDate>Fri, 18 Dec 2009 17:41:49 +0000</pubDate>
		<dc:creator>jpotts</dc:creator>
				<category><![CDATA[Alfresco]]></category>
		<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Optaros]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://ecmarchitect.com/?p=1113</guid>
		<description><![CDATA[I&#8217;ve started a new project on Google Code called cmislib. It is an interoperable client library for CMIS in Python that uses the Restful AtomPub Binding of a CMIS provider to perform CRUD and query functions on the repository. I created it for a couple of reasons. First, it&#8217;s been bugging me that, unlike our [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started a new project on Google Code called <a title="Google Code: cmislib" href="http://code.google.com/p/cmislib" target="_blank">cmislib</a>. It is an interoperable client library for <a href="http://www.oasis-open.org/committees/cmis/">CMIS</a> in Python that uses the Restful AtomPub Binding of a CMIS provider to perform CRUD and query functions on the repository.</p>
<p>I created it for a couple of reasons. First, it&#8217;s been bugging me that, unlike our <a title="Drupal.org: CMIS Alfresco Module" href="http://drupal.org/project/cmis_alfresco" target="_blank">Drupal Alfresco integration</a>, our <a title="Google Code: Django Alfresco integration" href="http://code.google.com/p/django-alfresco/" target="_blank">Django Alfresco integration</a> does not use CMIS. After talking it over with one of our clients we decided it would make more sense to create a more general purpose CMIS API for Python that Django (and any other Python app) could leverage, rather than build CMIS support directly into the Django Alfresco integration.</p>
<p>Second, around the time I was putting together the <a title="ecmarchitect.com blog post: Getting Started with CMIS" href="http://ecmarchitect.com/archives/2009/11/23/1094" target="_self">Getting Started with CMIS</a> tutorial, it struck me that there needed to be an API that didn&#8217;t have a lot of dependencies and was very easy to use. Otherwise, it&#8217;s too easy to get lost in the weeds and miss the whole point of CMIS: Easily working with rich content repositories, regardless of the underlying implementation.</p>
<p>Even if you&#8217;ve never worked with Python before, it is super easy to get started with cmislib. The install is less than 3 steps and the API should feel very natural to anyone that&#8217;s worked with a content repository before. Check it out.</p>
<p><strong>Install</strong></p>
<ol>
<li><a name="Install">If you don&#8217;t have </a><a rel="nofollow" href="http://www.python.org/download/">Python</a> installed already, do so. I&#8217;ve only tested on Python 2.6 so unless you&#8217;re looking to help test, stick with that.</li>
<li>If you don&#8217;t have <a rel="nofollow" href="http://pypi.python.org/pypi/setuptools">setuptools</a> installed already, do so. It&#8217;s a nice tool to use for installing Python packages.</li>
<li>Once setuptools is installed, type <tt>easy_install cmislib</tt></li>
</ol>
<p>That&#8217;s all there is to it. Now you&#8217;re ready to connect to your favorite CMIS-compliant repository.</p>
<p><strong>Examples</strong></p>
<p>There&#8217;s nothing in cmislib that is specific to any particular vendor. Once you give it your CMIS provider&#8217;s service URL and some credentials, it figures out where to go from there. But I haven&#8217;t tested with anything other than <a href="http://www.alfresco.com">Alfresco</a> yet, and this thing is still hot out of the oven. If you want to help test it against other CMIS 1.0cd04 repositories I&#8217;d love the help.</p>
<p>Anyway, let&#8217;s look at some examples using <a title="Alfresco hosted CMIS repository" href="http://cmis.alfresco.com" target="_blank">Alfresco&#8217;s public CMIS repository</a>.</p>
<ol>
<li>From the command-line, start the Python shell by typing <tt>python</tt> then hit enter.</li>
<pre>Python 2.6.3 (r263:75183, Oct 22 2009, 20:01:16)
GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt;</pre>
<li>Import the CmisClient and Repository classes:</li>
<pre><span>&gt;&gt;&gt;</span><span> </span><span>from</span><span> cmislib</span><span>.</span><span>model </span><span>import</span><span> </span><span>CmisClient</span><span>,</span><span> </span><span>Repository</span></pre>
<li>Point the CmisClient at the repository&#8217;s service URL</li>
<pre><span>&gt;&gt;&gt;</span><span> client </span><span>=</span><span> </span><span>CmisClient</span><span>(</span><span>'http://cmis.alfresco.com/s/cmis'</span><span>,</span><span> </span><span>'admin'</span><span>,</span><span> </span><span>'admin'</span><span>)</span></pre>
<li>Get the default repository for the service</li>
<pre><span>&gt;&gt;&gt;</span><span> repo </span><span>=</span><span> client</span><span>.</span><span>getDefaultRepository</span><span>()</span><span>
</span><span>&gt;&gt;&gt;</span><span> repo</span><span>.</span><span>getRepositoryId</span><span>()</span><span>
u</span><span>'83beb297-a6fa-4ac5-844b-98c871c0eea9'</span></pre>
<li>Get the repository&#8217;s properties. This for-loop spits out everything cmislib knows about the repo.</li>
<pre><span>&gt;&gt;&gt;</span><span> repo</span><span>.</span><span>getRepositoryName</span><span>()</span><span>
    u</span><span>'Main Repository'</span><span>
</span><span>&gt;&gt;&gt;</span><span> info </span><span>=</span><span> repo</span><span>.</span><span>getRepositoryInfo</span><span>()</span><span>
</span><span>&gt;&gt;&gt;</span><span> </span><span>for</span><span> k</span><span>,</span><span>v </span><span>in</span><span> info</span><span>.</span><span>items</span><span>():</span><span>
    </span><span>...</span><span>     </span><span>print</span><span> </span><span>"%s:%s"</span><span> </span><span>%</span><span> </span><span>(</span><span>k</span><span>,</span><span>v</span><span>)</span><span>
    </span><span>...</span><span>
    cmisSpecificationTitle</span><span>:</span><span>Version</span><span> </span><span>1.0</span><span> </span><span>Committee</span><span> </span><span>Draft</span><span> </span><span>04</span><span>
    cmisVersionSupported</span><span>:</span><span>1.0</span><span>
    repositoryDescription</span><span>:</span><span>None</span><span>
    productVersion</span><span>:</span><span>3.2</span><span>.</span><span>0</span><span> </span><span>(</span><span>r2 </span><span>2440</span><span>)</span><span>
    rootFolderId</span><span>:</span><span>workspace</span><span>:</span><span>//SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348</span><span>
    repositoryId</span><span>:</span><span>83beb297</span><span>-</span><span>a6fa</span><span>-</span><span>4ac5</span><span>-</span><span>844b</span><span>-</span><span>98c871c0eea9</span><span>
    repositoryName</span><span>:</span><span>Main</span><span> </span><span>Repository</span><span>
    vendorName</span><span>:</span><span>Alfresco</span><span>
    productName</span><span>:</span><span>Alfresco</span><span> </span><span>Repository</span><span> </span><span>(</span><span>Community</span><span>)</span></pre>
</ol>
<p>Once you&#8217;ve got the Repository object you can start working with folders.</p>
<ol>
<li>Create a new folder in the root. You should name yours something unique.</li>
<pre>&gt;&gt;&gt; root = repo.getRootFolder()
&gt;&gt;&gt; someFolder = root.createFolder('someFolder')
&gt;&gt;&gt; someFolder.getObjectId()
u'workspace://SpacesStore/91f344ef-84e7-43d8-b379-959c0be7e8fc'</pre>
<li>Then, you can create some content:</li>
<pre>&gt;&gt;&gt; someFile = open('test.txt', 'r')
&gt;&gt;&gt; someDoc = someFolder.createDocument('Test Document', contentFile=someFile)</pre>
<li>And, if you want, you can dump the properties of the newly-created document (this is a partial list):</li>
<pre>&gt;&gt;&gt; props = someDoc.getProperties()
&gt;&gt;&gt; for k,v in props.items():
...     print '%s:%s' % (k,v)
...
cmis:contentStreamMimeType:text/plain
cmis:creationDate:2009-12-18T10:59:26.667-06:00
cmis:baseTypeId:cmis:document
cmis:isLatestMajorVersion:false
cmis:isImmutable:false
cmis:isMajorVersion:false
cmis:objectId:workspace://SpacesStore/2cf36ad5-92b0-4731-94a4-9f3fef25b479</pre>
<li>You can also use cmislib to run CMIS queries. Let&#8217;s find the doc we just created with a full-text search. (Note that I&#8217;m currently seeing a problem with Alfresco in which the CMIS service returns one less result than what&#8217;s really there):</li>
<pre>&gt;&gt;&gt; results = repo.query("select * from cmis:document where contains('test')")
&gt;&gt;&gt; for result in results:
...     print result.getName()
...
Test Document2
example test script.js</pre>
<li>Alternatively, you can also get objects by their object ID or their path, like this:</li>
<pre>&gt;&gt;&gt; someDoc = repo.getObjectByPath('/someFolder/Test Document')
&gt;&gt;&gt; someDoc.getObjectId()
u'workspace://SpacesStore/2cf36ad5-92b0-4731-94a4-9f3fef25b479'</pre>
</ol>
<p><strong>Set Python loose on your CMIS repository</strong></p>
<p>These are just a few examples meant to give you a feel for the API. There are several other things you can do with cmislib. The package comes with documentation so look there for more info. If you find any problems and you want to pitch in, you can check out the source from Google Code and create issues there as well.</p>
<p>Give this a try and let me know what you think.</p>
<p>[UPDATE: I had the wrong URL for the Alfresco-hosted CMIS service. It's fixed now.]</p>
]]></content:encoded>
			<wfw:commentRss>http://ecmarchitect.com/archives/2009/12/18/1113/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

