<?xml version="1.0"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>CKAN: Ticket Query</title>
    <link>http://localhost/query?milestone=v0.10&amp;group=status&amp;desc=1&amp;order=priority</link>
    <description>The open source data portal software</description>
    <language>en-US</language>
    <image>
      <title>CKAN</title>
      <url>http://assets.okfn.org/p/ckan/img/ckan_logo_shortname.png</url>
      <link>http://localhost/query?milestone=v0.10&amp;group=status&amp;desc=1&amp;order=priority</link>
    </image>
    <generator>Trac 0.12.3</generator>
    <item>
        <link>http://localhost/ticket/61</link>
        <guid isPermaLink="false">http://localhost/ticket/61</guid>
        <title>#61: When dumping data to json do not dump private information like API keys</title>
        <pubDate>Tue, 07 Apr 2009 16:58:49 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Cost: 1h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/61#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/62</link>
        <guid isPermaLink="false">http://localhost/ticket/62</guid>
        <title>#62: Change tags to contain any character (other than space)</title>
        <pubDate>Fri, 24 Apr 2009 14:58:15 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Requires us to url encode the tag names when displaying them ...
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/62#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/67</link>
        <guid isPermaLink="false">http://localhost/ticket/67</guid>
        <title>#67: List all of a user's recent edits on their home page</title>
        <pubDate>Wed, 17 Jun 2009 18:35:31 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Additional feature related to &lt;a class="closed ticket" href="http://localhost/ticket/66" title="enhancement: Improve user account UI (closed: fixed)"&gt;ticket:66&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
cost: 2h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/67#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/71</link>
        <guid isPermaLink="false">http://localhost/ticket/71</guid>
        <title>#71: Upgrade to Pylons 0.9.7</title>
        <pubDate>Wed, 01 Jul 2009 07:57:21 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Cost: 2h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/71#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/74</link>
        <guid isPermaLink="false">http://localhost/ticket/74</guid>
        <title>#74: Add Is It Open links to package pages</title>
        <pubDate>Fri, 17 Jul 2009 10:56:58 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
On each package page in the openness field if the package is not open provide a link to is it open create enquiry page.
&lt;/p&gt;
&lt;p&gt;
Details:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;may want to add to the url a query parameter indicating which package this relates to e.g. ?ckan-package=...
&lt;/li&gt;&lt;li&gt;&lt;a class="ext-link" href="http://isitopen.ckan.net/enquiry/create/?ckan-package="&gt;&lt;span class="icon"&gt;​&lt;/span&gt;http://isitopen.ckan.net/enquiry/create/?ckan-package=&lt;/a&gt;...
&lt;/li&gt;&lt;li&gt;do we provide link even if package is open (e.g. so that people can make enquiries about e.g. adding open data/content buttons ...)
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Cost: 0.5h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/74#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/79</link>
        <guid isPermaLink="false">http://localhost/ticket/79</guid>
        <title>#79: Improvements to package search</title>
        <pubDate>Fri, 17 Jul 2009 11:24:24 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Several things:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Default package search (used e.g. on front page) should deal well with multiple items: "abc xyz" means search for both abc and xyz (as separate searches)
&lt;/li&gt;&lt;li&gt;Should automatically display a list of matching tags in a line at top with number of associated packages
&lt;/li&gt;&lt;li&gt;have an option to only search for fully open material (or openly licensed material ...)
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Since we should be moving to a more sophisticated search solution anyway (to allow prioritisation etc) maybe we should cautious as to what we do now.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/79#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/80</link>
        <guid isPermaLink="false">http://localhost/ticket/80</guid>
        <title>#80: Refactor or remove modes code</title>
        <pubDate>Fri, 17 Jul 2009 15:24:23 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Get rid of modes in the RESTful API. Do json stuff directly in controllers.
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;package will have to_dict and from_dict methods (called by rest controller) which provide and consume JSON friendly dictionaries representing the object. from_dict - class_method. stuff in forms for tags as_string, maybe factor out. reuse validation stuff.
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/80#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/127</link>
        <guid isPermaLink="false">http://localhost/ticket/127</guid>
        <title>#127: Minor form and UI improvements</title>
        <pubDate>Thu, 24 Sep 2009 13:24:19 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;ul&gt;&lt;li&gt;group form: description field for  needs to be a text area
&lt;/li&gt;&lt;li&gt;group form: make title and name field wider
&lt;/li&gt;&lt;li&gt;package view: need to move tags and license above notes
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/127#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/66</link>
        <guid isPermaLink="false">http://localhost/ticket/66</guid>
        <title>#66: Improve user account UI</title>
        <pubDate>Wed, 17 Jun 2009 18:34:45 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;ol&gt;&lt;li&gt;Link at top should say "Your Account" when you are logged in
&lt;ul&gt;&lt;li&gt;when not logged in should say: "Log in via openid"
&lt;/li&gt;&lt;li&gt;Open Id info on /account/ should move to /account/login/ or be deleted
&lt;/li&gt;&lt;li&gt;Going to /account/ when not logged in should redirect to /account/login/
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol start="2"&gt;&lt;li&gt;When logged in the basic account index page should not give generic information but should reflect fact you are logged in by:
&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;Saying something like: "You are logged in as: ..."
&lt;/li&gt;&lt;li&gt;Showing your apikey or a link to apikey
&lt;/li&gt;&lt;li&gt;Giving you a logout link
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
We can think of a bunch of other stuff that could go on their (recent edits, packages you own etc) but these will be separate tickets.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/66#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/72</link>
        <guid isPermaLink="false">http://localhost/ticket/72</guid>
        <title>#72: Integrate new logo</title>
        <pubDate>Wed, 01 Jul 2009 09:37:01 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Integrate new logo from &lt;a class="ext-link" href="http://wiki.okfn.org/ckan/logo"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;http://wiki.okfn.org/ckan/logo&lt;/a&gt; into site:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;In title
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Also can do favicon (separate &lt;a class="closed ticket" href="http://localhost/ticket/48" title="enhancement: Create favicon (closed: fixed)"&gt;ticket:48&lt;/a&gt;)
&lt;/p&gt;
&lt;p&gt;
Cost: 1h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/72#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/114</link>
        <guid isPermaLink="false">http://localhost/ticket/114</guid>
        <title>#114: Access Control - model</title>
        <pubDate>Wed, 09 Sep 2009 11:08:47 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Create in the model basic operation of Access Control.
&lt;/p&gt;
&lt;p&gt;
roles table
&lt;/p&gt;
&lt;pre class="wiki"&gt;name | context | action
-----------------------
admin| package | edit
admin| package | edit-permissions
admin| package | read
editor| package | update
editor| package | read
reader| package | read
This data is set-up on db init and will have no interface.
&lt;/pre&gt;&lt;p&gt;
user-roles table:
&lt;/p&gt;
&lt;pre class="wiki"&gt;username | context_type | objectid | role
rgrp     | system  | n/a | admin
visitor  | package | * | reader
bob      | package | geonames | admin
visitor  | package | geonames | editor
visitor  | package | geonames | reader
john     | group | ukgov | admin
dread    | group | ukgov | editor
visitor  | group | ukgov | reader
This data will be added when someone is given permissions for the system, a package or a group.
&lt;/pre&gt;&lt;p&gt;
Pseudo code:
&lt;/p&gt;
&lt;p&gt;
class Package
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
def is_allowed(name, action):
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
is_allowed(name, action, context=self)
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;
class Group
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
def is_allowed(name, action):
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
is_allowed(name, action, context=self)
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;
def is_allowed(name, action, context=None):
&lt;strong&gt; name: string - a username or IP for 'visitor'
&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
action: string - 'read', 'edit', 'delete', 'edit-permissions'
context: object - a Group or a Package or None (which means system)
&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
&lt;strong&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
# look up user from name.
# look up in user-roles table what roles this user has for this context.
# for each roles, look up in roles table what actions are allowed.
# return True if action is allowed, else False.
&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/114#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/115</link>
        <guid isPermaLink="false">http://localhost/ticket/115</guid>
        <title>#115: Access Control - wui constrained by model</title>
        <pubDate>Tue, 15 Sep 2009 17:06:34 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Based on a section of &lt;a class="wiki" href="http://localhost/wiki/AccessControl"&gt;AccessControl&lt;/a&gt; design:
Reading and writing to packages in the WUI and REST API are now dependent on the authz tables.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/115#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/117</link>
        <guid isPermaLink="false">http://localhost/ticket/117</guid>
        <title>#117: Access Control - group core functionality</title>
        <pubDate>Fri, 18 Sep 2009 10:55:33 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Based on a section of &lt;a class="wiki" href="http://localhost/wiki/AccessControl"&gt;AccessControl&lt;/a&gt; design:
Group reads and edits are controlled by access control. WUI and REST interfaces covered.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/117#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/118</link>
        <guid isPermaLink="false">http://localhost/ticket/118</guid>
        <title>#118: Use paginate in webhelpers</title>
        <pubDate>Fri, 18 Sep 2009 11:34:17 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Take out import of paginate in setup.py.
Use paginate in webhelpers instead.
Make changes to take account of any i/f changes.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/118#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/119</link>
        <guid isPermaLink="false">http://localhost/ticket/119</guid>
        <title>#119: Ensure non-active packages don't show up</title>
        <pubDate>Mon, 21 Sep 2009 10:36:54 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Ensure pending packages don't show up in search or browse
&lt;/p&gt;
&lt;p&gt;
cost: 4h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/119#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/120</link>
        <guid isPermaLink="false">http://localhost/ticket/120</guid>
        <title>#120: Security audit</title>
        <pubDate>Mon, 21 Sep 2009 10:37:07 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Look for all places where model is accessed and check authorization is checked.
&lt;/p&gt;
&lt;p&gt;
Document holes (and, as necessary, suggestions for fixes) as new tickets. Likely areas that need looking at:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;search i/f
&lt;/li&gt;&lt;li&gt;package WUI commit
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Write holes are obviously much more significant to us than read holes.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/120#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/121</link>
        <guid isPermaLink="false">http://localhost/ticket/121</guid>
        <title>#121: Add 'Group' to main menu</title>
        <pubDate>Wed, 23 Sep 2009 08:33:47 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
And associated page to browse group.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/121#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/122</link>
        <guid isPermaLink="false">http://localhost/ticket/122</guid>
        <title>#122: Add Group authz page</title>
        <pubDate>Wed, 23 Sep 2009 08:34:02 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description></description>
        <category>Results</category>
        <comments>http://localhost/ticket/122#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/123</link>
        <guid isPermaLink="false">http://localhost/ticket/123</guid>
        <title>#123: Ability to edit Group in WUI</title>
        <pubDate>Wed, 23 Sep 2009 12:14:01 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Add Group editing page.
&lt;/p&gt;
&lt;p&gt;
If no permissions to change group can't edit group. Also cannot view edit page.
&lt;/p&gt;
&lt;p&gt;
Editable attributes: name, title, description
&lt;/p&gt;
&lt;p&gt;
No preview needed
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/123#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/131</link>
        <guid isPermaLink="false">http://localhost/ticket/131</guid>
        <title>#131: Groups REST interface</title>
        <pubDate>Wed, 30 Sep 2009 10:52:39 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Controlling Groups through a REST interface.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/131#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/43</link>
        <guid isPermaLink="false">http://localhost/ticket/43</guid>
        <title>#43: Generic Attributes for Packages</title>
        <pubDate>Tue, 08 Jan 2008 10:28:29 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;h1 id="AsA"&gt;As A&lt;/h1&gt;
&lt;p&gt;
User
&lt;/p&gt;
&lt;h1 id="IWantTo"&gt;I Want To&lt;/h1&gt;
&lt;p&gt;
Add arbitrary named attributes to packages (an attribute being a name, type, value triple).
&lt;/p&gt;
&lt;h1 id="Details"&gt;Details&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;We will do this using a dedicated (versioned) table associated to Package
&lt;/li&gt;&lt;li&gt;Do we allow multiple attributes of the same name?
&lt;ul&gt;&lt;li&gt;For the present: No (since we will key by attribute name)
&lt;/li&gt;&lt;li&gt;Could allow for single attribute but with multiple values using json list ...
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;What types do we allow or do we just rely on JSON to take care of this?
&lt;/li&gt;&lt;/ul&gt;&lt;h1 id="QuestionsOriginal"&gt;Questions (Original)&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;How complex is this to implement?
&lt;/li&gt;&lt;li&gt;What would an arbitrary user be able to edit? Possibilities:
&lt;ol&gt;&lt;li&gt;'create new attribute' and setting the value (so name and type would be chosen from predefined list).
&lt;/li&gt;&lt;li&gt;'create', setting of name and value (but not type -- type already set in predefined list)
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Could just use (machine) tags -- though this could be seen as a bit of a hack.
&lt;/li&gt;&lt;li&gt;Would solve having to create special file/url attributes (though I think that perhaps file stuff is important enough to merit first class support in the domain model -- though, that said, since one won't want to have a file limit adding unlimited file support is very similar to unlimited attributes of arbitrary type).
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/43#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/64</link>
        <guid isPermaLink="false">http://localhost/ticket/64</guid>
        <title>#64: Switch to repoze.who for authentication</title>
        <pubDate>Tue, 16 Jun 2009 16:14:13 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Switch to repoze.who + openid plugin for authentication from authkit.
&lt;/p&gt;
&lt;p&gt;
Already did this in microfacts so should be fairly easy.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/64#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/76</link>
        <guid isPermaLink="false">http://localhost/ticket/76</guid>
        <title>#76: Convert to use formalchemy for all forms</title>
        <pubDate>Fri, 17 Jul 2009 11:10:41 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Current form stuff is not very good (uses formencode). Switch to formalchemy would improve this, especially on validation.
&lt;/p&gt;
&lt;p&gt;
As an extra we could utilize the formalchemy pylons admin interface (pretty much for free).
&lt;/p&gt;
&lt;p&gt;
Cost: 12h
&lt;/p&gt;
&lt;h2 id="Details"&gt;Details&lt;/h2&gt;
&lt;ol&gt;&lt;li&gt;Replace htmlfill and formencode extract in controllers/templates with formalchemy
&lt;ol&gt;&lt;li&gt;Crude and simple
&lt;/li&gt;&lt;li&gt;Suppress unwanted fields (revision, state, all revisions) and sort out ordering to be similar to before.
&lt;/li&gt;&lt;li&gt;Sort out tag field with a special renderer
&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Validation - testing definitely required.
&lt;/li&gt;&lt;li&gt;Fix up description and pretty css etc
&lt;/li&gt;&lt;/ol&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/76#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/91</link>
        <guid isPermaLink="false">http://localhost/ticket/91</guid>
        <title>#91: Add author and maintainer attributes to package</title>
        <pubDate>Fri, 31 Jul 2009 14:16:20 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Add the following attributes to package:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;author, author_email
&lt;/li&gt;&lt;li&gt;maintainer, maintainer_email
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Gives us full compatibility to: &lt;a class="ext-link" href="http://docs.python.org/distutils/setupscript.html#additional-meta-data"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;http://docs.python.org/distutils/setupscript.html#additional-meta-data&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Column ordering - should come after name, title, url, download_url.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/91#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/93</link>
        <guid isPermaLink="false">http://localhost/ticket/93</guid>
        <title>#93: Access control for packages</title>
        <pubDate>Fri, 31 Jul 2009 15:44:09 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Should be able to limit ability to a user's ability to do things with packages (read, edit etc). This is a big ticket (it may required splitting) and full details are in separate wiki page: &lt;a class="wiki" href="http://localhost/wiki/AccessControl"&gt;AccessControl&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Cost: 8d
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/93#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/94</link>
        <guid isPermaLink="false">http://localhost/ticket/94</guid>
        <title>#94: Use sqlalchemy-migrate to handle db/model upgrades</title>
        <pubDate>Sat, 01 Aug 2009 13:43:05 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Details of how to go about this here &amp;lt;&lt;a class="ext-link" href="http://www.rufuspollock.org/2009/07/27/sqlalchemy-migrate-with-pylons/"&gt;&lt;span class="icon"&gt;​&lt;/span&gt;http://www.rufuspollock.org/2009/07/27/sqlalchemy-migrate-with-pylons/&lt;/a&gt;&amp;gt;
&lt;/p&gt;
&lt;p&gt;
Cost: 2h
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/94#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/105</link>
        <guid isPermaLink="false">http://localhost/ticket/105</guid>
        <title>#105: Package groups (view)</title>
        <pubDate>Thu, 27 Aug 2009 16:58:02 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
As a user I want to be able to create groups of packages.
&lt;/p&gt;
&lt;p&gt;
This functionality is different from tags:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The ability to add a package to a given group is restricted whereas anyone can add a given tag to a package
&lt;/li&gt;&lt;li&gt;Specifically groups have owners and only the owners can add a package to that group
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Group properties
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;id (primarykey, uuid style)
&lt;/li&gt;&lt;li&gt;name (restricted content - same rules as package)
&lt;/li&gt;&lt;li&gt;title (no restrictions)
&lt;/li&gt;&lt;li&gt;owners -- many:many with user object
&lt;/li&gt;&lt;li&gt;description (markdown)
&lt;/li&gt;&lt;li&gt;packages -- many:many with package object
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Don't version groups for now.
&lt;/p&gt;
&lt;p&gt;
Groups address in the WUI will be:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;/group     - browse list of groups (reuse list action)
&lt;/li&gt;&lt;li&gt;/group/list - same thing for now
&lt;/li&gt;&lt;li&gt;/group/&amp;lt;groupname&amp;gt; - display: group properties with links to packages. No links to user pages (yet).
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Group editing and searching will be another ticket.
&lt;/p&gt;
&lt;p&gt;
Cost: 3d
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/105#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/108</link>
        <guid isPermaLink="false">http://localhost/ticket/108</guid>
        <title>#108: Package search in the REST API</title>
        <pubDate>Wed, 02 Sep 2009 18:24:05 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;p&gt;
Add package search facility in the rest api at /api/search
&lt;/p&gt;
&lt;p&gt;
Queries can be provided as for the normal package search either by posting to that url or by performing a get with a query string.
&lt;/p&gt;
&lt;p&gt;
E.g. .../api/search/package?q=xyz
&lt;/p&gt;
&lt;p&gt;
Query parameters:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;q is keyword string (searches name, title, tags by default)
&lt;ul&gt;&lt;li&gt;split by words and ANDed
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;additional parameters for specific fields
&lt;/li&gt;&lt;li&gt;qjson is alternative to q for Searching by specific fields (in addition to keyword string). Payload to json is a JSON-encoded dict which is a dictionary with a q field for free text (keywords) and additional key/value pairs for specific fields
&lt;ul&gt;&lt;li&gt;if q and qjson specified ignore q and just process qjson value
&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Additional parameters in addition to query ("q" or "qjson") are:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;limit
&lt;/li&gt;&lt;li&gt;offset
&lt;/li&gt;&lt;li&gt;fullinfo=0/1 - return full record for each result (default=0)
&lt;/li&gt;&lt;li&gt;order_by=field_name
&lt;/li&gt;&lt;li&gt;search_notes=0/1 (default 0) do we search notes field in a keyword search
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Return value is json encoded dictionary with keys:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;'results': list of results
&lt;/li&gt;&lt;li&gt;'count': total number of results
&lt;/li&gt;&lt;/ul&gt;&lt;h3 id="Extrasforthefuture"&gt;Extras (for the future)&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Prioritisation is not part of this ticket (requires fulltext support in DB or in external app such as Xapian)
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/108#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/110</link>
        <guid isPermaLink="false">http://localhost/ticket/110</guid>
        <title>#110: Integrate groups into packages</title>
        <pubDate>Mon, 07 Sep 2009 09:32:36 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;ol&gt;&lt;li&gt;Package needs a groups property (backref Group.packages).
&lt;/li&gt;&lt;li&gt;Put groups in the search api.
&lt;/li&gt;&lt;li&gt;Display them on the package, but not editable. (Only editable from the group page.)
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;
Follow up to &lt;a class="closed ticket" href="http://localhost/ticket/105" title="enhancement: Package groups (view) (closed: fixed)"&gt;ticket:105&lt;/a&gt; (Groups).
&lt;/p&gt;
&lt;p&gt;
Cost: 1d
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/110#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/116</link>
        <guid isPermaLink="false">http://localhost/ticket/116</guid>
        <title>#116: Access Control - edited in wui</title>
        <pubDate>Tue, 15 Sep 2009 17:13:22 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Based on a section of &lt;a class="wiki" href="http://localhost/wiki/AccessControl"&gt;AccessControl&lt;/a&gt; design:
WUI gives controls to user and administrator to change permissions on a package.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/116#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/126</link>
        <guid isPermaLink="false">http://localhost/ticket/126</guid>
        <title>#126: Change package state in the WUI (delete and undelete)</title>
        <pubDate>Thu, 24 Sep 2009 10:52:51 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
As a Package Admin I want to change the state of the package. In particular I wish to delete and undelete it.
&lt;/p&gt;
&lt;p&gt;
(NB: this is quite separate from "purging" objects which is the term we shall use for irrevocable removal of an object from the domain model).
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Only Package Admins (and sysadmins) should be able to change state
&lt;/li&gt;&lt;/ul&gt;&lt;h2 id="ImplementationSuggestions"&gt;Implementation Suggestions&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;'delete' action should be renamed to 'change-state' (NB: this requires a db migration ...)
&lt;/li&gt;&lt;li&gt;Have new package formalchemy form (created via inheritance?) to incorporate state attribute. Suggest this is rendered as a dropdown (and may be simple object rendering of state, i.e. do NOT need to change it to a single name such 'active').
&lt;/li&gt;&lt;li&gt;This form should then be used when the user satisfies is_authorized(..., model.Action.CHANGE_STATE) instead of the usual fieldset
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/126#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/130</link>
        <guid isPermaLink="false">http://localhost/ticket/130</guid>
        <title>#130: Create a New Group via the WUI</title>
        <pubDate>Mon, 28 Sep 2009 09:30:12 GMT</pubDate>
        
        <dc:creator>rgrp</dc:creator>

        <description>&lt;h2 id="Asa"&gt;As a&lt;/h2&gt;
&lt;p&gt;
User
&lt;/p&gt;
&lt;h2 id="Iwantto"&gt;I want to&lt;/h2&gt;
&lt;p&gt;
Create a new group via the WUI
&lt;/p&gt;
&lt;h2 id="Details"&gt;Details&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;locate at /group/new/
&lt;/li&gt;&lt;li&gt;You must be logged in to create a group
&lt;/li&gt;&lt;li&gt;Group creator is automatically given role of group admin
&lt;/li&gt;&lt;li&gt;Edit screen is same as edit screen ...
&lt;/li&gt;&lt;/ul&gt;</description>
        <category>Results</category>
        <comments>http://localhost/ticket/130#changelog</comments>
    </item><item>
        <link>http://localhost/ticket/111</link>
        <guid isPermaLink="false">http://localhost/ticket/111</guid>
        <title>#111: Create user object</title>
        <pubDate>Mon, 07 Sep 2009 09:33:14 GMT</pubDate>
        
        <dc:creator>dread</dc:creator>

        <description>&lt;p&gt;
Object properties:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;id (uuid)
&lt;/li&gt;&lt;li&gt;apikey (uuid) -- migrated from the apikey table
&lt;/li&gt;&lt;li&gt;name (username = openid)
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
/account is being renamed to /user in the wui.
&lt;/p&gt;
</description>
        <category>Results</category>
        <comments>http://localhost/ticket/111#changelog</comments>
    </item>
 </channel>
</rss>