ticket	PosixTime	author	newvalue
4	1220900713000000	rgrp	Dependent on upgrade to vdm v0.2 (sqlalchemy). Once that is done should be fairly simple (can port query stuff from microfacts?).
4	1223908381000000	rgrp	r368. Search by package title and name implemented. Other options will become separate tickets.
5	1157371211000000	rgrp	See changeset:37 (searching for packages) and changeset:38 (A-Z finding)
5	1185473622000000	rgrp	See r64 ff.
7	1157371311000000	rgrp	See changeset:39
7	1204136209000000	rgrp	"No longer have concept of releases in CKAN domain model (if we did with vdm could now implement simply as a package at a particular point in time).
"
8	1204135181000000	rgrp	Probably part of ticket:43 (generic attributes) now so downgrading priority (also release no longer exists as a part of CKAN domain model).
8	1250619147000000	rgrp	Not part of domain model conception for a long time so closing. If we need something like this can open a new ticket.
11	1157371568000000	rgrp	See changeset:39
12	1157371398000000	rgrp	See changeset:39
12	1204135071000000	rgrp	No longer have concept of releases in CKAN domain model (if we did with vdm could now implement simply as a package at a particular point in time).
13	1157373546000000	rgrp	See changeset:39
13	1218545330000000	rgrp	No longer have concept of releases in CKAN domain model. See ticket:12.
14	1157371389000000	rgrp	See changeset:39
14	1204136163000000	rgrp	"No longer have concept of releases in CKAN domain model (if we did with vdm could now implement simply as a package at a particular point in time).
"
15	1204135174000000	rgrp	Probably part of ticket:43 (generic attributes) now so downgrading priority (also release no longer exists as a part of CKAN domain model).
15	1250619139000000	rgrp	Not part of domain model conception for a long time so closing. If we need something like this can open a new ticket.
16	1204135164000000	rgrp	Probably part of ticket:43 (generic attributes) now so downgrading priority (also release no longer exists as a part of CKAN domain model).
16	1250619162000000	rgrp	Not part of domain model conception for a long time so closing. If we need something like this can open a new ticket.
17	1204135155000000	rgrp	Probably part of ticket:43 (generic attributes) now so downgrading priority (also release no longer exists as a part of CKAN domain model).
17	1250619180000000	rgrp	Not part of domain model conception for a long time so closing. If we need something like this can open a new ticket.
18	1199787607000000	rgrp	At present we do not have a person domain object on the system as we use openid for authentication and only use username for logging etc. May change this at some point in future but at that point can reopen.
19	1199787631000000	rgrp	At present we do not have a person domain object on the system as we use openid for authentication and only use username for logging etc. May change this at some point in future but at that point can reopen.
20	1185473187000000	rgrp	One can do this from python via the model API. Resolved with use of vdm back in r121.
21	1254740405000000	dread	Done as part of ticket:126
22	1199787243000000	rgrp	At present we do not have a person domain object on the system as we use openid for authentication and only use username for logging etc. May change this at some point in future but at that point can reopen.
23	1176473102000000	cheaptix	"<a href='http://www.termargallery.com/images/media/cheap-airline-tickets.html '>cheap airline tickets</a> 
<a href='http://www.termargallery.com/images/media/cheap-plane-tickets.html '>cheap plane tickets</a> 
<a href='http://www.termargallery.com/images/media/cheap-tickets-london.html '>cheap tickets london</a> 
<a href='http://www.termargallery.com/images/media/cheap-airplane-tickets.html '>cheap airplane tickets</a> 
<a href='http://www.termargallery.com/images/media/dirt-cheap-tickets.html '>dirt cheap tickets</a> 
<a href='http://www.termargallery.com/images/media/cheap-concert-tickets.html '>cheap concert tickets</a> 
<a href='http://www.termargallery.com/images/media/cheap-flight-tickets.html '>cheap flight tickets</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-paris.html '>cheap flights paris</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-sydney.html '>cheap flights sydney</a> 
<a href='http://www.termargallery.com/images/media/cheap-air-flights.html '>cheap air flights</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-dubai.html '>cheap flights dubai</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-rome.html '>cheap flights rome</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-prague.html '>cheap flights prague</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-manila.html '>cheap flights manila</a> 
<a href='http://www.termargallery.com/images/media/cheap-air-flights-array.html '>cheap air flights array</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-to-europe.html '>cheap flights to europe</a> 
<a href='http://www.termargallery.com/images/media/cheap-flights-uk.html '>cheap flights uk</a> 
<a href='http://www.termargallery.com/images/media/cheap-international-flights.html '>cheap international flights</a> 
<a href='http://www.termargallery.com/images/media/cheap-airfares-manila.html '>cheap airfares manila</a>"
23	1176819354000000	imagesdische	"<a href='http://worldsportnetwork.com/images/cheap-air-flights-array.html '>cheap air flights array</a> 
<a href='http://worldsportnetwork.com/images/cheap-airplane-tickets.html '>cheap airplane tickets</a> 
<a href='http://worldsportnetwork.com/images/cheap-cell-phones.html '>cheap cell phones</a> 
<a href='http://worldsportnetwork.com/images/cheap-checks.html '>cheap checks</a> 
<a href='http://worldsportnetwork.com/images/cheap-cigarettes.html '>cheap cigarettes</a> 
<a href='http://worldsportnetwork.com/images/cheap-cruises.html '>cheap cruises</a> 
<a href='http://worldsportnetwork.com/images/cheap-discount-airfare.html '>cheap discount airfare</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-dubai.html '>cheap flights dubai</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-manila.html '>cheap flights manila</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-paris.html '>cheap flights paris</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-prague.html '>cheap flights prague</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-rome.html '>cheap flights rome</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-sydney.html '>cheap flights sydney</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-to-europe.html '>cheap flights to europe</a> 
<a href='http://worldsportnetwork.com/images/cheap-flights-uk.html '>cheap flights uk</a> 
<a href='http://worldsportnetwork.com/images/cheap-flight-tickets.html '>cheap flight tickets</a> 
<a href='http://worldsportnetwork.com/images/cheap-international-flights.html '>cheap international flights</a> 
<a href='http://worldsportnetwork.com/images/cheap-plane-tickets.html '>cheap plane tickets</a> 
<a href='http://worldsportnetwork.com/images/cheap-shoes.html '>cheap shoes</a> 
<a href='http://worldsportnetwork.com/images/cheap-textbooks.html '>cheap textbooks</a> 
<a href='http://worldsportnetwork.com/images/cheap-tires.html '>cheap tires</a> 
<a href='http://worldsportnetwork.com/images/cheap-train-tickets.html '>cheap train tickets</a> 
<a href='http://worldsportnetwork.com/images/coach-outlet.html '>coach outlet</a> 
<a href='http://worldsportnetwork.com/images/dirt-cheap-tickets.html '>dirt cheap tickets</a> 
<a href='http://worldsportnetwork.com/images/discount-airline-tickets.html '>discount airline tickets</a> 
<a href='http://worldsportnetwork.com/images/discount-auto-parts.html '>discount auto parts</a> 
<a href='http://worldsportnetwork.com/images/discount-carpet.html '>discount carpet</a> 
<a href='http://worldsportnetwork.com/images/discount-clothing.html '>discount clothing</a> 
<a href='http://worldsportnetwork.com/images/discount-cologne.html '>discount cologne</a> 
<a href='http://worldsportnetwork.com/images/discount-cosmetics.html '>discount cosmetics</a> 
<a href='http://worldsportnetwork.com/images/discount-cruises.html '>discount cruises</a> 
<a href='http://worldsportnetwork.com/images/discount-fabric.html '>discount fabric</a> 
<a href='http://worldsportnetwork.com/images/discount-fragrance.html '>discount fragrance</a> 
<a href='http://worldsportnetwork.com/images/discount-jewelry.html '>discount jewelry</a> 
<a href='http://worldsportnetwork.com/images/discount-kitchen-cabinets.html '>discount kitchen cabinets</a> 
<a href='http://worldsportnetwork.com/images/discount-lighting.html '>discount lighting</a> 
<a href='http://worldsportnetwork.com/images/discount-lodging.html '>discount lodging</a> 
<a href='http://worldsportnetwork.com/images/discount-luggage.html '>discount luggage</a> 
<a href='http://worldsportnetwork.com/images/discount-motorcycle-tires.html '>discount motorcycle tires</a> 
<a href='http://worldsportnetwork.com/images/discount-perfume.html '>discount perfume</a> 
<a href='http://worldsportnetwork.com/images/discount-rugs.html '>discount rugs</a> 
<a href='http://worldsportnetwork.com/images/discount-shoes.html '>discount shoes</a> 
<a href='http://worldsportnetwork.com/images/discount-sunglasses.html '>discount sunglasses</a> 
<a href='http://worldsportnetwork.com/images/discount-tire.html '>discount tire</a> 
<a href='http://worldsportnetwork.com/images/discount-wheels.html '>discount wheels</a> 
<a href='http://worldsportnetwork.com/images/hair-straightener.html '>hair straightener</a> 
<a href='http://worldsportnetwork.com/images/sears-outlet.html '>sears outlet</a>"
23	1176986042000000	cheap-n-save	"<a href='http://ach-payments.com/template/cheap-airfare.html '>cheap airfare</a> 
<a href='http://ach-payments.com/template/cheap-air-flights-array.html '>cheap air flights array</a> 
<a href='http://ach-payments.com/template/cheap-airline-flights.html '>cheap airline flights</a> 
<a href='http://ach-payments.com/template/cheap-airline-tickets.html '>cheap airline tickets</a> 
<a href='http://ach-payments.com/template/cheap-airplane-tickets.html '>cheap airplane tickets</a> 
<a href='http://ach-payments.com/template/cheap-air-tickets.html '>cheap air tickets</a> 
<a href='http://ach-payments.com/template/cheap-cell-phones.html '>cheap cell phones</a> 
<a href='http://ach-payments.com/template/cheap-checks.html '>cheap checks</a> 
<a href='http://ach-payments.com/template/cheap-cigarettes.html '>cheap cigarettes</a> 
<a href='http://ach-payments.com/template/cheap-cruises.html '>cheap cruises</a> 
<a href='http://ach-payments.com/template/cheap-discount-airfare.html '>cheap discount airfare</a> 
<a href='http://ach-payments.com/template/cheap-flights-dubai.html '>cheap flights dubai</a> 
<a href='http://ach-payments.com/template/cheap-flights-manila.html '>cheap flights manila</a> 
<a href='http://ach-payments.com/template/cheap-flights-paris.html '>cheap flights paris</a> 
<a href='http://ach-payments.com/template/cheap-flights-prague.html '>cheap flights prague</a> 
<a href='http://ach-payments.com/template/cheap-flights-rome.html '>cheap flights rome</a> 
<a href='http://ach-payments.com/template/cheap-flights-sydney.html '>cheap flights sydney</a> 
<a href='http://ach-payments.com/template/cheap-flights-to-europe.html '>cheap flights to europe</a> 
<a href='http://ach-payments.com/template/cheap-flights-uk.html '>cheap flights uk</a> 
<a href='http://ach-payments.com/template/cheap-flight-tickets.html '>cheap flight tickets</a> 
<a href='http://ach-payments.com/template/cheap-international-flights.html '>cheap international flights</a> 
<a href='http://ach-payments.com/template/cheap-plane-tickets.html '>cheap plane tickets</a> 
<a href='http://ach-payments.com/template/cheap-shoes.html '>cheap shoes</a> 
<a href='http://ach-payments.com/template/cheap-textbooks.html '>cheap textbooks</a> 
<a href='http://ach-payments.com/template/cheap-tires.html '>cheap tires</a> 
<a href='http://ach-payments.com/template/cheap-train-tickets.html '>cheap train tickets</a>"
23	1177064500000000	discounts	"<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3658.html '>discount airfare</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3659.html '>discount air fares</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3660.html '>discount airlines</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3661.html '>discount airline tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3662.html '>discount air travel</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3663.html '>discount auto parts</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3664.html '>discount carpet</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3665.html '>discount clothing</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3666.html '>discount cologne</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3667.html '>discount cosmetics</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3668.html '>discount cruises</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3669.html '>discount fabric</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3670.html '>discount flights</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3671.html '>discount fragrance</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3672.html '>discount jewelry</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3673.html '>discount kitchen cabinets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3674.html '>discount lighting</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3675.html '>discount lodging</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3676.html '>discount luggage</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3677.html '>discount motorcycle tires</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3678.html '>discount perfume</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3679.html '>discount plane tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3680.html '>discount rugs</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3681.html '>discount shoes</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3682.html '>discount sunglasses</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3683.html '>discount tire</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3684.html '>discount tire direct</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3685.html '>discount tires online</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/thumb_IMG_3686.html '>discount wheels</a>"
23	1177340490000000	partsforu	"<a href='http://adsenseready.com/ebay/aftermarket-car-parts.html '>aftermarket car parts</a> 
<a href='http://adsenseready.com/ebay/antique-car-parts.html '>antique car parts</a> 
<a href='http://adsenseready.com/ebay/appliance-parts.html '>appliance parts</a> 
<a href='http://adsenseready.com/ebay/atv-parts.html '>atv parts</a> 
<a href='http://adsenseready.com/ebay/boat-trailer-parts.html '>boat trailer parts</a> 
<a href='http://adsenseready.com/ebay/car-parts.html '>car parts</a> 
<a href='http://adsenseready.com/ebay/chevy-truck-parts.html '>chevy truck parts</a> 
<a href='http://adsenseready.com/ebay/classic-car-parts.html '>classic car parts</a> 
<a href='http://adsenseready.com/ebay/corvette-parts.html '>corvette parts</a> 
<a href='http://adsenseready.com/ebay/custom-car-parts.html '>custom car parts</a> 
<a href='http://adsenseready.com/ebay/custom-motorcycle-parts.html '>custom motorcycle parts</a> 
<a href='http://adsenseready.com/ebay/diesel-truck-parts.html '>diesel truck parts</a> 
<a href='http://adsenseready.com/ebay/discount-motorcycle-parts.html '>discount motorcycle parts</a> 
<a href='http://adsenseready.com/ebay/dodge-parts.html '>dodge parts</a> 
<a href='http://adsenseready.com/ebay/dodge-truck-parts.html '>dodge truck parts</a> 
<a href='http://adsenseready.com/ebay/ford-auto-parts.html '>ford auto parts</a> 
<a href='http://adsenseready.com/ebay/ford-auto-parts.html '>ford mustang parts</a> 
<a href='http://adsenseready.com/ebay/ford-oem-parts.html '>ford oem parts</a> 
<a href='http://adsenseready.com/ebay/ford-ranger-parts.html '>ford ranger parts</a> 
<a href='http://adsenseready.com/ebay/ford-tractor-parts.html '>ford tractor parts</a> 
<a href='http://adsenseready.com/ebay/ford-truck-parts.html '>ford truck parts</a> 
<a href='http://adsenseready.com/ebay/ge-appliance-parts.html '>ge appliance parts</a> 
<a href='http://adsenseready.com/ebay/genuine-toyota-parts.html '>genuine toyota parts</a> 
<a href='http://adsenseready.com/ebay/gm-parts.html '>gm parts</a> 
<a href='http://adsenseready.com/ebay/gm-performance-parts.html '>gm performance parts</a> 
<a href='http://adsenseready.com/ebay/gun-parts.html '>gun parts</a> 
<a href='http://adsenseready.com/ebay/harley-davidson-parts.html '>harley davidson parts</a> 
<a href='http://adsenseready.com/ebay/honda-atv-parts.html '>honda atv parts</a> 
<a href='http://adsenseready.com/ebay/honda-car-parts.html '>honda car parts</a> 
<a href='http://adsenseready.com/ebay/honda-motorcycle-parts.html '>honda motorcycle parts</a> 
<a href='http://adsenseready.com/ebay/jeep-parts.html '>jeep parts</a> 
<a href='http://adsenseready.com/ebay/mercedes-parts.html '>mercedes parts</a> 
<a href='http://adsenseready.com/ebay/motorcycle-parts.html '>motorcycle parts</a> 
<a href='http://adsenseready.com/ebay/napa-auto-parts.html '>napa auto parts</a> 
<a href='http://adsenseready.com/ebay/nissan-parts.html '>nissan parts</a> 
<a href='http://adsenseready.com/ebay/polaris-atv-parts.html '>polaris atv parts</a> 
<a href='http://adsenseready.com/ebay/sears-appliance-parts.html '>sears appliance parts</a> 
<a href='http://adsenseready.com/ebay/sears-parts.html '>sears parts</a>"
23	1177416347000000	airlinetickets	"<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets.html '>cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-london.html '>cheap airline tickets london</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-italy.html '>airline tickets italy</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets.html '>cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets.html '>dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airline-tickets.html '>low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-dirt-cheap-airline-tickets.html '>robots dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-low-cost-airline-tickets.html '>robots low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discounted-airline-tickets.html '>discounted airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-cheep-airline-tickets.html '>robots cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-discounted-airline-tickets.html '>robots discounted airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets.html '>discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-cheap-airline-tickets.html '>robots cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-cheap-airline-tickets-flights.html '>robots cheap airline tickets flights</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-low-cost-airline-tickets.html '>first class low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-air-flights-low-cost-airline-tickets.html '>cheap air flights low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-sexy-nude-bangkok-manila-www-com.html '>airline tickets sexy nude bangkok manila www com</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-dirt-cheap-airline-tickets.html '>first class dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/aeroflot-airline-tickets.html '>aeroflot airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-online-cheap.html '>airline tickets online cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-discounted-airline-tickets.html '>first class discounted airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-flight-tickets-cheap-airline-tickets.html '>airline flight tickets cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-cheep-airline-tickets.html '>first class cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-sexy-islands-hawaii-miami-florida-travel.html '>airline tickets sexy islands hawaii miami florida travel</a> 
 
<a href='http://greysanatomyonline.com/poll/las-vegas-hotels-airline-tickets.html '>las vegas hotels airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheapest-airline-tickets.html '>cheapest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-cheap-airline-tickets.html '>first class cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-travl-new-zealand.html '>dirt cheap airline tickets travl new zealand</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-cheap-airline-tickets-flights.html '>first class cheap airline tickets flights</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-cheap-discounte-airline-ticket.html '>discount airline tickets cheap discounte airline ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheep-cheep-tickets.html '>airline tickets cheep cheep tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-cheep-tickets.html '>cheep airline tickets cheep tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/book-airline-tickets.html '>book airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-cruises-carribean-airline-tickets-flights.html '>cheap cruises carribean airline tickets flights</a> 
 
<a href='http://greysanatomyonline.com/poll/cheapest-plane-tickets-flights-airline-flight-ticket.html '>cheapest plane tickets flights airline flight ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-flights-paris-france-madrid-spain.html '>airline tickets flights paris france madrid spain</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-paris-london-rome-amsterdam.html '>airline tickets paris london rome amsterdam</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-ticket-cheep-airline-tickets.html '>cheep airline ticket cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discounted-flights.html '>airline tickets discounted flights</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airlines-cheep-airline-tickets.html '>cheep airlines cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-airline-tickets-cheap-international-flights.html '>first class airline tickets cheap international flights</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheap-last-minute.html '>airline tickets cheap last minute</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-brazil-rio-de-janeiro.html '>dirt cheap airline tickets brazil rio de janeiro</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheep-cheep-airline-tickets.html '>airline tickets cheep cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-really-cheap-airline-ticket.html '>airline tickets really cheap airline ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-discounted-airline-tickets-discounted-airline-tickets.html '>cheap discounted airline tickets discounted airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discounted-flights-airline-tickets-cheap-flights-airline.html '>discounted flights airline tickets cheap flights airline</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-com-cheep-airline-tickets.html '>cheep airline tickets com cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheap.html '>airline tickets cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/last-minute-airline-tickets.html '>last minute airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/southwest-airline-tickets.html '>southwest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-student-airline-fares.html '>airline tickets student airline fares</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-brazil-panama-chile.html '>cheap airline tickets brazil panama chile</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-for-dirt-cheap-dirt-cheap-airline-tickets.html '>airline tickets for dirt cheap dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-discounted-flights-airline-tickets.html '>cheap discounted flights airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-discounted-airline-tickets-europe.html '>cheap discounted airline tickets europe</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-australia-cheep-airline-tickets.html '>cheep airline tickets australia cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-online-airline-flight-ticket.html '>dirt cheap airline tickets online airline flight ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-search-cheap-airfares.html '>airline tickets search cheap airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-economy-airticket.html '>airline tickets economy airticket</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-argentina-brazil-airline-tickets.html '>cheap argentina brazil airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheapest-airline-tickets-online-cheap-air-flight-ticket.html '>cheapest airline tickets online cheap air flight ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/southwest-reservation-desk-airline-tickets-airlines-com.html '>southwest reservation desk airline tickets airlines com</a> 
 
<a href='http://greysanatomyonline.com/poll/fly-cheap-airline-tickets-cheap-flights-airfares.html '>fly cheap airline tickets cheap flights airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-argentina-brazil.html '>discount airline tickets argentina brazil</a> 
 
<a href='http://greysanatomyonline.com/poll/discounted-airline-tickets-discounted-airline-tickets.html '>discounted airline tickets discounted airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-london-cheep-airline-tickets.html '>cheep airline tickets london cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheap-international-flights.html '>airline tickets cheap international flights</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-northwest-airline.html '>airline tickets northwest airline</a> 
 
<a href='http://greysanatomyonline.com/poll/last-minute-airline-tickets-online-cheap-air-flights.html '>last minute airline tickets online cheap air flights</a> 
 
<a href='http://greysanatomyonline.com/poll/business-economy-airline-tickets-flights.html '>business economy airline tickets flights</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airline-tickets-low-cost-airline-tickets.html '>low cost airline tickets low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airlinetickets.html '>airlinetickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-delta-airline.html '>airline tickets delta airline</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-cheap-dirt-ticket-dirt-cheap-airline-tickets.html '>airline cheap dirt ticket dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-dirt-cheap-dirt-cheap-airline-tickets.html '>airline tickets dirt cheap dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airlines-tickets.html '>cheap airlines tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/manila-cebu-airline-tickets-hotels.html '>manila cebu airline tickets hotels</a> 
 
<a href='http://greysanatomyonline.com/poll/domestic-airline-tickets-domestic-travel.html '>domestic airline tickets domestic travel</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-airline-discount-central.html '>discount airline tickets airline discount central</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discount-airline-ticket.html '>airline tickets discount airline ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-cheap-airfares-low-cost-airline-tickets.html '>low cost cheap airfares low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-ticket-dirt-cheap-airline-tickets.html '>dirt cheap airline ticket dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-usa-cheap-flights-from-usa.html '>dirt cheap airline tickets usa cheap flights from usa</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-dirt-cheap-airline-tickets.html '>dirt cheap airline tickets dirt cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discounts-flights-cheap-flights-airfares.html '>airline tickets discounts flights cheap flights airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-online-cheap-flights-airfares.html '>dirt cheap airline tickets online cheap flights airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-international-airline-tickets.html '>cheap international airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheap-airline-fares.html '>airline tickets cheap airline fares</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-military-airline-tickets-airline-discount-central.html '>discount military airline tickets airline discount central</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-low-cost-airline-tickets-low-cost-airline-tickets.html '>cheap low cost airline tickets low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-tickets-south-america-low-cost-airline-tickets.html '>low cost tickets south america low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airline-ticket-low-cost-airline-tickets.html '>low cost airline ticket low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-cheap-first-class-airfares.html '>airline tickets cheap first class airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/coach-class-airfares-low-cost-airline-tickets.html '>coach class airfares low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-economy-ticket-low-cost-airline-tickets.html '>low cost economy ticket low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-car-rentals-low-cost-airline-tickets.html '>low cost car rentals low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/australia-sydney-hotels-flights-airline-tickets.html '>australia sydney hotels flights airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/australia-airline-tickets-travel.html '>australia airline tickets travel</a> 
 
<a href='http://greysanatomyonline.com/poll/continental-airline-tickets.html '>continental airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-online.html '>cheap airline tickets online</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-hotels-flights-travel-low-cost-airline-tickets.html '>low cost hotels flights travel low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/southwest-reservation-desk-airline-tickets-airline-flights.html '>southwest reservation desk airline tickets airline flights</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-philippine.html '>cheap airline tickets philippine</a> 
 
<a href='http://greysanatomyonline.com/poll/japan-airlines-tickets-cargo-reservation-flights-tokyo.html '>japan airlines tickets cargo reservation flights tokyo</a> 
 
<a href='http://greysanatomyonline.com/poll/phillippine-airline-tickets-flights-travel.html '>phillippine airline tickets flights travel</a> 
 
<a href='http://greysanatomyonline.com/poll/business-first-class-airline-tickets-philippine.html '>business first class airline tickets philippine</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-cheap-flights-to-london.html '>cheap airline tickets cheap flights to london</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airfares-low-cost-airline-tickets.html '>low cost airfares low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-flights-flights.html '>airline tickets flights flights</a> 
 
<a href='http://greysanatomyonline.com/poll/international-airline-tickets.html '>international airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/inexpensive-airline-tickets.html '>inexpensive airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/singapore-flights-airline-tickets-travel-dirt-cheap.html '>singapore flights airline tickets travel dirt cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airfares-london-england-low-cost-airline-tickets.html '>low cost airfares london england low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/really-cheap-airline-tickets.html '>really cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-airline-tickets-flights-low-cost-airline-tickets.html '>low cost airline tickets flights low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/latin-america-travel-airline-tickets.html '>latin america travel airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-singapore-japan-airlines.html '>airline tickets singapore japan airlines</a> 
 
<a href='http://greysanatomyonline.com/poll/student-airline-tickets.html '>student airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-online.html '>airline tickets online</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discounted-airlines-cheap-air-flight-ticket.html '>airline tickets discounted airlines cheap air flight ticket</a> 
 
<a href='http://greysanatomyonline.com/poll/delta-airline-tickets.html '>delta airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/free-airline-tickets.html '>free airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/very-cheap-airline-tickets.html '>very cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-travel-tokyo-japan-nude-first-class-tickets.html '>airline tickets travel tokyo japan nude first class tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/bargain-airline-tickets.html '>bargain airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/favicon-low-cost-airline-tickets.html '>favicon low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-fares-lax-low-cost-airline-tickets.html '>low cost fares lax low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/robots-airline-tickets-cheap-international-flights.html '>robots airline tickets cheap international flights</a> 
 
<a href='http://greysanatomyonline.com/poll/student-discount-airline-tickets-airline-discount-central.html '>student discount airline tickets airline discount central</a> 
 
<a href='http://greysanatomyonline.com/poll/one-way-airline-tickets.html '>one way airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-go-american-airlines.html '>airline tickets go american airlines</a> 
 
<a href='http://greysanatomyonline.com/poll/purchase-airline-tickets-online.html '>purchase airline tickets online</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discount.html '>airline tickets discount</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-hawaii.html '>airline tickets to hawaii</a> 
 
<a href='http://greysanatomyonline.com/poll/low-fare-airline-tickets.html '>low fare airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/military-discount-airline-tickets.html '>military discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-low-price.html '>airline tickets low price</a> 
 
<a href='http://greysanatomyonline.com/poll/student-discount-airline-tickets.html '>student discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discounted-airline-tickets-china-beijing.html '>discounted airline tickets china beijing</a> 
 
<a href='http://greysanatomyonline.com/poll/favicon-cheep-airline-tickets.html '>favicon cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-military-airline-tickets.html '>discount military airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/online-airline-tickets.html '>online airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-southwest-airline-tickets.html '>cheap southwest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/buy-airline-tickets-online.html '>buy airline tickets online</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-last-minute-airline-tickets.html '>cheap last minute airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/low-price-airline-tickets.html '>low price airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheapest-airline-tickets-cheap-flights-to-paris.html '>cheapest airline tickets cheap flights to paris</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-tokyo-japan.html '>cheap airline tickets tokyo japan</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-india.html '>cheap airline tickets to india</a> 
 
<a href='http://greysanatomyonline.com/poll/orbitz-airline-tickets.html '>orbitz airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/osaka-tokyo-nrt-osa-japan-fligts-airline-tickets.html '>osaka tokyo nrt osa japan fligts airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-canadian-airline-tickets.html '>cheap canadian airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-usa-international-cheap-flights-from-usa.html '>airline tickets usa international cheap flights from usa</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-florida.html '>airline tickets to florida</a> 
 
<a href='http://greysanatomyonline.com/poll/book-airline-tickets-flights-japan.html '>book airline tickets flights japan</a> 
 
<a href='http://greysanatomyonline.com/poll/hawaii-airline-tickets.html '>hawaii airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-for-students.html '>cheap airline tickets for students</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-las-vegas.html '>cheap airline tickets to las vegas</a> 
 
<a href='http://greysanatomyonline.com/poll/last-minute-cheap-airline-tickets.html '>last minute cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/alaska-airline-tickets.html '>alaska airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/buy-airline-tickets.html '>buy airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/bid-for-airline-tickets.html '>bid for airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-international-airline-tickets.html '>discount international airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-europe.html '>cheap airline tickets to europe</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-canada.html '>cheap airline tickets canada</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-air-flights-low-cost-airline-tickets-st.html '>cheap air flights low cost airline tickets st</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-orlando.html '>airline tickets to orlando</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-student-airline-tickets.html '>cheap student airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-mexico.html '>cheap airline tickets to mexico</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-low-cost-airfare.html '>cheap airline tickets low cost airfare</a> 
 
<a href='http://greysanatomyonline.com/poll/best-time-to-buy-airline-tickets.html '>best time to buy airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/first-class-airline-tickets.html '>first class airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/united-airline-tickets.html '>united airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/spirit-airline-tickets.html '>spirit airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/jet-blue-airline-tickets.html '>jet blue airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-low-fare-paris-france.html '>airline tickets low fare paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/bid-on-airline-tickets.html '>bid on airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-florida.html '>cheap airline tickets to florida</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-italy.html '>cheap airline tickets to italy</a> 
 
<a href='http://greysanatomyonline.com/poll/low-airline-tickets.html '>low airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-to-europe.html '>discount airline tickets to europe</a> 
 
<a href='http://greysanatomyonline.com/poll/las-vegas-airline-tickets.html '>las vegas airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-london.html '>cheap airline tickets to london</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-hawaii.html '>cheap airline tickets to hawaii</a> 
 
<a href='http://greysanatomyonline.com/poll/travel-airline-tickets.html '>travel airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/american-airline-tickets.html '>american airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-las-vegas.html '>airline tickets to las vegas</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-airline-tickets-cheap-international-flights.html '>airline tickets airline tickets cheap international flights</a> 
 
<a href='http://greysanatomyonline.com/poll/singapore-airline-tickets-flights-travel.html '>singapore airline tickets flights travel</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-one-way-airline-tickets.html '>cheap one way airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-europe.html '>cheap airline tickets europe</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-rio-de-janeiro-brazil.html '>cheap airline tickets rio de janeiro brazil</a> 
 
<a href='http://greysanatomyonline.com/poll/low-cost-flights-american-airlines-low-cost-airline-tickets.html '>low cost flights american airlines low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dirt-cheap-airline-tickets-online.html '>dirt cheap airline tickets online</a> 
 
<a href='http://greysanatomyonline.com/poll/paris-france-travel-airline-tickets-cheapest.html '>paris france travel airline tickets cheapest</a> 
 
<a href='http://greysanatomyonline.com/poll/best-airline-tickets.html '>best airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/purchase-airline-tickets-cheap.html '>purchase airline tickets cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/bereavement-airline-tickets.html '>bereavement airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/lowest-airline-tickets.html '>lowest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/purchase-airline-tickets.html '>purchase airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-brazil-bargain.html '>airline tickets brazil bargain</a> 
 
<a href='http://greysanatomyonline.com/poll/discounts-for-students-on-airline-tickets.html '>discounts for students on airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/lowest-price-airline-tickets.html '>lowest price airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/buying-cheap-airline-tickets.html '>buying cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheapest-airline-tickets-available.html '>cheapest airline tickets available</a> 
 
<a href='http://greysanatomyonline.com/poll/priceline-airline-tickets.html '>priceline airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/college-student-discount-airline-tickets.html '>college student discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/deep-discount-airline-tickets.html '>deep discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-europe-paris-france.html '>airline tickets europe paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-discounted-flights-st.html '>airline tickets discounted flights st</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-business-class-airline-tickets.html '>discount business class airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/delta-airlines-tickets.html '>delta airlines tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-airline-tickets-low-cost.html '>new zealand airline tickets low cost</a> 
 
<a href='http://greysanatomyonline.com/poll/affordable-airline-tickets.html '>affordable airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/dicount-airline-tickets.html '>dicount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/buy-cheap-airline-tickets.html '>buy cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/favicon-cheap-airline-tickets.html '>favicon cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/japanes-airline-tickets.html '>japanes airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/northwest-airline-tickets.html '>northwest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/consolidator-airline-tickets.html '>consolidator airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/round-the-world-airline-tickets.html '>round the world airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/wholesale-airline-tickets.html '>wholesale airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-united-brasilia-airlines.html '>airline tickets united brasilia airlines</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-london.html '>airline tickets london</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-to-hawaii.html '>discount airline tickets to hawaii</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-last-minute-airline-tickets.html '>new zealand last minute airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discounted-airline-tickets-flights-japan.html '>discounted airline tickets flights japan</a> 
 
<a href='http://greysanatomyonline.com/poll/find-cheap-airline-tickets.html '>find cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheat-airline-tickets.html '>cheat airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/ardeche-france-travel-discount-student-airline-tickets.html '>ardeche france travel discount student airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-flights-airline-tickets.html '>cheap flights airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-domestic-airline-tickets.html '>cheap domestic airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-delta-airlines-rio.html '>airline tickets delta airlines rio</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-low-fares-paris-france.html '>airline tickets low fares paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-italy.html '>airline tickets to italy</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-london.html '>airline tickets to london</a> 
 
<a href='http://greysanatomyonline.com/poll/greece-cheepest-airline-tickets.html '>greece cheepest airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/profile-cheep-airline-tickets.html '>profile cheep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/argentina-brazil-airline-tickets-discounted.html '>argentina brazil airline tickets discounted</a> 
 
<a href='http://greysanatomyonline.com/poll/tokyo-airline-tickets-cheap-fares.html '>tokyo airline tickets cheap fares</a> 
 
<a href='http://greysanatomyonline.com/poll/vivtour-airline-tickets.html '>vivtour airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/best-price-airline-tickets.html '>best price airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/last-minute-airline-tickets-cheap.html '>last minute airline tickets cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-the-philippines.html '>cheap airline tickets to the philippines</a> 
 
<a href='http://greysanatomyonline.com/poll/travel-tip-international-airline-tickets-travel-tips.html '>travel tip international airline tickets travel tips</a> 
 
<a href='http://greysanatomyonline.com/poll/budget-airline-tickets.html '>budget airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-airline-tickets-cheap-fares.html '>new zealand airline tickets cheap fares</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-bangkok-paris-france.html '>airline tickets bangkok paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/air-france-discount-airline-tickets.html '>air france discount airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-military-discount.html '>airline tickets military discount</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-northwest-airline-st.html '>airline tickets northwest airline st</a> 
 
<a href='http://greysanatomyonline.com/poll/rail-travel-france-airline-tickets-cheap-discount.html '>rail travel france airline tickets cheap discount</a> 
 
<a href='http://greysanatomyonline.com/poll/ukraine-cheap-airline-tickets-asia.html '>ukraine cheap airline tickets asia</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-to-orlando.html '>cheap airline tickets to orlando</a> 
 
<a href='http://greysanatomyonline.com/poll/singapore-airline-tickets-to-asia.html '>singapore airline tickets to asia</a> 
 
<a href='http://greysanatomyonline.com/poll/tokyo-airline-tickets-low-fare.html '>tokyo airline tickets low fare</a> 
 
<a href='http://greysanatomyonline.com/poll/where-can-i-find-cheap-airline-tickets.html '>where can i find cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-air-flights-low-cost-airline-tickets-bermuda.html '>cheap air flights low cost airline tickets bermuda</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-air-flights-low-cost-airline-tickets-oita.html '>cheap air flights low cost airline tickets oita</a> 
 
<a href='http://greysanatomyonline.com/poll/tokyo-airline-tickets-for-cheap.html '>tokyo airline tickets for cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/air-travel-france-price-airline-tickets.html '>air travel france price airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-flights-japan.html '>cheap airline tickets flights japan</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-in-canada.html '>cheap airline tickets in canada</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-airline-tickets-kiev.html '>cheap airline tickets kiev</a> 
 
<a href='http://greysanatomyonline.com/poll/brazil-airline-tickets-usa.html '>brazil airline tickets usa</a> 
 
<a href='http://greysanatomyonline.com/poll/australia-sydeny-cheap-airline-tickets-flights-airfares.html '>australia sydeny cheap airline tickets flights airfares</a> 
 
<a href='http://greysanatomyonline.com/poll/expedia-airline-tickets.html '>expedia airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-united-airlines-brazil.html '>airline tickets united airlines brazil</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-greece.html '>airline tickets to greece</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-chicago.html '>airline tickets to chicago</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-south-africa-paris-france.html '>airline tickets south africa paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/air-france-america-travel-discount-and-airline-tickets.html '>air france america travel discount and airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/discount-airline-tickets-canada.html '>discount airline tickets canada</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-really-cheap-airline-tickets.html '>new zealand really cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-bussiness-class-airline-tickets.html '>new zealand bussiness class airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/new-zealand-first-class-airline-tickets.html '>new zealand first class airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-poland-tickets-europe.html '>airline poland tickets europe</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-brazil-europe.html '>airline tickets brazil europe</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-brazil-online.html '>airline tickets brazil online</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-flights-brazil.html '>airline tickets flights brazil</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-flights-poland.html '>airline tickets flights poland</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-for-cheap.html '>airline tickets for cheap</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-northwest-rio-airlines.html '>airline tickets northwest rio airlines</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-thailand-brazil.html '>airline tickets thailand brazil</a> 
 
<a href='http://greysanatomyonline.com/poll/airline-tickets-to-south-america-paris-france.html '>airline tickets to south america paris france</a> 
 
<a href='http://greysanatomyonline.com/poll/frontier-airline-tickets.html '>frontier airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/tokyo-buy-cheap-airline-tickets.html '>tokyo buy cheap airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/tokyo-airline-tickets-low-fares.html '>tokyo airline tickets low fares</a> 
 
<a href='http://greysanatomyonline.com/poll/chep-airline-tickets.html '>chep airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/best-prices-on-airline-tickets.html '>best prices on airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-for-greece-students.html '>cheep airline tickets for greece students</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-flights-japan.html '>cheep airline tickets flights japan</a> 
 
<a href='http://greysanatomyonline.com/poll/cheep-airline-tickets-com-cheep-airline-tickets-st.html '>cheep airline tickets com cheep airline tickets st</a> 
 
<a href='http://greysanatomyonline.com/poll/spain-low-cost-airline-tickets.html '>spain low cost airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/air-france-airline-cheap-airline-tickets-europe.html '>air france airline cheap airline tickets europe</a> 
 
<a href='http://greysanatomyonline.com/poll/cheap-first-class-airline-tickets.html '>cheap first class airline tickets</a> 
 
<a href='http://greysanatomyonline.com/poll/train-travel-in-france-airline-tickets-low-cost.html '>train travel in france airline tickets low cost</a> 
 
<a href='http://greysanatomyonline.com/poll/compare-airline-tickets.html '>compare airline tickets</a>"
23	1178240327000000	cheapjust	"<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_2.jpg__.html '>cheap airfare</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_3.jpg__.html '>cheap air flights array</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_4.jpg__.html '>cheap airline flights</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_5.jpg__.html '>cheap airline tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_6.jpg__.html '>cheap airplane tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_7.jpg__.html '>cheap air tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_8.jpg__.html '>cheap cell phones</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_9.jpg__.html '>cheap checks</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_10.jpg__.html '>cheap cruises</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_11.jpg__.html '>cheap discount airfare</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_12.jpg__.html '>cheap flights dubai</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_13.jpg__.html '>cheap flights manila</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_14.jpg__.html '>cheap flights paris</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_15.jpg__.html '>cheap flights prague</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_16.jpg__.html '>cheap flights rome</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_17.jpg__.html '>cheap flights sydney</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_18.jpg__.html '>cheap flights to europe</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_19.jpg__.html '>cheap flights uk</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_20.jpg__.html '>cheap flight tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_21.jpg__.html '>cheap international flights</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_22.jpg__.html '>cheap plane tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_23.jpg__.html '>cheap shoes</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_24.jpg__.html '>cheap textbooks</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_25.jpg__.html '>cheap tires</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_26.jpg__.html '>cheap train tickets</a> 
<a href='http://www.sep.alquds.edu/ara/photo/albums/userpics/10001/normal_27.jpg__.html '>dirt cheap tickets</a>"
23	1178878776000000	cheapticket	"<a href='http://www.sep.alquds.edu/ara/quiz/5/normal1.jpg.html '>airline discount tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal2.jpg.html '>cheap airfare</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal3.jpg.html '>cheap air flights array</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal4.jpg.html '>cheap airline flights</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal5.jpg.html '>cheap airline tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal6.jpg.html '>cheap airplane tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal7.jpg.html '>cheap air tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal8.jpg.html '>cheap cell phones</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal9.jpg.html '>cheap checks</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal10.jpg.html '>cheap cruises</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal11.jpg.html '>cheap discount airfare</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal12.jpg.html '>cheap flights dubai</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal13.jpg.html '>cheap flights manila</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal14.jpg.html '>cheap flights paris</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal15.jpg.html '>cheap flights prague</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal16.jpg.html '>cheap flights rome</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal17.jpg.html '>cheap flights sydney</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal18.jpg.html '>cheap flights to europe</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal19.jpg.html '>cheap flights uk</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal20.jpg.html '>cheap flight tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal21.jpg.html '>cheap international flights</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal22.jpg.html '>cheap plane tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal23.jpg.html '>cheap shoes</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal24.jpg.html '>cheap textbooks</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal25.jpg.html '>cheap tires</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal26.jpg.html '>cheap train tickets</a> 
<a href='http://www.sep.alquds.edu/ara/quiz/5/normal27.jpg.html '>dirt cheap tickets</a>"
23	1178929178000000	shopforu	"<a href='http://coop.deadsquid.com/gallery/g2data/album/01.11.2006.html '>abercrombie & fitch</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/02.11.2006.html '>air compressors</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/03.11.2006.html '>air force ones</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/04.11.2006.html '>air jordan shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/05.11.2006.html '>air mattress</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/06.11.2006.html '>air purifiers</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/07.11.2006.html '>aluminum boats</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/08.11.2006.html '>aluminum dock plates</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/09.11.2006.html '>american eagle outfitters</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/10.11.2006.html '>antique engagement rings</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/11.11.2006.html '>athletic wear</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/12.11.2006.html '>atv accessories</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/13.11.2006.html '>atv tires</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/14.11.2006.html '>baby phat</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/15.11.2006.html '>ballet shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/16.11.2006.html '>barely string bikini</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/17.11.2006.html '>baseball jersey</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/18.11.2006.html '>bass shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/19.11.2006.html '>bath tubs</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/20.11.2006.html '>belly button</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/21.11.2006.html '>bottled water</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/22.11.2006.html '>brass knuckles</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/23.11.2006.html '>bridal bouquets</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/24.11.2006.html '>bridal gowns</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/25.11.2006.html '>bridal shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/26.11.2006.html '>bridesmaid dresses</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/27.11.2006.html '>calorie counter</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/28.11.2006.html '>candle holder</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/29.11.2006.html '>ceiling fans</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/30.11.2006.html '>clarks shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/31.11.2006.html '>coffee makers</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/01.12.2006.html '>coffee tables</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/02.12.2006.html '>coloring sheets</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/03.12.2006.html '>comforter sets</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/04.12.2006.html '>cork flooring</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/05.12.2006.html '>country curtains</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/06.12.2006.html '>cross stitch</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/07.12.2006.html '>curly hair</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/08.12.2006.html '>delta faucets</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/09.12.2006.html '>detox diet</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/10.12.2006.html '>dress shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/11.12.2006.html '>duct tape</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/12.12.2006.html '>dune buggy</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/13.12.2006.html '>duvet covers</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/14.12.2006.html '>ear plugs</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/15.12.2006.html '>earth shoes</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/16.12.2006.html '>egr valve</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/17.12.2006.html '>electric blankets</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/18.12.2006.html '>electric fence</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/19.12.2006.html '>elliptical trainers</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/20.12.2006.html '>embroidery designs</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/21.12.2006.html '>empire carpet</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/22.12.2006.html '>exercise equipment</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/23.12.2006.html '>exhaust fans</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/24.12.2006.html '>fireplace mantels</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/25.12.2006.html '>fishing reels</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/26.12.2006.html '>fishing rods</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/27.12.2006.html '>fishing tackle</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/28.12.2006.html '>fish tanks</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/29.12.2006.html '>flax seed</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/30.12.2006.html '>floor mats</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/31.12.2006.html '>fountain pens</a> 
<a href='http://coop.deadsquid.com/gallery/g2data/album/31.12.20061.html '>futon covers</a>"
23	1179471344000000	shopforU	"<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-1.html '>aftermarket car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-2.html '>antique car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-3.html '>appliance parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-4.html '>atv parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-5.html '>boat trailer parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-6.html '>car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-7.html '>chevy truck parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-8.html '>classic car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-9.html '>corvette parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-10.html '>custom car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-11.html '>custom motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-12.html '>diesel truck parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-13.html '>discount motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-14.html '>dodge parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-15.html '>dodge truck parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-16.html '>ford auto parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-17.html '>ford mustang parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-18.html '>ford oem parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-19.html '>ford ranger parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-20.html '>ford tractor parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-21.html '>ford truck parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-22.html '>ge appliance parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-23.html '>genuine toyota parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-24.html '>gm parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-25.html '>gm performance parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-26.html '>gun parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-27.html '>harley davidson parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-28.html '>honda atv parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-29.html '>honda car parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-30.html '>honda motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-31.html '>jeep parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-32.html '>mercedes parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-33.html '>motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-34.html '>napa auto parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-35.html '>nissan parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-36.html '>polaris atv parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-37.html '>sears appliance parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-38.html '>sears parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-39.html '>suzuki atv parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-40.html '>suzuki motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-41.html '>toyota auto parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-42.html '>toyota oem parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-43.html '>toyota parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-44.html '>toyota truck parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-45.html '>used motorcycle parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-46.html '>volvo parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-47.html '>vw parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-48.html '>whirlpool appliance parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-49.html '>yamaha atv parts</a> 
<a href='http://blogs.cc.gatech.edu/achille/uploads/2006/07/wp-uploads-50.html '>yamaha motorcycle parts</a> 
<a href='http://volny.cz/cheaps/airline-discount-tickets.html '>airline discount tickets</a> 
<a href='http://volny.cz/cheaps/cheap-airfare.html '>cheap airfare</a> 
<a href='http://volny.cz/cheaps/cheap-air-flights-array.html '>cheap air flights array</a> 
<a href='http://volny.cz/cheaps/cheap-airline-flights.html '>cheap airline flights</a> 
<a href='http://volny.cz/cheaps/cheap-airline-tickets.html '>cheap airline tickets</a> 
<a href='http://volny.cz/cheaps/cheap-airplane-tickets.html '>cheap airplane tickets</a> 
<a href='http://volny.cz/cheaps/cheap-air-tickets.html '>cheap air tickets</a> 
<a href='http://volny.cz/cheaps/cheap-cell-phones.html '>cheap cell phones</a> 
<a href='http://volny.cz/cheaps/cheap-checks.html '>cheap checks</a> 
<a href='http://volny.cz/cheaps/cheap-cruises.html '>cheap cruises</a> 
<a href='http://volny.cz/cheaps/cheap-discount-airfare.html '>cheap discount airfare</a> 
<a href='http://volny.cz/cheaps/cheap-flights-dubai.html '>cheap flights dubai</a> 
<a href='http://volny.cz/cheaps/cheap-flights-manila.html '>cheap flights manila</a> 
<a href='http://volny.cz/cheaps/cheap-flights-paris.html '>cheap flights paris</a> 
<a href='http://volny.cz/cheaps/cheap-flights-prague.html '>cheap flights prague</a> 
<a href='http://volny.cz/cheaps/cheap-flights-rome.html '>cheap flights rome</a> 
<a href='http://volny.cz/cheaps/cheap-flights-sydney.html '>cheap flights sydney</a> 
<a href='http://volny.cz/cheaps/cheap-flights-to-europe.html '>cheap flights to europe</a> 
<a href='http://volny.cz/cheaps/cheap-flights-uk.html '>cheap flights uk</a> 
<a href='http://volny.cz/cheaps/cheap-flight-tickets.html '>cheap flight tickets</a> 
<a href='http://volny.cz/cheaps/cheap-international-flights.html '>cheap international flights</a> 
<a href='http://volny.cz/cheaps/cheap-plane-tickets.html '>cheap plane tickets</a> 
<a href='http://volny.cz/cheaps/cheap-shoes.html '>cheap shoes</a> 
<a href='http://volny.cz/cheaps/cheap-textbooks.html '>cheap textbooks</a> 
<a href='http://volny.cz/cheaps/cheap-tires.html '>cheap tires</a> 
<a href='http://volny.cz/cheaps/cheap-train-tickets.html '>cheap train tickets</a> 
<a href='http://volny.cz/cheaps/dirt-cheap-tickets.html '>dirt cheap tickets</a> 
<a href='http://volny.cz/cheaps/airline-tickets.html '>airline tickets</a> 
<a href='http://volny.cz/cheaps/airline-travel-tickets.html '>airline travel tickets</a> 
<a href='http://volny.cz/cheaps/europe-airline-tickets.html '>europe airline tickets</a> 
<a href='http://volny.cz/cheaps/charter-airline-tickets.html '>charter airline tickets</a> 
<a href='http://volny.cz/cheaps/booking-airline-tickets.html '>booking airline tickets</a> 
<a href='http://volny.cz/cheaps/airline-tickets-uk.html '>airline tickets uk</a> 
<a href='http://volny.cz/cheaps/low-rate-airline-tickets.html '>low rate airline tickets</a> 
<a href='http://volny.cz/cheaps/discount-on-airline-tickets.html '>discount on airline tickets</a> 
<a href='http://volny.cz/cheaps/buy-airline-tickets.html '>buy airline tickets</a> 
<a href='http://volny.cz/cheaps/south-america-airline-tickets.html '>south america airline tickets</a> 
<a href='http://volny.cz/cheaps/airline-tickets-japan.html '>airline tickets japan</a> 
<a href='http://volny.cz/cheaps/airline-tickets-go-american-airlines.html '>airline tickets go american airlines</a> 
<a href='http://volny.cz/cheaps/airline-tickets-discounts.html '>airline tickets discounts</a> 
<a href='http://volny.cz/cheaps/inexspensive-airline-tickets.html '>inexspensive airline tickets</a> 
<a href='http://volny.cz/cheaps/cheap-air-flights-cheap-airline-tickets.html '>cheap air flights cheap airline tickets</a> 
<a href='http://volny.cz/cheaps/chapest-airline-tickets.html '>chapest airline tickets</a> 
<a href='http://volny.cz/cheaps/student-airline-tickets.html '>student airline tickets</a>"
23	1179778389000000	travelling	"<a href='http://volny.cz/travelling1/wp-uploads-1.html '>airfares rome</a> 
<a href='http://volny.cz/travelling1/wp-uploads-2.html '>airline reservations</a> 
<a href='http://volny.cz/travelling1/wp-uploads-3.html '>airline travel</a> 
<a href='http://volny.cz/travelling1/wp-uploads-4.html '>air travel finder</a> 
<a href='http://volny.cz/travelling1/wp-uploads-5.html '>bargain flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-6.html '>best air fares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-7.html '>business class flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-8.html '>cheap air travel</a> 
<a href='http://volny.cz/travelling1/wp-uploads-9.html '>discount air travel</a> 
<a href='http://volny.cz/travelling1/wp-uploads-10.html '>discounted fares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-11.html '>discounted flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-12.html '>flight las vegas</a> 
<a href='http://volny.cz/travelling1/wp-uploads-13.html '>flights johannesburg</a> 
<a href='http://volny.cz/travelling1/wp-uploads-14.html '>flights moscow</a> 
<a href='http://volny.cz/travelling1/wp-uploads-15.html '>flights panama</a> 
<a href='http://volny.cz/travelling1/wp-uploads-16.html '>flights riga</a> 
<a href='http://volny.cz/travelling1/wp-uploads-17.html '>flights tokyo</a> 
<a href='http://volny.cz/travelling1/wp-uploads-18.html '>flights vilnius</a> 
<a href='http://volny.cz/travelling1/wp-uploads-19.html '>flight tracker</a> 
<a href='http://volny.cz/travelling1/wp-uploads-20.html '>hotel reservations</a> 
<a href='http://volny.cz/travelling1/wp-uploads-21.html '>last minute airfare</a> 
<a href='http://volny.cz/travelling1/wp-uploads-22.html '>last minute flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-23.html '>low air fares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-24.html '>lowest airfares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-25.html '>southwest airlines fares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-26.html '>alaska cruise</a> 
<a href='http://volny.cz/travelling1/wp-uploads-27.html '>bahamas cruise</a> 
<a href='http://volny.cz/travelling1/wp-uploads-28.html '>best cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-29.html '>caribbean cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-30.html '>carnival cruise</a> 
<a href='http://volny.cz/travelling1/wp-uploads-31.html '>carnival cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-32.html '>celebrity cruise line</a> 
<a href='http://volny.cz/travelling1/wp-uploads-33.html '>celebrity cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-34.html '>cruise deals</a> 
<a href='http://volny.cz/travelling1/wp-uploads-35.html '>cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-36.html '>cruise packages</a> 
<a href='http://volny.cz/travelling1/wp-uploads-37.html '>cruise reviews</a> 
<a href='http://volny.cz/travelling1/wp-uploads-38.html '>cruise ship jobs</a> 
<a href='http://volny.cz/travelling1/wp-uploads-39.html '>cruise ship reviews</a> 
<a href='http://volny.cz/travelling1/wp-uploads-40.html '>cruise ships</a> 
<a href='http://volny.cz/travelling1/wp-uploads-41.html '>cruise specials</a> 
<a href='http://volny.cz/travelling1/wp-uploads-42.html '>cruise vacations</a> 
<a href='http://volny.cz/travelling1/wp-uploads-43.html '>disney cruise</a> 
<a href='http://volny.cz/travelling1/wp-uploads-44.html '>disney cruise line</a> 
<a href='http://volny.cz/travelling1/wp-uploads-45.html '>european cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-46.html '>hawaii cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-47.html '>holland america cruise line</a> 
<a href='http://volny.cz/travelling1/wp-uploads-48.html '>last minute cruise deals</a> 
<a href='http://volny.cz/travelling1/wp-uploads-49.html '>last minute cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-50.html '>mediterranean cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-51.html '>norwegian cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-52.html '>norwegian cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-53.html '>oceania cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-54.html '>princess cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-55.html '>princess cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-56.html '>royal caribbean cruise lines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-57.html '>royal caribbean cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-58.html '>singles cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-59.html '>airline discount tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-60.html '>cheap airfare</a> 
<a href='http://volny.cz/travelling1/wp-uploads-61.html '>cheap air flights array</a> 
<a href='http://volny.cz/travelling1/wp-uploads-62.html '>cheap airline flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-63.html '>cheap airline tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-64.html '>cheap airplane tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-65.html '>cheap air tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-66.html '>cheap cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-67.html '>cheap discount airfare</a> 
<a href='http://volny.cz/travelling1/wp-uploads-68.html '>cheap flights dubai</a> 
<a href='http://volny.cz/travelling1/wp-uploads-69.html '>cheap flights manila</a> 
<a href='http://volny.cz/travelling1/wp-uploads-70.html '>cheap flights paris</a> 
<a href='http://volny.cz/travelling1/wp-uploads-71.html '>cheap flights prague</a> 
<a href='http://volny.cz/travelling1/wp-uploads-72.html '>cheap flights rome</a> 
<a href='http://volny.cz/travelling1/wp-uploads-73.html '>cheap flights sydney</a> 
<a href='http://volny.cz/travelling1/wp-uploads-74.html '>cheap flights to europe</a> 
<a href='http://volny.cz/travelling1/wp-uploads-75.html '>cheap flights uk</a> 
<a href='http://volny.cz/travelling1/wp-uploads-76.html '>cheap flight tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-77.html '>cheap international flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-78.html '>cheap plane tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-79.html '>cheap train tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-80.html '>dirt cheap tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-81.html '>discount airfare</a> 
<a href='http://volny.cz/travelling1/wp-uploads-82.html '>discount air fares</a> 
<a href='http://volny.cz/travelling1/wp-uploads-83.html '>discount airlines</a> 
<a href='http://volny.cz/travelling1/wp-uploads-84.html '>discount airline tickets</a> 
<a href='http://volny.cz/travelling1/wp-uploads-85.html '>discount air travel</a> 
<a href='http://volny.cz/travelling1/wp-uploads-86.html '>discount cruises</a> 
<a href='http://volny.cz/travelling1/wp-uploads-87.html '>discount flights</a> 
<a href='http://volny.cz/travelling1/wp-uploads-88.html '>discount lodging</a> 
<a href='http://volny.cz/travelling1/wp-uploads-89.html '>discount luggage</a> 
<a href='http://volny.cz/travelling1/wp-uploads-90.html '>discount plane tickets</a>"
23	1179798284000000	prilosecwprGC	"<a href= http://pc-pitstop.10gloria.info > pc pitstop </a> 
<a href= http://black-clit.10gloria.info > black clit </a> 
<a href= http://butte.10gloria.info > butte </a> 
<a href= http://black-women-sex.10gloria.info > black women sex </a> 
<a href= http://cumface.10gloria.info > cumface </a>"
23	1179822590000000	prilosecwprGC	"<a href= http://teen-peeing.10gloria.info > teen peeing </a> 
<a href= http://black-clit.10gloria.info > black clit </a> 
<a href= http://girl-underwear.10gloria.info > girl underwear </a> 
<a href= http://sidekick-2.10gloria.info > sidekick 2 </a> 
<a href= http://flash-tits.10gloria.info > flash tits </a>"
23	1179837607000000	prilosecwprGC	"<a href= http://sleep-fuck.10gloria.info > sleep fuck </a> 
<a href= http://dirty-blondes.10gloria.info > dirty blondes </a> 
<a href= http://tranny-movies.10gloria.info > tranny movies </a> 
<a href= http://sidekick-2.10gloria.info > sidekick 2 </a> 
<a href= http://cyberage.10gloria.info > cyberage </a>"
23	1179860405000000	prilosecwprGC	"<a href= http://strip-dancer.10gloria.info > strip dancer </a> 
<a href= http://tarzan-porn.10gloria.info > tarzan porn </a> 
<a href= http://girl-underwear.10gloria.info > girl underwear </a> 
<a href= http://erotic-enema.10gloria.info > erotic enema </a> 
<a href= http://cumface.10gloria.info > cumface </a>"
23	1179881743000000	prilosecwprGC	"<a href= http://strip-dancer.10gloria.info > strip dancer </a> 
<a href= http://adult-adhd.10gloria.info > adult adhd </a> 
<a href= http://butte.10gloria.info > butte </a> 
<a href= http://sex-school.10gloria.info > sex school </a> 
<a href= http://blood-gangs.10gloria.info > blood gangs </a>"
23	1180036061000000	travelling	"<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet1.html '>airline discount tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet2.html '>cheap airfare</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet3.html '>cheap air flights array</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet4.html '>cheap airline flights</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet5.html '>cheap airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet6.html '>cheap airplane tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet7.html '>cheap air tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet8.html '>cheap cell phones</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet9.html '>cheap checks</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet10.html '>cheap cigarettes</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet11.html '>cheap cruises</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet12.html '>cheap discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet13.html '>cheap flights dubai</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet14.html '>cheap flights manila</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet15.html '>cheap flights paris</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet16.html '>cheap flights prague</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet17.html '>cheap flights rome</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet18.html '>cheap flights sydney</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet19.html '>cheap flights to europe</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet20.html '>cheap flights uk</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet21.html '>cheap flight tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet22.html '>cheap international flights</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet23.html '>cheap plane tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet24.html '>cheap shoes</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet25.html '>cheap textbooks</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet26.html '>cheap tires</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet27.html '>cheap train tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet28.html '>coach outlet</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet29.html '>dirt cheap tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet30.html '>discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet31.html '>discount air fares</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet32.html '>discount airlines</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet33.html '>discount airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet34.html '>discount air travel</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet35.html '>discount auto parts</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet36.html '>discount carpet</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet37.html '>discount clothing</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet38.html '>discount cologne</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet39.html '>discount cosmetics</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet40.html '>discount cruises</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet41.html '>discount fabric</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet42.html '>discount flights</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet43.html '>discount fragrance</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet44.html '>discount jewelry</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet45.html '>discount kitchen cabinets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet46.html '>discount lighting</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet47.html '>discount lodging</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet48.html '>discount luggage</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet49.html '>discount motorcycle tires</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet50.html '>discount perfume</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet51.html '>discount plane tickets</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet52.html '>discount rugs</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet53.html '>discount shoes</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet54.html '>discount sunglasses</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet55.html '>discount tire</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet56.html '>discount tire direct</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet57.html '>discount tires online</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet58.html '>discount wheels</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet59.html '>hair straightener</a> 
<a href='http://blogs.cc.gatech.edu/bryan/wp-content/plugins/akismet/akismet60.html '>sears outlet</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window1.html '>airfares rome</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window2.html '>airline reservations</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window3.html '>airline travel</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window4.html '>air travel finder</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window5.html '>bargain flights</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window6.html '>best air fares</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window7.html '>business class flights</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window8.html '>cheap air travel</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window9.html '>discount air travel</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window10.html '>discounted fares</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window11.html '>discounted flights</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window12.html '>flight las vegas</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window13.html '>flights johannesburg</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window14.html '>flights moscow</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window15.html '>flights panama</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window16.html '>flights riga</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window17.html '>flights tokyo</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window18.html '>flights vilnius</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window19.html '>flight tracker</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window20.html '>hotel reservations</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window21.html '>last minute airfare</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window22.html '>last minute flights</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window23.html '>low air fares</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window24.html '>lowest airfares</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window25.html '>southwest airlines fares</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window26.html '>alaska cruise</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window27.html '>bahamas cruise</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window28.html '>best cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window29.html '>caribbean cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window30.html '>carnival cruise</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window31.html '>carnival cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window32.html '>celebrity cruise line</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window33.html '>celebrity cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window34.html '>cruise deals</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window35.html '>cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window36.html '>cruise packages</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window37.html '>cruise reviews</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window38.html '>cruise ship jobs</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window39.html '>cruise ship reviews</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window40.html '>cruise ships</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window41.html '>cruise specials</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window42.html '>cruise vacations</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window43.html '>disney cruise</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window44.html '>disney cruise line</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window45.html '>european cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window46.html '>hawaii cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window47.html '>holland america cruise line</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window48.html '>last minute cruise deals</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window49.html '>last minute cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window50.html '>mediterranean cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window51.html '>norwegian cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window52.html '>norwegian cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window53.html '>oceania cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window54.html '>princess cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window55.html '>princess cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window56.html '>royal caribbean cruise lines</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window57.html '>royal caribbean cruises</a> 
<a href='http://blogs.cc.gatech.edu/devin/wp-content/uploads/2006/08/window58.html '>singles cruises</a>"
23	1180333272000000	uploajs	"<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads1.html '>1000 loan payday</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads2.html '>advance cash loan online payday</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads3.html '>advance cash loan payday quick</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads4.html '>bad credit payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads5.html '>cash advance payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads6.html '>cash till payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads7.html '>default payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads8.html '>easy payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads9.html '>fast payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads10.html '>faxless payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads11.html '>guaranteed payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads12.html '>instant payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads13.html '>loan till payday</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads14.html '>military payday loan</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads15.html '>no credit check payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads16.html '>no fax payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads17.html '>no teletrack payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads18.html '>online payday loan service</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads19.html '>payday advance</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads20.html '>payday cash advance</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads21.html '>payday loan canada</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads22.html '>payday loan illinois</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads23.html '>payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads24.html '>payday loan utah</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-content/uploads/2006/04/wp-uploads25.html '>same day payday loans</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js1.html '>airline discount tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js2.html '>cheap airfare</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js3.html '>cheap air flights array</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js4.html '>cheap airline flights</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js5.html '>cheap airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js6.html '>cheap airplane tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js7.html '>cheap air tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js8.html '>cheap cruises</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js9.html '>cheap discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js10.html '>cheap flights dubai</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js11.html '>cheap flights manila</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js12.html '>cheap flights paris</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js13.html '>cheap flights prague</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js14.html '>cheap flights rome</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js15.html '>cheap flights sydney</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js16.html '>cheap flights to europe</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js17.html '>cheap flights uk</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js18.html '>cheap flight tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js19.html '>cheap international flights</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js20.html '>cheap plane tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js21.html '>cheap train tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js22.html '>dirt cheap tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js23.html '>discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js24.html '>discount air fares</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js25.html '>discount airlines</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js26.html '>discount airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js27.html '>discount air travel</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js28.html '>discount cruises</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js29.html '>discount flights</a> 
<a href='http://blogs.cc.gatech.edu/christopher/wp-includes/js/wp-js/wp-js30.html '>discount plane tickets</a>"
23	1180424387000000	cheapfurn	"<a href='http://volny.cz/cheaptickets/cheap-airline-tickets.html '>cheap airline tickets</a> 
<a href='http://volny.cz/cheaptickets/airline-travel-tickets.html '>airline travel tickets</a> 
<a href='http://volny.cz/cheaptickets/discount-airline-tickets-europe.html '>discount airline tickets europe</a> 
<a href='http://volny.cz/cheaptickets/charter-airline-tickets.html '>charter airline tickets</a> 
<a href='http://volny.cz/cheaptickets/travel-airline-tickets-cheap.html '>travel airline tickets cheap</a> 
<a href='http://volny.cz/cheaptickets/airline-tickets-uk.html '>airline tickets uk</a> 
<a href='http://volny.cz/cheaptickets/low-rate-airline-tickets.html '>low rate airline tickets</a> 
<a href='http://volny.cz/cheaptickets/discout-airline-tickets.html '>discout airline tickets</a> 
<a href='http://volny.cz/cheaptickets/cheapest-airline-tickets-to-europe.html '>cheapest airline tickets to europe</a> 
<a href='http://volny.cz/cheaptickets/deals-airline-tickets.html '>deals airline tickets</a> 
<a href='http://volny.cz/cheaptickets/airline-tickets-prices.html '>airline tickets prices</a> 
<a href='http://volny.cz/cheaptickets/airline-tickets-go-american-airlines.html '>airline tickets go american airlines</a> 
<a href='http://volny.cz/cheaptickets/lowest-prices-for-airline-tickets.html '>lowest prices for airline tickets</a> 
<a href='http://volny.cz/cheaptickets/best-buy-airline-tickets.html '>best buy airline tickets</a> 
<a href='http://volny.cz/cheaptickets/cheap-airline-tickets-and-hotels.html '>cheap airline tickets and hotels</a> 
<a href='http://volny.cz/cheaptickets/find-airline-tickets-online.html '>find airline tickets online</a> 
<a href='http://volny.cz/cheaptickets/soutwest-airline-tickets.html '>soutwest airline tickets</a> 
<a href='http://volny.cz/cheaptickets/air-cheap-tickets.html '>air cheap tickets</a> 
<a href='http://volny.cz/cheaptickets/cheap-tickets.html '>cheap tickets</a> 
<a href='http://volny.cz/cheaptickets/cheap-tickets-for-airline.html '>cheap tickets for airline</a> 
<a href='http://volny.cz/cheaptickets/cheap-travel-tickets.html '>cheap travel tickets</a> 
<a href='http://volny.cz/cheaptickets/dirt-cheap-tickets.html '>dirt cheap tickets</a> 
<a href='http://volny.cz/cheaptickets/find-cheap-tickets.html '>find cheap tickets</a> 
<a href='http://volny.cz/cheaptickets/plane-cheap-tickets.html '>plane cheap tickets</a> 
<a href='http://volny.cz/furniture1/aluminum-patio-furniture.html '>aluminum patio furniture</a> 
<a href='http://volny.cz/furniture1/antique-bedroom-furniture.html '>antique bedroom furniture</a> 
<a href='http://volny.cz/furniture1/ashley-bedroom-furniture.html '>ashley bedroom furniture</a> 
<a href='http://volny.cz/furniture1/ashley-furniture.html '>ashley furniture</a> 
<a href='http://volny.cz/furniture1/ashley-furniture-store.html '>ashley furniture store</a> 
<a href='http://volny.cz/furniture1/ashley-home-furniture.html '>ashley home furniture</a> 
<a href='http://volny.cz/furniture1/bedroom-furniture.html '>bedroom furniture</a> 
<a href='http://volny.cz/furniture1/bedroom-furniture-sets.html '>bedroom furniture sets</a> 
<a href='http://volny.cz/furniture1/bush-office-furniture.html '>bush office furniture</a> 
<a href='http://volny.cz/furniture1/cast-aluminum-patio-furniture.html '>cast aluminum patio furniture</a> 
<a href='http://volny.cz/furniture1/cheap-bedroom-furniture.html '>cheap bedroom furniture</a> 
<a href='http://volny.cz/furniture1/cheap-office-furniture.html '>cheap office furniture</a> 
<a href='http://volny.cz/furniture1/cheap-patio-furniture.html '>cheap patio furniture</a> 
<a href='http://volny.cz/furniture1/cherry-bedroom-furniture.html '>cherry bedroom furniture</a> 
<a href='http://volny.cz/furniture1/child-bedroom-furniture.html '>child bedroom furniture</a> 
<a href='http://volny.cz/furniture1/childrens-bedroom-furniture.html '>childrens bedroom furniture</a> 
<a href='http://volny.cz/furniture1/contemporary-bedroom-furniture.html '>contemporary bedroom furniture</a> 
<a href='http://volny.cz/furniture1/contemporary-office-furniture.html '>contemporary office furniture</a> 
<a href='http://volny.cz/furniture1/discount-bedroom-furniture.html '>discount bedroom furniture</a> 
<a href='http://volny.cz/furniture1/discount-office-furniture.html '>discount office furniture</a> 
<a href='http://volny.cz/furniture1/discount-patio-furniture.html '>discount patio furniture</a> 
<a href='http://volny.cz/furniture1/ergonomic-office-furniture.html '>ergonomic office furniture</a> 
<a href='http://volny.cz/furniture1/executive-office-furniture.html '>executive office furniture</a> 
<a href='http://volny.cz/furniture1/home-office-furniture.html '>home office furniture</a> 
<a href='http://volny.cz/furniture1/kids-bedroom-furniture.html '>kids bedroom furniture</a> 
<a href='http://volny.cz/furniture1/modern-bedroom-furniture.html '>modern bedroom furniture</a> 
<a href='http://volny.cz/furniture1/modern-office-furniture.html '>modern office furniture</a> 
<a href='http://volny.cz/furniture1/modular-office-furniture.html '>modular office furniture</a> 
<a href='http://volny.cz/furniture1/new-office-furniture.html '>new office furniture</a> 
<a href='http://volny.cz/furniture1/oak-bedroom-furniture.html '>oak bedroom furniture</a> 
<a href='http://volny.cz/furniture1/oak-office-furniture.html '>oak office furniture</a> 
<a href='http://volny.cz/furniture1/office-computer-furniture.html '>office computer furniture</a> 
<a href='http://volny.cz/furniture1/office-furniture.html '>office furniture</a> 
<a href='http://volny.cz/furniture1/outdoor-patio-furniture.html '>outdoor patio furniture</a> 
<a href='http://volny.cz/furniture1/patio-furniture.html '>patio furniture</a> 
<a href='http://volny.cz/furniture1/patio-furniture-covers.html '>patio furniture covers</a> 
<a href='http://volny.cz/furniture1/patio-furniture-cushions.html '>patio furniture cushions</a> 
<a href='http://volny.cz/furniture1/patio-furniture-sets.html '>patio furniture sets</a> 
<a href='http://volny.cz/furniture1/pine-bedroom-furniture.html '>pine bedroom furniture</a> 
<a href='http://volny.cz/furniture1/resin-patio-furniture.html '>resin patio furniture</a> 
<a href='http://volny.cz/furniture1/teak-patio-furniture.html '>teak patio furniture</a> 
<a href='http://volny.cz/furniture1/unfinished-furniture.html '>unfinished furniture</a> 
<a href='http://volny.cz/furniture1/unfinished-wood-furniture.html '>unfinished wood furniture</a> 
<a href='http://volny.cz/furniture1/white-bedroom-furniture.html '>white bedroom furniture</a> 
<a href='http://volny.cz/furniture1/wholesale-office-furniture.html '>wholesale office furniture</a> 
<a href='http://volny.cz/furniture1/wholesale-patio-furniture.html '>wholesale patio furniture</a> 
<a href='http://volny.cz/furniture1/wicker-patio-furniture.html '>wicker patio furniture</a> 
<a href='http://volny.cz/furniture1/wood-office-furniture.html '>wood office furniture</a> 
<a href='http://volny.cz/furniture1/wood-patio-furniture.html '>wood patio furniture</a> 
<a href='http://volny.cz/furniture1/wrought-iron-patio-furniture.html '>wrought iron patio furniture</a> 
<a href='http://volny.cz/furniture1/youth-bedroom-furniture.html '>youth bedroom furniture</a>"
23	1180523687000000	varuploa	"<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail1.JPG.html '>airline discount tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail2.JPG.html '>cheap airfare</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail3.JPG.html '>cheap air flights array</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail4.JPG.html '>cheap airline flights</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail5.JPG.html '>cheap airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail6.JPG.html '>cheap airplane tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail7.JPG.html '>cheap air tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail8.JPG.html '>cheap cell phones</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail9.JPG.html '>cheap checks</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail10.JPG.html '>cheap cruises</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail11.JPG.html '>cheap discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail12.JPG.html '>cheap flights dubai</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail13.JPG.html '>cheap flights manila</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail14.JPG.html '>cheap flights paris</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail15.JPG.html '>cheap flights prague</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail16.JPG.html '>cheap flights rome</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail17.JPG.html '>cheap flights sydney</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail18.JPG.html '>cheap flights to europe</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail19.JPG.html '>cheap flights uk</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail20.JPG.html '>cheap flight tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail21.JPG.html '>cheap international flights</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail22.JPG.html '>cheap plane tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail23.JPG.html '>cheap shoes</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail24.JPG.html '>cheap tires</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail25.JPG.html '>cheap train tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail26.JPG.html '>coach outlet</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail27.JPG.html '>dirt cheap tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail28.JPG.html '>discount airfare</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail29.JPG.html '>discount air fares</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail30.JPG.html '>discount airlines</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail31.JPG.html '>discount airline tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail32.JPG.html '>discount air travel</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail33.JPG.html '>discount auto parts</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail34.JPG.html '>discount carpet</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail35.JPG.html '>discount clothing</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail36.JPG.html '>discount cologne</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail37.JPG.html '>discount cosmetics</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail38.JPG.html '>discount cruises</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail39.JPG.html '>discount fabric</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail40.JPG.html '>discount flights</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail41.JPG.html '>discount fragrance</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail42.JPG.html '>discount jewelry</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail43.JPG.html '>discount kitchen cabinets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail44.JPG.html '>discount lighting</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail45.JPG.html '>discount lodging</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail46.JPG.html '>discount luggage</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail47.JPG.html '>discount motorcycle tires</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail48.JPG.html '>discount perfume</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail49.JPG.html '>discount plane tickets</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail50.JPG.html '>discount rugs</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail51.JPG.html '>discount shoes</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail52.JPG.html '>discount sunglasses</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail53.JPG.html '>discount tire</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail54.JPG.html '>discount tire direct</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail55.JPG.html '>discount tires online</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail56.JPG.html '>discount wheels</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail57.JPG.html '>hair straightener</a> 
<a href='http://blogs.cc.gatech.edu/kathy/wp-content/uploads/2006/11/thumbnail58.JPG.html '>sears outlet</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter0.inc.html '>1000 loan payday</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter1.inc.html '>advance cash loan online payday</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter2.inc.html '>advance cash loan payday quick</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter3.inc.html '>bad credit payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter4.inc.html '>cash advance payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter5.inc.html '>cash till payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter6.inc.html '>default payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter7.inc.html '>easy payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter8.inc.html '>fast payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter9.inc.html '>faxless payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter10.inc.html '>guaranteed payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter11.inc.html '>instant payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter12.inc.html '>loan till payday</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter13.inc.html '>military payday loan</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter14.inc.html '>no credit check payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter15.inc.html '>no fax payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter16.inc.html '>no teletrack payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter17.inc.html '>online payday loan service</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter18.inc.html '>payday advance</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter19.inc.html '>payday cash advance</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter20.inc.html '>payday loan canada</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter21.inc.html '>payday loan illinois</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter22.inc.html '>payday loans</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter23.inc.html '>payday loan utah</a> 
<a href='http://www.sep.alquds.edu/count/vars/counter24.inc.html '>same day payday loans</a>"
23	1180689166000000	vacchedis	"<a href='http://volny.cz/vacation/1/ '>cheap airline tickets</a> 
<a href='http://volny.cz/vacation/2/ '>airline travel tickets</a> 
<a href='http://volny.cz/vacation/3/ '>discount airline tickets europe</a> 
<a href='http://volny.cz/vacation/4/ '>charter airline tickets</a> 
<a href='http://volny.cz/vacation/5/ '>travel airline tickets cheap</a> 
<a href='http://volny.cz/vacation/6/ '>airline tickets uk</a> 
<a href='http://volny.cz/vacation/7/ '>low rate airline tickets</a> 
<a href='http://volny.cz/vacation/8/ '>discout airline tickets</a> 
<a href='http://volny.cz/vacation/9/ '>cheapest airline tickets to europe</a> 
<a href='http://volny.cz/vacation/10/ '>deals airline tickets</a> 
<a href='http://volny.cz/vacation/11/ '>airline tickets prices</a> 
<a href='http://volny.cz/vacation/12/ '>airline tickets go american airlines</a> 
<a href='http://volny.cz/vacation/13/ '>lowest prices for airline tickets</a> 
<a href='http://volny.cz/vacation/14/ '>best buy airline tickets</a> 
<a href='http://volny.cz/vacation/15/ '>cheap airline tickets and hotels</a> 
<a href='http://volny.cz/vacation/16/ '>find airline tickets online</a> 
<a href='http://volny.cz/vacation/17/ '>soutwest airline tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/1/ '>air cheap tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/2/ '>cheap tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/3/ '>cheap tickets for airline</a> 
<a href='http://volny.cz/vacation/cheaptickets/4/ '>cheap travel tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/5/ '>dirt cheap tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/6/ '>find cheap tickets</a> 
<a href='http://volny.cz/vacation/cheaptickets/7/ '>plane cheap tickets</a> 
<a href='http://volny.cz/vacation/travel/1/ '>robots air travel finder</a> 
<a href='http://volny.cz/vacation/travel/2/ '>travel trailers financing</a> 
<a href='http://volny.cz/vacation/travel/3/ '>ohio travel</a> 
<a href='http://volny.cz/vacation/travel/4/ '>last minute travel bargains</a> 
<a href='http://volny.cz/vacation/travel/5/ '>event and travel planning</a> 
<a href='http://volny.cz/vacation/travel/6/ '>florida travel guide</a> 
<a href='http://volny.cz/vacation/travel/7/ '>tv travel shop</a> 
<a href='http://volny.cz/vacation/travel/8/ '>travel agency asia</a> 
<a href='http://volny.cz/vacation/travel/9/ '>tennessee travel nursing</a> 
<a href='http://volny.cz/vacation/travel/10/ '>international travel checklist</a> 
<a href='http://volny.cz/vacation/travel/11/ '>travel insured international</a> 
<a href='http://volny.cz/vacation/travel/12/ '>travel to lake tahoe</a> 
<a href='http://volny.cz/vacation/travel/13/ '>cheap train travel</a> 
<a href='http://volny.cz/vacation/travel/14/ '>kelley blue book travel trailers</a> 
<a href='http://volny.cz/vacation/travel/15/ '>israel travel agents</a> 
<a href='http://volny.cz/vacation/travel/16/ '>europe insurance travel us</a> 
<a href='http://volny.cz/vacation/travel/17/ '>rail travel in england</a> 
<a href='http://volny.cz/vacation/travel/18/ '>travel deals paris</a> 
<a href='http://volny.cz/vacation/travel/19/ '>travel deals las vegas</a> 
<a href='http://volny.cz/vacation/travel/20/ '>caribbean travel guide</a> 
<a href='http://volny.cz/vacation/travel/21/ '>inexpensive paris air travel</a> 
<a href='http://volny.cz/vacation/travel/22/ '>travel india information</a> 
<a href='http://volny.cz/vacation/travel/23/ '>journal of travel and tourism marketing</a> 
<a href='http://volny.cz/vacation/travel/24/ '>european bus travel</a> 
<a href='http://volny.cz/vacation/travel/25/ '>paris airfare discount travel</a> 
<a href='http://volny.cz/vacation/travel/26/ '>train travel france</a> 
<a href='http://volny.cz/vacation/travel/27/ '>travel for single people</a> 
<a href='http://volny.cz/vacation/travel/28/ '>air travel china spain</a> 
<a href='http://volny.cz/vacation/travel/29/ '>cancun travel agency</a> 
<a href='http://volny.cz/vacation/travel/30/ '>low paris fare air travel</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah1.gif.html '>airline discount tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah2.gif.html '>cheap airfare</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah3.gif.html '>cheap airline flights</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah4.gif.html '>cheap airline tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah5.gif.html '>cheap airplane tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah6.gif.html '>cheap air tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah7.gif.html '>cheap cell phones</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah8.gif.html '>cheap checks</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah9.gif.html '>cheap cruises</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah10.gif.html '>cheap discount airfare</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah11.gif.html '>cheap flights dubai</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah12.gif.html '>cheap flights manila</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah13.gif.html '>cheap flights paris</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah14.gif.html '>cheap flights prague</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah15.gif.html '>cheap flights rome</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah16.gif.html '>cheap flights sydney</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah17.gif.html '>cheap flights to europe</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah18.gif.html '>cheap flights uk</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah19.gif.html '>cheap flight tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah20.gif.html '>cheap international flights</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah21.gif.html '>cheap plane tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah22.gif.html '>cheap shoes</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah23.gif.html '>cheap textbooks</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah24.gif.html '>cheap tires</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah25.gif.html '>cheap train tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah26.gif.html '>coach outlet</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah27.gif.html '>discount airfare</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah28.gif.html '>discount air fares</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah29.gif.html '>discount airlines</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah30.gif.html '>discount airline tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah31.gif.html '>discount air travel</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah32.gif.html '>discount auto parts</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah33.gif.html '>discount carpet</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah34.gif.html '>discount clothing</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah35.gif.html '>discount cologne</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah36.gif.html '>discount cosmetics</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah37.gif.html '>discount cruises</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah38.gif.html '>discount fabric</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah39.gif.html '>discount flights</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah40.gif.html '>discount fragrance</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah41.gif.html '>discount jewelry</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah42.gif.html '>discount kitchen cabinets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah43.gif.html '>discount lighting</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah44.gif.html '>discount lodging</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah45.gif.html '>discount luggage</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah46.gif.html '>discount motorcycle tires</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah47.gif.html '>discount perfume</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah48.gif.html '>discount plane tickets</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah49.gif.html '>discount rugs</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah50.gif.html '>discount shoes</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah51.gif.html '>discount sunglasses</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah52.gif.html '>discount tire</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah53.gif.html '>discount tire direct</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah54.gif.html '>discount tires online</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah55.gif.html '>discount wheels</a> 
<a href='http://www.sep.alquds.edu/whatsnew/uploads/besmelah56.gif.html '>sears outlet</a>"
23	1181111310000000	watpayloan	"<a href='http://volny.cz/watchez/breitling-watches.html '>breitling watches</a> 
<a href='http://volny.cz/watchez/bulova-watches.html '>bulova watches</a> 
<a href='http://volny.cz/watchez/cartier-watches.html '>cartier watches</a> 
<a href='http://volny.cz/watchez/casio-watches.html '>casio watches</a> 
<a href='http://volny.cz/watchez/cheap-watches.html '>cheap watches</a> 
<a href='http://volny.cz/watchez/citizen-watches.html '>citizen watches</a> 
<a href='http://volny.cz/watchez/designer-watches.html '>designer watches</a> 
<a href='http://volny.cz/watchez/discount-watches.html '>discount watches</a> 
<a href='http://volny.cz/watchez/gucci-watches.html '>gucci watches</a> 
<a href='http://volny.cz/watchez/guess-watches.html '>guess watches</a> 
<a href='http://volny.cz/watchez/hamilton-watches.html '>hamilton watches</a> 
<a href='http://volny.cz/watchez/invicta-watches.html '>invicta watches</a> 
<a href='http://volny.cz/watchez/ladies-watches.html '>ladies watches</a> 
<a href='http://volny.cz/watchez/luminox-watches.html '>luminox watches</a> 
<a href='http://volny.cz/watchez/luxury-watches.html '>luxury watches</a> 
<a href='http://volny.cz/watchez/mens-watches.html '>mens watches</a> 
<a href='http://volny.cz/watchez/military-watches.html '>military watches</a> 
<a href='http://volny.cz/watchez/movado-watches.html '>movado watches</a> 
<a href='http://volny.cz/watchez/nike-watches.html '>nike watches</a> 
<a href='http://volny.cz/watchez/nixon-watches.html '>nixon watches</a> 
<a href='http://volny.cz/watchez/omega-watches.html '>omega watches</a> 
<a href='http://volny.cz/watchez/pocket-watch.html '>pocket watch</a> 
<a href='http://volny.cz/watchez/replica-watches.html '>replica watches</a> 
<a href='http://volny.cz/watchez/rolex-watches.html '>rolex watches</a> 
<a href='http://volny.cz/watchez/seiko-watches.html '>seiko watches</a> 
<a href='http://volny.cz/watchez/skagen-watches.html '>skagen watches</a> 
<a href='http://volny.cz/watchez/swatch-watches.html '>swatch watches</a> 
<a href='http://volny.cz/watchez/swiss-army-watches.html '>swiss army watches</a> 
<a href='http://volny.cz/watchez/swiss-watches.html '>swiss watches</a> 
<a href='http://volny.cz/watchez/tag-heuer-watches.html '>tag heuer watches</a> 
<a href='http://volny.cz/watchez/timex-watches.html '>timex watches</a> 
<a href='http://volny.cz/watchez/tissot-watches.html '>tissot watches</a> 
<a href='http://volny.cz/watchez/vintage-watches.html '>vintage watches</a> 
<a href='http://volny.cz/watchez/wrist-watches.html '>wrist watches</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js1.html '>1000 loan payday</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js2.html '>advance cash loan online payday</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js3.html '>advance cash loan payday quick</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js4.html '>bad credit payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js5.html '>cash advance payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js6.html '>cash till payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js7.html '>default payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js8.html '>easy payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js9.html '>fast payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js10.html '>faxless payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js11.html '>guaranteed payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js12.html '>instant payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js13.html '>loan till payday</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js14.html '>military payday loan</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js15.html '>no credit check payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js16.html '>no fax payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js17.html '>no teletrack payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js18.html '>online payday loan service</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js19.html '>payday advance</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js20.html '>payday cash advance</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js21.html '>payday loan canada</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js22.html '>payday loan illinois</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js23.html '>payday loans</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js24.html '>payday loan utah</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/js/tinymce/wp-js25.html '>same day payday loans</a>"
23	1181186079000000	furnchedis	"<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up1.html '>aluminum patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up2.html '>amish oak furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up3.html '>antique bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up4.html '>antique furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up5.html '>antique furniture hardware</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up6.html '>ashley bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up7.html '>ashley furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up8.html '>ashley furniture store</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up9.html '>ashley home furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up10.html '>baby furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up11.html '>bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up12.html '>bedroom furniture sets</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up13.html '>bedroom furniture stores</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up14.html '>bobs discount furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up15.html '>broyhill furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up16.html '>bush office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up17.html '>cast aluminum patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up18.html '>cedar outdoor furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up19.html '>cheap bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up20.html '>cheap contemporary furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up21.html '>cheap living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up22.html '>cheap office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up23.html '>cheap patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up24.html '>cherry bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up25.html '>cherry home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up26.html '>child bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up27.html '>childrens bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up28.html '>contemporary bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up29.html '>contemporary furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up30.html '>contemporary home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up31.html '>contemporary living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up32.html '>contemporary office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up33.html '>country living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up34.html '>custom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up35.html '>custom home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up36.html '>custom made furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up37.html '>custom office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up38.html '>custom wood furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up39.html '>danish modern furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up40.html '>dining room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up41.html '>discount baby furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up42.html '>discount bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up43.html '>discount furniture stores</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up44.html '>discount home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up45.html '>discount leather furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up46.html '>discount living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up47.html '>discount office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up48.html '>discount outdoor furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up49.html '>discount patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up50.html '>discount wicker furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up51.html '>donate furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up52.html '>ergonomic office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up53.html '>executive office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up54.html '>furniture stores online</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up55.html '>home office computer furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up56.html '>home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up57.html '>kids bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up58.html '>kids furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up59.html '>lane furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up60.html '>leather living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up61.html '>living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up62.html '>modern bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up63.html '>modern contemporary furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up64.html '>modern furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up65.html '>modern home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up66.html '>modern italian furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up67.html '>modern living room furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up68.html '>modern office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up69.html '>modular home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up70.html '>modular office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up71.html '>new office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up72.html '>oak bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up73.html '>oak furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up74.html '>oak office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up75.html '>office computer furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up76.html '>office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up77.html '>outdoor bar furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up78.html '>outdoor furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up79.html '>outdoor patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up80.html '>outdoor wicker furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up81.html '>patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up82.html '>patio furniture covers</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up83.html '>patio furniture cushions</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up84.html '>patio furniture sets</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up85.html '>pine bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up86.html '>quality home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up87.html '>reproduction antique furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up88.html '>resin patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up89.html '>teak outdoor furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up90.html '>teak patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up91.html '>thomasville furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up92.html '>unfinished furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up93.html '>unfinished oak furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up94.html '>unfinished wood furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up95.html '>value city furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up96.html '>white bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up97.html '>wholesale office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up98.html '>wholesale patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up99.html '>wicker patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up100.html '>wood home office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up101.html '>wood office furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up102.html '>wood patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up103.html '>wrought iron patio furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/wp-content/uploads/2006/11/wp-up104.html '>youth bedroom furniture</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme1.html '>airline discount tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme2.html '>cheap airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme3.html '>cheap airline flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme4.html '>cheap airline tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme5.html '>cheap airplane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme6.html '>cheap air tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme7.html '>cheap cell phones</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme8.html '>cheap checks</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme9.html '>cheap cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme10.html '>cheap discount airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme11.html '>cheap flights dubai</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme12.html '>cheap flights manila</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme13.html '>cheap flights paris</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme14.html '>cheap flights prague</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme15.html '>cheap flights rome</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme16.html '>cheap flights sydney</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme17.html '>cheap flights to europe</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme18.html '>cheap flights uk</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme19.html '>cheap flight tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme20.html '>cheap international flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme21.html '>cheap plane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme22.html '>cheap shoes</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme23.html '>cheap tires</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme24.html '>cheap train tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme25.html '>coach outlet</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme26.html '>dirt cheap tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme27.html '>discount airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme28.html '>discount air fares</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme29.html '>discount airlines</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme30.html '>discount airline tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme31.html '>discount air travel</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme32.html '>discount auto parts</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme33.html '>discount carpet</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme34.html '>discount clothing</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme35.html '>discount cologne</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme36.html '>discount cosmetics</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme37.html '>discount cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme38.html '>discount fabric</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme39.html '>discount flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme40.html '>discount fragrance</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme41.html '>discount jewelry</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme42.html '>discount kitchen cabinets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme43.html '>discount lighting</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme44.html '>discount lodging</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme45.html '>discount luggage</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme46.html '>discount motorcycle tires</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme47.html '>discount perfume</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme48.html '>discount plane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme49.html '>discount rugs</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme50.html '>discount shoes</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme51.html '>discount sunglasses</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme52.html '>discount tire</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme53.html '>discount tires online</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme54.html '>discount wheels</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-content/themes/wordpress/theme55.html '>sears outlet</a>"
23	1181435981000000	wataircru	"<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly1.php.html '>breitling watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly2.php.html '>bulova watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly3.php.html '>cartier watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly4.php.html '>casio watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly5.php.html '>cheap watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly6.php.html '>citizen watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly7.php.html '>designer watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly8.php.html '>discount watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly9.php.html '>gucci watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly10.php.html '>guess watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly11.php.html '>hamilton watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly12.php.html '>invicta watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly13.php.html '>ladies watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly14.php.html '>luminox watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly15.php.html '>luxury watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly16.php.html '>mens watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly17.php.html '>military watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly18.php.html '>movado watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly19.php.html '>nike watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly20.php.html '>nixon watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly21.php.html '>omega watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly22.php.html '>pocket watch</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly23.php.html '>replica watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly24.php.html '>rolex watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly25.php.html '>seiko watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly26.php.html '>skagen watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly27.php.html '>swatch watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly28.php.html '>swiss army watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly29.php.html '>swiss watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly30.php.html '>tag heuer watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly31.php.html '>timex watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly32.php.html '>tissot watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly33.php.html '>vintage watches</a> 
<a href='http://blogs.cc.gatech.edu/devin-new/wp-content/plugins/dolly/dolly34.php.html '>wrist watches</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon1.gif.html '>airfares rome</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon2.gif.html '>airline reservations</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon3.gif.html '>airline travel</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon4.gif.html '>air travel finder</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon5.gif.html '>bargain flights</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon6.gif.html '>best air fares</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon7.gif.html '>business class flights</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon8.gif.html '>cheap air travel</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon9.gif.html '>discount air travel</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon10.gif.html '>discounted fares</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon11.gif.html '>discounted flights</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon12.gif.html '>flight las vegas</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon13.gif.html '>flights johannesburg</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon14.gif.html '>flights moscow</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon15.gif.html '>flights panama</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon16.gif.html '>flights riga</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon17.gif.html '>flights tokyo</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon18.gif.html '>flights vilnius</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon19.gif.html '>flight tracker</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon20.gif.html '>hotel reservations</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon21.gif.html '>last minute airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon22.gif.html '>last minute flights</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon23.gif.html '>low air fares</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon24.gif.html '>lowest airfares</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon25.gif.html '>southwest airlines fares</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon26.gif.html '>alaska cruise</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon27.gif.html '>bahamas cruise</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon28.gif.html '>best cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon29.gif.html '>caribbean cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon30.gif.html '>carnival cruise</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon31.gif.html '>carnival cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon32.gif.html '>celebrity cruise line</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon33.gif.html '>celebrity cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon34.gif.html '>cruise deals</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon35.gif.html '>cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon36.gif.html '>cruise packages</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon37.gif.html '>cruise reviews</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon38.gif.html '>cruise ship jobs</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon39.gif.html '>cruise ship reviews</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon40.gif.html '>cruise ships</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon41.gif.html '>cruise specials</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon42.gif.html '>cruise vacations</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon43.gif.html '>disney cruise</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon44.gif.html '>disney cruise line</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon45.gif.html '>european cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon46.gif.html '>hawaii cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon47.gif.html '>holland america cruise line</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon48.gif.html '>last minute cruise deals</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon49.gif.html '>last minute cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon50.gif.html '>mediterranean cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon51.gif.html '>norwegian cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon52.gif.html '>norwegian cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon53.gif.html '>oceania cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon54.gif.html '>princess cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon55.gif.html '>princess cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon56.gif.html '>royal caribbean cruise lines</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon57.gif.html '>royal caribbean cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/blogcat/wp-includes/images/icons/icon58.gif.html '>singles cruises</a>"
23	1181886101000000	watchpayday	"<a href='http://ita.org.uk/uploads/smile1.gif.html '>breitling watches</a> 
<a href='http://ita.org.uk/uploads/smile2.gif.html '>bulova watches</a> 
<a href='http://ita.org.uk/uploads/smile3.gif.html '>cartier watches</a> 
<a href='http://ita.org.uk/uploads/smile4.gif.html '>casio watches</a> 
<a href='http://ita.org.uk/uploads/smile5.gif.html '>cheap watches</a> 
<a href='http://ita.org.uk/uploads/smile6.gif.html '>citizen watches</a> 
<a href='http://ita.org.uk/uploads/smile7.gif.html '>designer watches</a> 
<a href='http://ita.org.uk/uploads/smile8.gif.html '>discount watches</a> 
<a href='http://ita.org.uk/uploads/smile9.gif.html '>gucci watches</a> 
<a href='http://ita.org.uk/uploads/smile10.gif.html '>guess watches</a> 
<a href='http://ita.org.uk/uploads/smile11.gif.html '>hamilton watches</a> 
<a href='http://ita.org.uk/uploads/smile12.gif.html '>invicta watches</a> 
<a href='http://ita.org.uk/uploads/smile13.gif.html '>ladies watches</a> 
<a href='http://ita.org.uk/uploads/smile14.gif.html '>luminox watches</a> 
<a href='http://ita.org.uk/uploads/smile15.gif.html '>luxury watches</a> 
<a href='http://ita.org.uk/uploads/smile16.gif.html '>mens watches</a> 
<a href='http://ita.org.uk/uploads/smile17.gif.html '>military watches</a> 
<a href='http://ita.org.uk/uploads/smile18.gif.html '>movado watches</a> 
<a href='http://ita.org.uk/uploads/smile19.gif.html '>nike watches</a> 
<a href='http://ita.org.uk/uploads/smile20.gif.html '>nixon watches</a> 
<a href='http://ita.org.uk/uploads/smile21.gif.html '>omega watches</a> 
<a href='http://ita.org.uk/uploads/smile22.gif.html '>pocket watch</a> 
<a href='http://ita.org.uk/uploads/smile23.gif.html '>replica watches</a> 
<a href='http://ita.org.uk/uploads/smile24.gif.html '>rolex watches</a> 
<a href='http://ita.org.uk/uploads/smile25.gif.html '>seiko watches</a> 
<a href='http://ita.org.uk/uploads/smile26.gif.html '>skagen watches</a> 
<a href='http://ita.org.uk/uploads/smile27.gif.html '>swatch watches</a> 
<a href='http://ita.org.uk/uploads/smile28.gif.html '>swiss army watches</a> 
<a href='http://ita.org.uk/uploads/smile29.gif.html '>swiss watches</a> 
<a href='http://ita.org.uk/uploads/smile30.gif.html '>tag heuer watches</a> 
<a href='http://ita.org.uk/uploads/smile31.gif.html '>timex watches</a> 
<a href='http://ita.org.uk/uploads/smile32.gif.html '>tissot watches</a> 
<a href='http://ita.org.uk/uploads/smile33.gif.html '>vintage watches</a> 
<a href='http://ita.org.uk/uploads/smile34.gif.html '>wrist watches</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event1.php.html '>1000 loan payday</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event2.php.html '>advance cash loan online payday</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event3.php.html '>advance cash loan payday quick</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event4.php.html '>bad credit payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event5.php.html '>cash advance payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event6.php.html '>cheap payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event7.php.html '>consolidation debt loan payday</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event8.php.html '>default payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event9.php.html '>easy payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event10.php.html '>fast cash advance payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event11.php.html '>fast cash online payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event12.php.html '>faxless payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event13.php.html '>guaranteed payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event14.php.html '>instant payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event15.php.html '>military payday loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event16.php.html '>no credit check payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event17.php.html '>no fax payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event18.php.html '>no teletrack payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event19.php.html '>online payday loan service</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event20.php.html '>payday advance</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event21.php.html '>payday advance loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event22.php.html '>payday cash advance</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event23.php.html '>payday loan illinois</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event24.php.html '>payday loans</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event25.php.html '>payday loans online</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event26.php.html '>payday loan utah</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event27.php.html '>quick payday advance loan</a> 
<a href='http://localnet.acom.edu.au/online/calendar/event28.php.html '>same day payday loans</a>"
23	1182027008000000	pillspills	"http://volny.cz/pills1/aciphex.html aciphex 
http://volny.cz/pills1/ambien.html ambien 
http://volny.cz/pills1/buy-generic-cialis.html buy generic cialis 
http://volny.cz/pills1/buy-levitra.html buy levitra 
http://volny.cz/pills1/buy-tramadol-cod-pharmacy-online.html buy tramadol cod pharmacy online 
http://volny.cz/pills1/cheap-tramadol-online.html cheap tramadol online 
http://volny.cz/pills1/cheap-valium.html cheap valium 
http://volny.cz/pills1/cialis.html cialis 
http://volny.cz/pills1/cialis-levitra.html cialis levitra 
http://volny.cz/pills1/diflucan.html diflucan 
http://volny.cz/pills1/fioricet.html fioricet 
http://volny.cz/pills1/free-ambien.html free ambien 
http://volny.cz/pills1/generic-viagra.html generic viagra 
http://volny.cz/pills1/levitra.html levitra 
http://volny.cz/pills1/nexium.html nexium 
http://volny.cz/pills1/propecia.html propecia 
http://volny.cz/pills1/reductil.html reductil 
http://volny.cz/pills1/tramadol.html tramadol 
http://volny.cz/pills1/valium.html valium 
http://volny.cz/pills1/valium-prescriptions.html valium prescriptions"
23	1182146472000000	cheadisc	"<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx1.js.html '>airline discount tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx2.js.html '>cheap airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx3.js.html '>cheap airline flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx4.js.html '>cheap airline tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx5.js.html '>cheap airplane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx6.js.html '>cheap air tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx7.js.html '>cheap cell phones</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx8.js.html '>cheap checks</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx9.js.html '>cheap cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx10.js.html '>cheap discount airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx11.js.html '>cheap flights dubai</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx12.js.html '>cheap flights manila</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx13.js.html '>cheap flights paris</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx14.js.html '>cheap flights prague</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx15.js.html '>cheap flights rome</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx16.js.html '>cheap flights sydney</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx17.js.html '>cheap flights to europe</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx18.js.html '>cheap flights uk</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx19.js.html '>cheap flight tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx20.js.html '>cheap international flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx21.js.html '>cheap plane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx22.js.html '>cheap shoes</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx23.js.html '>cheap tires</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx24.js.html '>cheap train tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx25.js.html '>coach outlet</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx26.js.html '>dirt cheap tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx27.js.html '>discount airfare</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx28.js.html '>discount air fares</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx29.js.html '>discount airlines</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx30.js.html '>discount airline tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx31.js.html '>discount air travel</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx32.js.html '>discount auto parts</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx33.js.html '>discount carpet</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx34.js.html '>discount clothing</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx35.js.html '>discount cologne</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx36.js.html '>discount cruises</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx37.js.html '>discount flights</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx38.js.html '>discount jewelry</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx39.js.html '>discount kitchen cabinets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx40.js.html '>discount lighting</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx41.js.html '>discount lodging</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx42.js.html '>discount luggage</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx43.js.html '>discount motorcycle tires</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx44.js.html '>discount perfume</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx45.js.html '>discount plane tickets</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx46.js.html '>discount rugs</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx47.js.html '>discount shoes</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx48.js.html '>discount sunglasses</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx49.js.html '>discount tire</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx50.js.html '>discount tires online</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx51.js.html '>discount wheels</a> 
<a href='http://weblog.library.vanderbilt.edu/science/wp-includes/js/dbx52.js.html '>sears outlet</a>"
23	1182834140000000	ChepDiso	"<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst1.html '>airline discount tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst2.html '>cheap airfare</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst3.html '>cheap air fares</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst4.html '>cheap air flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst5.html '>cheap airline flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst6.html '>cheap airline tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst7.html '>cheap airplane tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst8.html '>cheap air tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst9.html '>cheap air travel</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst10.html '>cheap checks</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst11.html '>cheap concert tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst12.html '>cheap cruises</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst13.html '>cheap discount airfare</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst14.html '>cheap disney tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst15.html '>cheap flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst16.html '>cheap flights dubai</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst17.html '>cheap flights manila</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst18.html '>cheap flights paris</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst19.html '>cheap flights prague</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst20.html '>cheap flights rome</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst21.html '>cheap flights sydney</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst22.html '>cheap flights to australia</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst23.html '>cheap flights to europe</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst24.html '>cheap flights uk</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst25.html '>cheap flight tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst26.html '>cheap hotels</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst27.html '>cheap international airfare</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst28.html '>cheap international air fares</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst29.html '>cheap international flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst30.html '>cheap motels</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst31.html '>cheap northwest flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst32.html '>cheap plane tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst33.html '>cheap sunglasses</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst34.html '>cheap tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst35.html '>cheap tickets london</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst36.html '>cheap tires</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst37.html '>cheap train tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst38.html '>cheap travel</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst39.html '>cheap travel packages</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst40.html '>cheap vacations</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst41.html '>cheap wedding favors</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst42.html '>cheap wedding invitations</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst43.html '>dirt cheap airfare</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst44.html '>dirt cheap tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst45.html '>discount airfare</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst46.html '>discount air fares</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst47.html '>discount airlines</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst48.html '>discount air travel</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst49.html '>discount auto parts</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst50.html '>discount cosmetics</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst51.html '>discount cruises</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst52.html '>discount fabric</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst53.html '>discount flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst54.html '>discount hotels</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst55.html '>discount international flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst56.html '>discount jewelry</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst57.html '>discount kitchen cabinets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst58.html '>discount lodging</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst59.html '>discount perfume</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst60.html '>discount plane tickets</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst61.html '>discount shoes</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst62.html '>discount sunglasses</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst63.html '>discount tire</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst64.html '>discount travel</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst65.html '>discount travel packages</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst66.html '>military discount flights</a> 
<a href='http://blogs.lib.uconn.edu/nst/wp-content/themes/nst/nst67.html '>military discount travel</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl1.html '>airfares rome</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl2.html '>airline reservations</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl3.html '>airline travel</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl4.html '>air travel finder</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl5.html '>bargain flights</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl6.html '>best air fares</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl7.html '>business class flights</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl8.html '>cheap air travel</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl9.html '>discount air travel</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl10.html '>discounted fares</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl11.html '>discounted flights</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl12.html '>flight las vegas</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl13.html '>flights johannesburg</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl14.html '>flights moscow</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl15.html '>flights panama</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl16.html '>flights riga</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl17.html '>flights tokyo</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl18.html '>flights vilnius</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl19.html '>flight tracker</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl20.html '>hotel reservations</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl21.html '>last minute airfare</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl22.html '>last minute flights</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl23.html '>low air fares</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl24.html '>lowest airfares</a> 
<a href='http://blogs.lib.uconn.edu/rcl/wp-content/themes/rcl/rcl25.html '>southwest airlines fares</a> 
"
23	1182925425000000	paydayloancruises	"<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy1.html '>1000 loan payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy2.html '>advance cash loan online payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy3.html '>advance cash loan payday quick</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy4.html '>bad credit payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy5.html '>cash advance payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy6.html '>cheap payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy7.html '>consolidation debt loan payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy8.html '>default payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy9.html '>easy payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy10.html '>fast cash advance payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy11.html '>fast cash online payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy12.html '>faxless payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy13.html '>guaranteed payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy14.html '>instant payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy15.html '>military payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy16.html '>no credit check payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy17.html '>no fax payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy18.html '>no teletrack payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy19.html '>online payday loan service</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy20.html '>payday advance</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy21.html '>payday advance loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy22.html '>payday cash advance</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy23.html '>payday loan illinois</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy24.html '>payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy25.html '>payday loans online</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy26.html '>payday loan utah</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy27.html '>quick payday advance loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/murphy/wp-content/uploads/2007/02/murphy28.html '>same day payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc1.html '>alaska cruise</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc2.html '>bahamas cruise</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc3.html '>best cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc4.html '>caribbean cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc5.html '>carnival cruise</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc6.html '>carnival cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc7.html '>celebrity cruise line</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc8.html '>celebrity cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc9.html '>cruise deals</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc10.html '>cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc11.html '>cruise packages</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc12.html '>cruise reviews</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc13.html '>cruise ship jobs</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc14.html '>cruise ship reviews</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc15.html '>cruise ships</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc16.html '>cruise specials</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc17.html '>cruise vacations</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc18.html '>disney cruise</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc19.html '>disney cruise line</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc20.html '>european cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc21.html '>hawaii cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc22.html '>holland america cruise line</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc23.html '>last minute cruise deals</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc24.html '>last minute cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc25.html '>mediterranean cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc26.html '>norwegian cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc27.html '>norwegian cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc28.html '>oceania cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc29.html '>princess cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc30.html '>princess cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc31.html '>royal caribbean cruise lines</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc32.html '>royal caribbean cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/burnsided/wp-content/themes/lrc/lrc33.html '>singles cruises</a> 
"
23	1183096002000000	cheadisconsdebt	"<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp1.html '>airline discount tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp2.html '>cheap airfare</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp3.html '>cheap airline flights</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp4.html '>cheap airline tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp5.html '>cheap airplane tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp6.html '>cheap air tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp7.html '>cheap cell phones</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp8.html '>cheap checks</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp9.html '>cheap cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp10.html '>cheap discount airfare</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp11.html '>cheap flights dubai</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp12.html '>cheap flights manila</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp13.html '>cheap flights paris</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp14.html '>cheap flights prague</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp15.html '>cheap flights rome</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp16.html '>cheap flights sydney</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp17.html '>cheap flights to europe</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp18.html '>cheap flights uk</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp19.html '>cheap flight tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp20.html '>cheap international flights</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp21.html '>cheap plane tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp22.html '>cheap shoes</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp23.html '>cheap textbooks</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp24.html '>cheap tires</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp25.html '>cheap train tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp26.html '>coach outlet</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp27.html '>dirt cheap tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp28.html '>discount airfare</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp29.html '>discount air fares</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp30.html '>discount airlines</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp31.html '>discount airline tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp32.html '>discount air travel</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp33.html '>discount auto parts</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp34.html '>discount carpet</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp35.html '>discount clothing</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp36.html '>discount cologne</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp37.html '>discount cosmetics</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp38.html '>discount cruises</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp39.html '>discount fabric</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp40.html '>discount flights</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp41.html '>discount fragrance</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp42.html '>discount jewelry</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp43.html '>discount kitchen cabinets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp44.html '>discount lighting</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp45.html '>discount lodging</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp46.html '>discount luggage</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp47.html '>discount motorcycle tires</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp48.html '>discount perfume</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp49.html '>discount plane tickets</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp50.html '>discount rugs</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp51.html '>discount shoes</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp52.html '>discount sunglasses</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp53.html '>discount tire</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp54.html '>discount tire direct</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp55.html '>discount tires online</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp56.html '>discount wheels</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp57.html '>hair straightener</a> 
<a href='http://gandalf.lrc.edu/bloghome/schweikert/wp-content/uploads/2007/02/wp58.html '>sears outlet</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter1.html '>bad credit debt consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter2.html '>consolidation loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter3.html '>credit card consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter4.html '>credit card debt consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter5.html '>credit consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter6.html '>debt consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter7.html '>debt consolidation loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter8.html '>free debt consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter9.html '>mortgage debt consolidation</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter10.html '>credit card debt</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter11.html '>credit card debt elimination</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter12.html '>credit card debt relief</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter13.html '>credit card debt settlement</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter14.html '>debt elimination</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter15.html '>debt management</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter16.html '>debt reduction</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter17.html '>debt relief</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter18.html '>debt settlement</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter19.html '>1000 loan payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter20.html '>advance cash loan online payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter21.html '>advance cash loan payday quick</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter22.html '>bad credit payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter23.html '>cash advance payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter24.html '>cheap payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter25.html '>consolidation debt loan payday</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter26.html '>default payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter27.html '>easy payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter28.html '>fast cash advance payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter29.html '>fast cash online payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter30.html '>faxless payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter31.html '>guaranteed payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter32.html '>instant payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter33.html '>military payday loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter34.html '>no credit check payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter35.html '>no fax payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter36.html '>no teletrack payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter37.html '>online payday loan service</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter38.html '>payday advance</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter39.html '>payday advance loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter40.html '>payday cash advance</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter41.html '>payday loan illinois</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter42.html '>payday loans</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter43.html '>payday loans online</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter44.html '>quick payday advance loan</a> 
<a href='http://gandalf.lrc.edu/bloghome/richter/wp-content/themes/richter/richter45.html '>same day payday loans</a> 
"
23	1183510187000000	financepaydayguaranteed	"<a href='http://finance.bolhost.com/carinsurancerate/ '>car insurance rate</a> 
<a href='http://finance.bolhost.com/autoloan/ '>auto loan</a> 
<a href='http://finance.bolhost.com/dentalplans/ '>dental plans</a> 
<a href='http://finance.bolhost.com/dietpills/ '>ephedra diet pills</a> 
<a href='http://finance.bolhost.com/paydaycashadvance/ '>cash advance cincinnati</a> 
<a href='http://finance.bolhost.com/refinance/ '>home refinance mortgage</a> 
<a href='http://finance.bolhost.com/flights/ '>cheap flights</a> 
<a href='http://finance.bolhost.com/flights1/ '>london cheap flights</a> 
<a href='http://finance.bolhost.com/flights2/ '>cheap flights cairo</a> 
<a href='http://finance.bolhost.com/airlinetickets/ '>airline tickets</a> 
<a href='http://finance.bolhost.com/cellphones/ '>cell phones</a> 
<a href='http://finance.bolhost.com/cellphones1/ '>cell phone reverse number</a> 
<a href='http://finance.bolhost.com/cellphones2/ '>cell phone radiation</a> 
<a href='http://finance.bolhost.com/cruises/ '>cruises</a> 
<a href='http://finance.bolhost.com/cruises1/ '>bahama cruises</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/ '>fast payday loans no credit check</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-1.html '>payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-2.html '>no fax payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-3.html '>payday loans online</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-4.html '>bad credit payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-5.html '>faxless payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-6.html '>payday bad credit loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-7.html '>online payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-8.html '>no credit check payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-9.html '>no teletrack payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-10.html '>cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-11.html '>cheap payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-12.html '>payday loans for bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-13.html '>payday loans without direct deposit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-14.html '>cash advances online fast payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-15.html '>same day payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-16.html '>cash advance loans payday internet</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-17.html '>online payday loans no pay day fax cash advance</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-18.html '>fast payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-19.html '>payday loans no credit check</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-20.html '>fast cash online paycheck advance bad credit payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-21.html '>online payday loans pay day fax cash advance</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-22.html '>acircordm personal payday loans online fast payday cash</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-23.html '>need cash online payday loan personal loans person</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-24.html '>payday advance loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-25.html '>payday loan online fast cash loans by western union</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-26.html '>advance cash fast in loans online payday quick unt</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-27.html '>instant payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-28.html '>payday loan online fast cash loans western union</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-29.html '>payday loans with bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-30.html '>personal loans payday advance bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-31.html '>most approval advance payday hold personal check cash loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-32.html '>payday loans with low fees</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-33.html '>personal loans bad credit cash payday advances</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-34.html '>cash advance and payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-35.html '>payday loans guaranteed no fax</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-36.html '>quick payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-37.html '>get payday cash advance fast online loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-38.html '>no fax payday loans online cash advance loan sonic cash</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-39.html '>payday loans cheap payday loan cash advance chicago</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-40.html '>guaranteed payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-41.html '>payday loan online fast cash loans by western unio</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-42.html '>payday loans for people with bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-43.html '>national cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-44.html '>online payday loan cash advances personal loans pa</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-45.html '>fast cash payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-46.html '>fast payday online cash loans search</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-47.html '>illinois cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-48.html '>payday loans with no teletrack</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-49.html '>personal loans borrow cash payday loan online payd</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-50.html '>alaska cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-51.html '>banks issue payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-52.html '>canada student loans payday advance</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-53.html '>cash advance service payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-54.html '>minnesota cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-55.html '>payday loans no faxing</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-56.html '>cash advance payday loans software</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-57.html '>louisiana cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-58.html '>payday loan personal loans online cash advances pa</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-59.html '>washington cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-60.html '>emergency advance payday hold personal check cash loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-61.html '>no fax cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-62.html '>payday loans in canada</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-63.html '>personal loans payday loan online cash advance washington</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-64.html '>utah cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-65.html '>very bad credit payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-66.html '>cards payday loans for canadians with bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-67.html '>easy payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-68.html '>free payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-69.html '>no fax bad credit payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-70.html '>payday advance preferred cash loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-71.html '>payday loans bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-72.html '>payday loans canada</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-73.html '>payday loans cash advance</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-74.html '>personal loans preferred payday loan paydayloanpag</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-75.html '>same day payday loans bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-76.html '>advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-77.html '>no faxing payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-78.html '>online payday cash advance instant loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-79.html '>payday advance pay day online cash loans search</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-80.html '>payday loans with no credit check</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-81.html '>vermont cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-82.html '>advance cash fast get in loans online payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-83.html '>apple payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-84.html '>canadian payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-85.html '>cash advance money payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-86.html '>florida cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-87.html '>instant approval payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-88.html '>new payday cash advance loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-89.html '>njfastcash personal loans online payday loan payda</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-90.html '>payday cash advance loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-91.html '>payday loan online personal loans paydayloanpages</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-92.html '>payday loans cash advances online</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-93.html '>payday loans for people with bad creditno credit check</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-94.html '>payday loans for self employed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-95.html '>personal loans for people with bad credit not payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-96.html '>personal loans online payday loan preferredpaydayl</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-97.html '>texas cash advance payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-98.html '>cash advance payday loans tv</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/payday-99.html '>connecticut cash advance payday loans software</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/ '>guaranteed payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-1.html '>guaranteed payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-2.html '>payday loans guaranteed no fax</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-3.html '>advance cash guaranteed loan payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-4.html '>loans bad credit guaranteed payday mortgage auto uk payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-5.html '>guaranteed approval payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-6.html '>guaranteed no fax payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-7.html '>guaranteed no fax payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-8.html '>borrow money online with quick guaranteed payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-9.html '>no faxing payday loan online fax guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-10.html '>guaranteed payday loans for people with bad credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-11.html '>no credit check guaranteed payday loan approval</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-12.html '>guaranteed no fax payday loan money</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-13.html '>guaranteed payday loan instant approval</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-14.html '>100 guaranteed payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-15.html '>borrow money online with quick guaranteed payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-16.html '>guaranteed payday advance loan approval</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-17.html '>guaranteed unsecured payday personal loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-18.html '>approval faxless guaranteed loan payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-19.html '>guaranteed faxless payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-20.html '>guaranteed payday loan no faxing with savings account</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-21.html '>guaranteed payday loan to savings account</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-22.html '>guaranteed unsecured loans not payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-23.html '>100 guaranteed approval faxless payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-24.html '>fax guaranteed loan no payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-25.html '>guaranteed approval payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-26.html '>guaranteed no fax payday loan credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-27.html '>guaranteed unsecured payday personal loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-28.html '>payday loan guaranteed approval</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-29.html '>payday loan guaranteed no fax</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-30.html '>guaranteed approval no faxing no credit check payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-31.html '>payday guaranteed approval cash loans southeast kansas</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-32.html '>approval guaranteed loan payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-33.html '>guaranteed fax payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-34.html '>guaranteed instant payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-35.html '>guaranteed long term payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-36.html '>one hour payday loan guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-37.html '>online no fax payday loan guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-38.html '>account guaranteed loan payday savings</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-39.html '>guaranteed approval short employment payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-40.html '>guaranteed fax payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-41.html '>guaranteed loan payday online</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-42.html '>guaranteed personal loan andnot payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-43.html '>payday loan with guaranteed no faxing</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-44.html '>faxing guaranteed loan no payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-45.html '>guaranteed online approval payday loan no fax</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-46.html '>guaranteed payday loan without a job</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-47.html '>payday guaranteed approval cash loans in southeast kansas</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-48.html '>w guaranteed payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-49.html '>100 guaranteed approval on payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-50.html '>cash guaranteed loan payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-51.html '>emergency payday loan no fax guaranteed approval</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-52.html '>guaranteed 1000 payday loan no credit check</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-53.html '>guaranteed payday loan credit</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-54.html '>guaranteed personal loans payday cash</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-55.html '>no fax no hassle payday loans guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-56.html '>online instant guaranteed payday loans long term payback</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-57.html '>payday payday guaranteed no fax payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-58.html '>faxless guaranteed approval payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-59.html '>guaranteed bad credit payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-60.html '>guaranteed payday loan up to 3000 roll over</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-61.html '>guaranteed payday loan without a bank account</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-62.html '>guaranteed personal loans payday cash loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-63.html '>instant guaranteed payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-64.html '>long term payday loans 100000 guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-65.html '>payday guaranteed no fax payday loan</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-66.html '>payday loan no fax guaranteed</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-67.html '>advance approval guaranteed loan payday</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-68.html '>borrow guaranteed loan money online payday quick</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-69.html '>guaranteed faxless payday loans no teletrak</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-70.html '>guaranteed no teletrack 2c no faxing payday loans</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-71.html '>guaranteed payday loans for people with bad credit free</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-72.html '>guaranteed payday loans vian savings account</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-73.html '>guaranteed payday loans with savings account</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-74.html '>online instant guaranteed payday loans long term p</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-75.html '>payday guaranteed approval cash loans in southeast</a> 
<a href='http://biomed.creighton.edu/reservations/lib/db/mysql/1/guaranteed-76.html '>payday guaranteed payday loan</a> 
"
23	1199786799000000	rgrp	Now using openid for signon so this issue is not relevant.
24	1246441366000000	rgrp	"Associated to ticket:60 (front page usability improvements)

Fixed in r272:e6de501c384e."
25	1199821005000000	rgrp	"Amended ticket substantially. Previous title was ""A registered person creates their own tags for a package"" but this was no longer relevant since anyone may add and amend tags (see ticket:30)."
25	1204131522000000	rgrp	Fixed in revisions leading up to r239 and r241. Currently just have autocomplete and no 'suggested tags' as this requires pre-computation and caching of results which needs to be thought about further.
27	1199788321000000	rgrp	"In many ways everything that is needed is already in place in that the package update and create controller just require raw posts to do their work. However should implement some kind of authentication/authorization to prevent automated spamming.

This would also require some way of distinguishing posts from our own WUI and those coming from outside (at present no checking is performed and the 'post' to these controllers is freely allowed by anyone out there!"
27	1202400048000000	rgrp	"Methods potentially in need of access control at present (on controllers/package.py)

  * update (_update)
  * create

Frankly, for time being we can probably leave these unsecured but with monitoring. Should they be abused we can add access control fairly easily. So decision: no work on access control/auth for time being here.

Focus instead should be on:

  * documentation of post parameters (rgrp)
  * returning restful status values (201 Created, 204 Updated, etc)
  * returning machine readable output from read and list (json)

"
27	1202996441000000	johnbywater	"So, after reading all about REST interfaces, I've written a functional requirement for a RESTfull interface to a web application domain model:

http://desire.appropriatesoftware.net/requirements/60/

Basically, the 'fit criteria' require answers to these questions:

* What are the URIs?
* What's the format?
* What methods are supported at each URI?
* What status codes could be returned?

I think we can hope to make a clean rest interface at (something like) ckan.net/api/rest. Having such a distinct location is fairly common (cf. flickr.com) and prevents any clutering the web browser client interface with aspects of machine client support.

To make this point clearer, as RESTfullness claims to describe the web as it is, then the existing web browser interface must already be RESTfull. Hence, the main distinction with CKAN development is between CKAN's RESTfull machine interface and CKAN's RESTfull web browser client interface.

Hence, if a CKAN machine client will follow the client-server interaction of a CKAN web browser client, the main requirement is to make sure the format of the responses is client-appropriate. Whilst machine clients can make POST and GET requests in the same way as a web browsers, clearly machine clients don't need lots of decorative HTML when accessing domain objects.

Therefore, CKAN needs first to make user of a data format for rendering domain objects, and it needs to detect when it is required to return data in this format.

Options for data format are bascially XML or JSON. It looks like JSON is preferable. 

Options for detecting client type are to prefix normal resource path with /api/rest/ or for the machine clients to pass a format=json parameter with each request.

"
27	1202997781000000	johnbywater	"So for this ticket, a REST interface for packages would involve:

See [wiki:RestfulAPI this wiki page] for more information.

"
27	1207683863000000	rgrp	"The remaining issue is authentication. Initially was hopeful that we could use openid (perhaps with oauth) but this does not seem possible (despite much talk of openid and oauth being complementary) ... Thus we shall adopt this old-fashioned approach.

  * A user who wishes to use the web api must obtain a web api key. They do this by:
    * Going to ckan.net and signing in using their open id.
    * Visit /account/apikey/: this should generate them a unique uuid key (or show their existing key if they already have one). This key should then be stored in the db along with their openid.
  * Once a user has an api key they must include in the request when making changes. This may necessitate an update to the restful api to start having a more generic message format (this also makes it more extensible for the future):
    * auth: auth key
    * data: data body (what we currently send)"
27	1215543933000000	rgrp	Massive ticket now thoroughly addressed (early start in r242 and ff. then later in r275, r276 etc). Also now have start of demo ckan REST client at browser:ckanclient
28	1200902911000000	rgrp	Mark as wontfix as not sure what benefit this provides given the the sql dump of data already provided in relation to ticket:38. If necessary it can be reopened in the future.
29	1157371518000000	rgrp	See changeset:40.
30	1185472559000000	rgrp	"This ticket is partially resolved and partially irrelevant:
 
  * Since move to 'ckan2' in Jan 07 (r54 onwards) have had tag support.
  * Since move to versioned system (r121 and ff.) have allowed tags to be added and amended by anyone."
31	1177006817000000	rgrp	Milestone milestone20 deleted
31	1185472236000000	rgrp	Can get this functionality via Notes section of package. Might want to reopen in future if specifically need something 'comment-like' rather than 'text-wiki-like' but for time being what we have is fine.
32	1185472746000000	rgrp	Added Tag support in r82 to r87 (back in February).
33	1185472909000000	rgrp	Basic listing support for tags in r82 to r87. However search (and paging of tag lists) not yet provided.
33	1199788094000000	rgrp	Added search support in r190. No paging of tag lists but this is now part of new ticket:42.
34	1253781550000000	dread	"dread@dread-laptop:~/hgroot/ckan$ wget http://ckan.net/fff
--2009-09-24 09:38:02--  http://ckan.net/fff
Resolving ckan.net... 88.198.21.211
Connecting to ckan.net|88.198.21.211|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2009-09-24 09:38:02 ERROR 404: Not Found.
"
35	1185471537000000	rgrp	Resolved in r157.
36	1185470035000000	rgrp	Resolved in r168.
37	1199786536000000	rgrp	Fixed in r193 with improvements in r201 and crucial bugfix in r203.
38	1199787336000000	rgrp	Partially addressed by r194 and making available of db dump on production machine.
38	1200903004000000	rgrp	Closing for time being as sql dump seems sufficient. If JSON is to be provided (per package and with Atom feed of changes) this should be made into a separate ticket.
39	1200761681000000	rgrp	Using current vdm system this will be very slow so reassign to v0.6 (when we should have updated to new and better vdm setup).
39	1214244190000000	rgrp	Deferring as transition to new vdm has not yet happened will do as part of 0.7. Also fairly low priority ...
39	1220900869000000	rgrp	Dependent on ticket:51 (upgrade to vdm v0.2).
39	1223908298000000	rgrp	See r363 r364 and r366.
40	1200993319000000	rgrp	Fixed in r211.
41	1199787967000000	rgrp	r198 upgraded trunk to use 0.9.6 and these changes were deployed on production as of 2008-01-06 (PM).
42	1204133257000000	rgrp	See r234 and previous. Pagination now implemented for packages and tags (but not for revisions yet).
43	1214244140000000	rgrp	This is currently low priority and should only happen after move to vdm 0.2 (sqlalchemy etc).
43	1241779943000000	rgrp	"Started work on this using ""extra"" table. See r426."
43	1246441195000000	rgrp	Making this versioned/revisioned turns out to be slightly more complex than anticipated (need a stateful associated list). So defer to 0.95
43	1249410762000000	rgrp	"Done in model in changeset:7f9b19d4d54a: ""Implement a fully *versioned* PackageExtra domain object in the model and attach to the Package object via a simple dict-like attribute named 'extras'."".

However still need to integrate into WUI which can only happen after conversion to formalchemy (ticket:76) is complete.
"
43	1253709802000000	rgrp	Split out wui work in two new tickets ticket:124 (show) and ticket:125 (edit) and therefore marking this as done.
44	1215543484000000	rgrp	Minor importance and at this point we will defer into v0.7.
44	1223390660000000	rgrp	Done in r339.
45	1204133342000000	rgrp	Fixed in r221 by JB.
46	1218545499000000	rgrp	Fixed in r303.
47	1201600216000000	rgrp	"Good suggestion (this has been on my mind for a while). This should be pretty cheap to do, see instructions at:

http://wiki.pylonshq.com/display/authkitcookbook/OpenID+Passurl

We probably just want to create a normal genshi template and then have a function that renders which can then be set in the config file."
47	1215543616000000	rgrp	Fixed in r303.
48	1296663361000000	rgrp	Done in cset:2a056fce7798.
49	1214244368000000	rgrp	Has become less of a problem since big efforts a few months ago so this can be downgraded for time being.
49	1257244973000000	rgrp	Not a problem at the moment.
50	1239018913000000	rgrp	Have done a bit of digging but noot currently a priority given direction datapkg is going.
50	1259086615000000	casbon	"Probably the effort to install apt cross platform would be prohibitive.

I would also like to see pure python if possible so that you could run on GAE."
50	1267648356000000	rgrp	Do not see there is much more to do here.
51	1223908230000000	rgrp	Done. See r344 to r354.
52	1223908425000000	rgrp	Turned out this was already implemented -- see r366.
53	1239133021000000	rgrp	See r435. This just provides basic list of revisions affecting this. Next step would be to show diffs but that is another ticket.
54	1223909366000000	rgrp	ckan v0.6 (dump only) done in r355 and r358.
54	1230211256000000	rgrp	See r362, r365, r370 + more.
55	1223909475000000	rgrp	See r356 and r362 and r365.
55	1223909891000000	rgrp	See r356 and r362 and r365.
56	1239018857000000	rgrp	See r398 + r412. Could do a bit more here to have nicer icons and a big sign on the package indicating whether open or not).
57	1239018717000000	rgrp	Done. See r415, r417, r423. (This was tidying up -- most work had already been done by start of last autumn).
58	1239974365000000	rgrp	See r442 and r437.
59	1239436422000000	rgrp	1. done in r429.
59	1249411064000000	rgrp	Not really clear what needs to be done and how useful it would be. Removing milestone until that is clarified.
59	1272468398000000	rgrp	"Think we should resolve this by:

  * Removing guide page.
  * Putting a link to ckan user guide (http://wiki.okfn.org/ckan/doc/) in RHS sidebox on front page along with other links ... -- can this link url be made a config option in ini (defaulted to that url on load in lib/base.py or wherever it is loaded)
  * Move current content of guide (one item about bookmarklet) to http://wiki.okfn.org/ckan/doc/faq/"
59	1273080019000000	johnbywater	All points in comment:5 have been implemented.
60	1246434921000000	rgrp	1. is ticket:24 and 2+3 have been done in r258:5b1f4efd09c3, r260:934442318774 etc.
61	1246437341000000	rgrp	Very low priority and creates complications (e.g. dump for backup is different from dump for public use).
61	1253612984000000	dread	"Done in cset:41151725cc12
Cost: 1h"
62	1249410921000000	rgrp	"Defer until after conversion to formalchemy (ticket:76) is complete.
"
62	1250181376000000	dread	Agreed with rgrp that tags should be allowed to be international letters, but not symbols other than these three: ._- but not uppercase characters. This is done in the checkins for ticket 76.
63	1245656000000000	rgrp	Fixed in r63c48818395f
64	1246127063000000	rgrp	"Fixed in r269:4a2febc4f1eb.
"
65	1246434569000000	rgrp	Done in r254:fa2ef73afb40.
66	1250785405000000	dread	Done in changeset:f875f0f87cb1
67	1250785122000000	dread	Done in changeset:f875f0f87cb1
68	1245697554000000	rgrp	Fixed in r7ffc8288cb88 and rc6ac0a80ba11.
69	1246437494000000	rgrp	Not sure how useful/important moving to text-only is so will defer this for the present. Use of new license list done in r270:ea466d2721ea.
70	1247827053000000	dread	Done on checkins: 46d39c62396a and 44eb4f2c4822.
71	1250181211000000	dread	"Done in 1.5 hrs
Change set 2b434d63d5fd"
72	1251451954000000	rgrp	Done in cset:9199c49a81e6 
73	1266510366000000	johnbywater	"Moved ticket to okfn tracker:
http://www.knowledgeforge.net/okfn/tasks/ticket/256"
74	1250182938000000	dread	"Done in 0.5h
Checked in to dd2f9713a6a2.
Third detail done - enquiry can be done for all packages.
Still need to change isitopen site to make use of the parameter ?ckan-package=<package_name>"
75	1296341223000000	rgrp	"Closing as duplicate (invalid also):

 * Not sure recording view stats for a given package page is that useful -- so invalid here
 * Resource download is now ticket:937"
76	1250152708000000	dread	"Objectives 1 and 2 done. 3 left for another ticket if req'd.
Several checkins from 4cd7935adaceup to af32f6c2c5f1"
76	1250175782000000	dread	I spent 30 hours on this task.
76	1251295339000000	dread	Reopening to improve look of the form. Text input fields need to be wider to be like before (size=40). Try and get remaining field information text on there.
76	1251301765000000	dread	Part 3 done in cset:7ace6c5d6c68.
77	1255173809000000	dread	"Basic work done in cset:80c83a5be797.
Extra work done (rgrp) in cset:ac2fdd73e347"
77	1255176732000000	dread	Migrate script done in cset:f232b05eb875
78	1311181280000000	thejimmyg	This ticket is now more than 6 months old so closing in line with our new ticketing policy.
78	1314877151000000	zephod	Fixed in cset:8638a0ac2255 (fifty year expiry time on the four cookies)
79	1250789298000000	dread	"Search: geo landsat

Gives:
3 tags found: geo (1), geo-somthing (12), landsat (4)
11 packages found:
(usual results)
"
79	1250789659000000	dread	"[x] only open packages
[x] only downloadable packages

open licenses start with 'OKD compliant' or 'OSI compliant' (same test as isopen). 
See model/core.py"
79	1251110610000000	dread	"All done in changeset:6155a424e775
Now gives tags results. All words in query are searched for independently unless you enclose them in ""quote marks"". Options for filtering by openness/downloadable."
79	1251111212000000	dread	Also changeset:856047aa2ea6 (forgot to add a couple of files)
80	1251111180000000	dread	Done in changeset:1f8132df0aa8
81	1268487327000000	rgrp	Done in cset:a16c18167b6c/vdm and cset:8e235d730790/vdm (was actually reasonably simple to do).
82	1256565343000000	dread	"Done basic work in vdm in cset:2a51e39be179.
Previous work in ckan in cset:2cfa1c47acd2 - maybe not needed."
82	1256565441000000	dread	Follow on work in ckan in ticket:173.
83	1267648301000000	rgrp	Done quite a while ago in cset:2a51e39be179/vdm
84	1340626385000000	icmurray	"Moved to ckan-future, and assigned to kindly.

@kindly : move to a different milestone, or close/won't-fix as you see fit."
85	1263206391000000	rgrp	Done in cset:6c58b1f5a542/vdm. Migration script will be in ckan.
86	1249050202000000	rgrp	Done in changeset:e295241f4a53
87	1258470719000000	dread	Same as ticket:189
88	1264439112000000	dread	Download metadata added - format, descripiton, hash. See ticket:87.
89	1260458636000000	dread	API provided for tag counts in cset:5a94d1ac60ef allowing an external tag cloud.
89	1265892698000000	dread	Done in cset:66144a206c6b
90	1257535604000000	rgrp	All pre-requisites done. However unsure about how we integrate into WUI so downgrading for the moment.
90	1264158298000000	wwaites	"see http://semantic.ckan.net/

data can be loaded into the store easily enough (cron job for now?)

http://semantic.ckan.net/data/package-name the RDF equivalent of http://ckan.net/package/package-name

has sparql interface at http://semantic.ckan.net/sparql

not so sure about the assertions Talis has made about the ckan namespace..."
90	1265315677000000	dread	"Machine-readable link added in cset:9a7726fec351 but not 303 redirect yet.
Cost so far: 1.5h"
90	1265388992000000	dread	"303 redirect done in cset:ee207cfe617d. Cost: 1h.

rgrp said leave ""Alternative formats"" part to Nick."
90	1265890334000000	rgrp	Closing as main part done and alternative formats part is now ticket:247
91	1250864156000000	dread	Done in changeset:a6c3af2024da
92	1297344859000000	rgrp	wontfix at the moment as we have the separate RDF service and RDFa is probably not the best option as always a bit incomplete.
93	1253613274000000	dread	"Split up into smalled tickets including:
ticket:114
ticket:115
ticket:116
ticket:117"
94	1250604808000000	dread	Done in changeset:631431630ef2
95	1251454716000000	rgrp	Done in cset:29a5928e617b
96	1311176063000000	thejimmyg	This sounds like an issue with setuptools not CKAN. It has been open for more than 6 months and doesn't appear to have been an issue so closing.
97	1318181317000000	rgrp	Duplicate of: https://github.com/okfn/datapkg/issues/5
98	1297210774000000	rgrp	Done in cset:b7d8786614c0 - removed pastescript and just do 'by hand'.
99	1297081088000000	rgrp	Won't fix as we are not using sqlalchemy any longer.
100	1318181227000000	rgrp	Resolving as wontfix since not really sure any point to this.
101	1267648607000000	rgrp	"Marking as fixed as Item 1 and item 2 have now been done (at least partially), using urlgrabber. However no ""distribution"" support (we just assume all downloads are ""payloads"" and get metadata from ckan). See cset:ae89cbc898c7/datapkg cset:8448f862c588/datapkg cset:df22cd0f92a1/datapkg etc."
102	1260285104000000	rgrp	Done (a couple of weeks or more ago) in cset:061e3f3d253b/vdm. Migration script as used in CKAN in browser:ckan/migration/versions/008_update_vdm_ids.py.
103	1300217647000000	thejimmyg	See also #1012 Add package revision history to api
103	1300363180000000	thejimmyg	Closing, we'll take this up in #1012.
103	1301943140000000	dread	"Didn't take this up in #1012 after all. Closing as wont fix.
"
103	1308828847000000	dread	Now we have this working in #1141 we can add the links from the package history page suggested here.
103	1311175065000000	thejimmyg	"This is now implemented. Date parsing is fairly rudimentary but you can now do things like this:

http://test.ckan.net/package/uk-crc-rural-services-data@2011-06-10"
103	1311175601000000	dread	This isn't finished - see second point in description and comment 4: Now we have this working in #1141 we can add the links from the package history page suggested here.
103	1311179429000000	thejimmyg	"David, I'm in the middle of a ticket refactor. Please don't open tickets I've just closed ;)

This will be taken forward as part of #1233
"
103	1311180850000000	dread	Ah, you should have mentioned the new ticket! ;-)
105	1252488496000000	dread	"All done apart from group owners. This functionality will be left for another ticket.
cset:bd4e48a544e2 cset:3263b6612fb7 cset:c6a6f88a50c2 cset:e9111a221222
Took 1d."
106	1256140649000000	dread	Ticket split into ticket:163 and ticket:164
107	1257803384000000	rgrp	"On the ""long run"" item "
107	1258381854000000	dread	Cost: 1h
107	1296341644000000	rgrp	"Superseded by plans for upload:

  * #877 - File upload in WUI: 2d
  * #878 - Integrate file upload with workflow around package resources: 3d
"
108	1252318938000000	dread	This has been done in changeset:ec90f59040e0.
109	1291829457000000	thejimmyg	"This is effectively implemented by the util API;

http://knowledgeforge.net/ckan/hg/file/tip/doc/api/version2.rst

John has a separate proposal to move the util API into the REST API but that is a different discussion.

Here's how you can now search on tags:

/api/2/util/tag/autocomplete?incomplete=ru

"
110	1252488660000000	dread	This was all done in work for ticket:105
111	1252331626000000	rgrp	Done in cset:c1bad304e1a0
112	1264876463000000	rgrp	No easy way to test this and now have ticket:239 (test migrate scripts)
113	1252318818000000	dread	"Test database directly and via wui.

Paste.Fixture to be used via proxy in paster."
113	1252328204000000	dread	Done in cset:57b263f51a6b
114	1253034529000000	dread	"Done in cset:895ae4371377.
Remaining problem in WUI for revision purging.
Have not implemented functionality to cope with blank objectid in user-roles table.
Adding group access control will be in future ticket."
115	1253034599000000	dread	R/W access control of packages added to WUI in cset:3e79c4398a3d.
115	1253091426000000	dread	R/W access control of packages added to REST api in cset:a2e0df462427. 
116	1253270921000000	dread	"Done in cset:683d42238666.
"
116	1253709460000000	rgrp	Done in cset:df8d7efdcadb and cset:ca1a5a4ef43a
117	1254735855000000	dread	Done in cset:aa1435678eb6
118	1253784319000000	dread	Done in cset:36b586f95e87
118	1253784902000000	dread	Additional change in cset:642d0c4837fa
119	1253791147000000	dread	"Done in cset:15566874efe7
We decided that admins could read a non-active package."
120	1254406544000000	dread	"Found two security holes, both only in READ access (not write). Tickets raised for holes:
ticket:132 - REST listing packages & groups
ticket:133 - search package/group (WUI & REST)

Full details of files checked:
$ find . -name ""*.py"" | xargs grep ""import ckan.model""
./ckan/presentation.py:import ckan.model as model REMOVED - unused
./ckan/tests/functional/test_group_edit_authz.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_rest.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_package.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_user.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_tag.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_group.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_package_edit_authz.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_revision.py:import ckan.model as model - not runtime
./ckan/tests/functional/test_authz.py:import ckan.model as model - not runtime
./ckan/tests/test_search.py:import ckan.model as model - not runtime
./ckan/tests/models/test_package.py:import ckan.model as model - not runtime
./ckan/tests/models/test_user.py:import ckan.model as model - not runtime
./ckan/tests/models/test_group.py:import ckan.model as model - not runtime
./ckan/tests/models/test_extras.py:import ckan.model as model - not runtime
./ckan/tests/models/test_misc.py:import ckan.model as model - not runtime
./ckan/tests/models/test_authz.py:import ckan.model as model - not runtime
./ckan/tests/forms/test_package.py:import ckan.model as model - not runtime
./ckan/tests/forms/test_group.py:import ckan.model as model - not runtime
./ckan/tests/forms/test_authz.py:import ckan.model as model - not runtime
./ckan/tests/test_converter.py:import ckan.model as model - not runtime
./ckan/tests/getdata/test_data4nr.py:import ckan.model as model - not runtime
./ckan/tests/__init__.py:import ckan.model as model - not runtime
./ckan/tests/test_authz.py:import ckan.model as model - not runtime
./ckan/tests/test_purge_revision.py:import ckan.model as model - not runtime
./ckan/forms/common.py:import ckan.model as model - just validator
./ckan/forms/package.py:import ckan.model as model - validator & package edits
./ckan/forms/group.py:import ckan.model as model - validate & package, wui & rest edits
./ckan/forms/authz.py:import ckan.model as model - package & group wui/rest
./ckan/controllers/rest.py:import ckan.model as model - HOLE ticket:132 - REST listing packages & groups
./ckan/controllers/base.py:import ckan.model as model - paginate filters out deleted ones
./ckan/migration/versions/005_add_authorization_tables.py:import ckan.model as model - not runtime
./ckan/getdata/data4nr.py:import ckan.model as model - not runtime
./ckan/lib/search.py:import ckan.model as model - HOLE ticket:133 - search package/group (WUI & REST)
./ckan/lib/cli.py:            import ckan.model as model - not runtime
./ckan/lib/cli.py:            import ckan.model as model - not runtime
./ckan/lib/cli.py:            import ckan.model as model - not runtime
./ckan/lib/cli.py:        import ckan.model as model - not runtime
./ckan/lib/cli.py:        import ckan.model as model - not runtime
./ckan/lib/cli.py:        import ckan.model as model - not runtime
./ckan/lib/cli.py:        import ckan.model as model - not runtime
./ckan/lib/converter.py:import ckan.model - dumper, not runtime
./ckan/lib/base.py:import ckan.model as model - just a remove
./ckan/authz.py:import ckan.model as model - only gets roles
./bin/ckan_spam.py:import ckan.models as model - not runtime
./bin/ckan-correct.py:import ckan.models - not runtime
./test_migrate.py:import ckan.model as model - not runtime
"
121	1253716782000000	dread	Done in cset:f5a762dae878 
122	1253716695000000	dread	Done in cset:f5a762dae878
122	1253716757000000	dread	"Previous comment was an ERROR!

This was actually done in cset:cf62473b8495"
123	1254321447000000	dread	This has been done, starting with cset:7d8bada15d88.
124	1254735558000000	dread	Done in cset:687f7be58dcf
125	1257535181000000	rgrp	I think this is done :) -- dread do you want to close this with linked cset?
125	1258377621000000	dread	Duplicate of ticket:152
126	1254740244000000	dread	Done in cset:469b0ed6d682
127	1253868048000000	dread	Done in cset:6e4119b4351c
128	1260294960000000	dread	"Done in 57c5b5ed4737
Cost: 30 mins"
128	1275694573000000	Floallgloli	"Futures Trading Key your Futures education provider
Learn how to trade futures with live trading education
Futures education and trading free trial live on line room

<a href=http://www.futurestradingkey.com><B>Futures</B></a>"
129	1260179292000000	dread	Not needed at the moment (minor security issue since only for read actions). 
129	1267719162000000	dread	Implementing this would make it less likely that new code would be written to be insecure. But it would also make a lot of things harder. Decided not to do it.
130	1254735501000000	dread	Done in cset:77ff9d3259bd
131	1254308115000000	dread	Done in cset:399e2bf1e14b.
132	1273254514000000	dread	This was fixed before and now works.
133	1273253977000000	dread	"WUI and REST interfaces recently updated. You can't read, list or search for packages or groups not-authorised for.

The only remaining view of a non-authorised group is that the group is named when viewing a package using all_fields option in REST interface. But no details of other packages in the group are given."
134	1255430998000000	dread	Authorization added in cset:3484c10753e7
135	1255180858000000	dread	" * authz/is_sysadmin method now looks up sysadmins in user-role table
 * SystemRole and System added
 * migration script for new SystemRole and System
 * CLI for adding sysadmins

Done in cset:94028478608a"
136	1255169466000000	dread	Done in cset:fb571c27e04b
138	1258466054000000	dread	Done in cset:bfbd0bb1b91d
138	1258466074000000	dread	Overall cost: 2.25h
139	1255188974000000	dread	"I didn't manage to create duplicate tags - must be the old code.

I fixed this particular package in ckan."
140	1257535009000000	rgrp	Not sure how useful this is atm
141	1255007583000000	dread	"Decision made to put it in a section alongside REST docs at api/index.

Search API docs already done in cset:5562b3e53977.
Refactored in cset:a096132a6c6b"
142	1256417440000000	rgrp	"Might be interested here in auto-extracting a nickname from openid (or getting service to give it to us). This question is of relevance on this point: http://stackoverflow.com/questions/572939/extracting-a-username-from-an-openid-identity (though basic answer is ""you can't"")."
142	1276121257000000	paperless@timmcnamara.co.nz	"See also:
http://stackoverflow.com/questions/1355292/friendly-name-from-google-using-openid

Looks like Google has made this difficult intentionally."
142	1289219069000000	pudo	Fixed in cset:a3f713368bba pending release of repoze.who.openid==0.5.3
143	1311181336000000	thejimmyg	Baze is looking into this and also into most followed packages.
144	1257533957000000	rgrp	But we don't record views ...
144	1264439281000000	dread	Duplicate of ticket:215
145	1255434248000000	dread	Done in cset:d664c9caeb69.
146	1281002247000000	pudo	After test hasn't reproduced it, let's wait for someone to notice this in production. We can analyze weberror then. 
146	1291829862000000	thejimmyg	I've just tested this too and it works for me. Let's close this ticket.
147	1255515162000000	dread	Same as ticket:148
148	1255515222000000	dread	Done in cset:4d6bfca98d97
149	1257414916000000	dread	Done in cset:4d6bfca98d97
150	1256751974000000	dread	Done in cset:4dcb28d339a3
151	1257414545000000	dread	Duplicate of ticket:175
152	1256056193000000	dread	"Done in:
cset:f57dbb45418e - main work
cset:78930cfd01b7 - not requiring values now."
153	1255621895000000	dread	"Comment from rgrp: Yes, and want this for tags too -- this involves working out how to
order joins in sqlalchemy (shouldn't be too hard)."
153	1258381364000000	dread	Cost: 3h with help from rgrp
153	1258971895000000	dread	Duplicate of ticket:195
154	1255621856000000	dread	Comment from rgrp: I don't think we have to prescribe one or the other.
154	1257535066000000	rgrp	Don't think anything obvious to fix at present (and perhaps plan a larger ticket on form customization).
155	1255621836000000	dread	"Comments from rgrp: 
Very reasonable - and should not be too hard to do (bit of javascript
and support at the backend ...)"
155	1271760041000000	rgrp	Duplicate of ticket:295
156	1256145730000000	dread	Done in cset:8a29d5351650
156	1258981721000000	dread	Looks like it was taking out a lot of stuff.
156	1261399351000000	dread	"Sorted display of <links> by converting them to markdown format [links] (links)
in cset:9c3e64104cbf"
156	1266348238000000	dread	Example problem: http://ckan.net/package/patent-nber
156	1267373651000000	dread	Another example: http://www.ckan.net/package/dbtune
156	1271962871000000	johnbywater	Fixed by encoding elements before and decoding elements after passing text through Markdown engine.
157	1256062680000000	dread	"As far as I can tell this never worked in the past.

Added in cset:f4ba0dcfb1a3

Cost: .65h"
158	1255949818000000	dread	Done in cset:2aaaedff9d60
159	1256060264000000	dread	"Fixed in cset:e7ea5b97365e

Note: no spaces allowed between search operator and the word associated with the operator. So with ""tags: postcode"" it was searching for a blank tag. I've made the change so that would ignore 'tags' in this case, producing reasonable search results for postcodes in all fields. postcodes.

Cost: 1.5h"
160	1261399380000000	dread	Done in 1h in cset:9c3e64104cbf. Not allowing space - non-standard.
161	1256114485000000	dread	Yes, deleted tags are still listed and associated with a package.
161	1257762932000000	dread	"Rufus says:

Two issues:
 1. search -- this has be done in internals ...
 2. is: tag.packages attribute -- this is solved by using StatefulList

"
161	1258381450000000	dread	Cost: 4h with help from rgrp
161	1258573607000000	rgrp	Resolved in cset:6d466d8b702a
162	1256142462000000	dread	Done in cset:429f2c89d4de
163	1256140829000000	dread	"Basic facility to do it with CLI command done in cset:a4217353a7be
Still need to make it regular."
163	1257415333000000	dread	"Facility to do this, pulling packages out of ckan over REST, is here:
ckan/lib/ckan-to-talis.py
(cset:752f346b47c2)

Currently not implementing a cron job to do this regularly."
164	1256056395000000	dread	Done in cset:ab50a8ee0ba3
164	1264875709000000	rgrp	Reopen as now part of semantic.ckan.net
164	1271251422000000	rgrp	This is done in semantic.ckan.net. Docs at http://wiki.okfn.org/ckan/doc/rdf/
165	1311181391000000	thejimmyg	This is more than 6 months old so closing.
166	1256222093000000	dread	"Done in cset:bb7566d82b9f.
Couldn't get logging going."
167	1256210109000000	dread	Done in cset:7d129fc35e5c
168	1257414795000000	dread	Duplicate of ticket:145
169	1266928708000000	dread	Covered in ticket:253
170	1256572201000000	dread	Done in cset:517d25bc56f3
171	1297210925000000	rgrp	A lot of work on config was done in 0.7 and these refactorings and improvements either fix or render this ticket invalid so marking as fixed.
172	1256495095000000	rgrp	Largely done in cset:f3782c1071cc
172	1257532331000000	rgrp	Done in cset mentioned previously. See: http://knowledgeforge.net/ckan/ckan/doc/ 
173	1258543707000000	dread	"Done in cset:05b1a12c5e71

Cost: 8.25h but only basic fields. e.g. extras not covered, license is not pretty."
174	1256650986000000	dread	Fixed in cset:d13bfdb99282
175	1257780907000000	dread	Migration requires quoting of table names 'user' and 'group' - need SA migrate v0.5.6.
175	1257847996000000	dread	"Done in cset:78f04724b875

Cost: 6.5h"
176	1257533003000000	rgrp	"My suggestion here is that this ticket get taken to okfn-discuss/okfn-help. This isn't a trivial issue.

Do we go Debian (must exist in debian and to a name) or PyPI (very flexible, to name + version) route?"
176	1266928721000000	dread	Covered in ticket:253
177	1273050236000000	rgrp	Not really relevant to this trac (as outside of CKAN scope) and is duplicate of http://knowledgeforge.net/okfn/tasks/ticket/252 (which is now closed as well!).
178	1257439349000000	dread	First batch of changes for this in cset:b5ef888e44b6. Works in basic way.
178	1257523544000000	dread	"Second batch of changes in cset:7d524a92d602.

Status: You can import new packages with all package properties using Excel or CSV format.

Outstanding:
 * Validation is displayed poorly.
 * Overwriting existing packages is warned about, but doesn't work.
 * Can't add packages to group yet.
 * Functional tests are only working for the basic case.
 * Need to centralise package rendering for package controller.

Time spent:
13hrs"
178	1257523596000000	dread	Expect 1d to finish outstanding features.
178	1257523668000000	dread	Time spent (correction): 20h
179	1257762996000000	dread	"Changeset was to solve 'deprecated' messages.

See line 46 ff. of changeset."
179	1258392697000000	dread	Done in cset:76e6cd49e503
179	1258392723000000	dread	Cost: 1.5 h
180	1263373715000000	rgrp	Looked through jquery plugins and best I could find was this one: http://addywaddy.github.com/jquery.tagcloud.js/ (http://plugins.jquery.com/project/jquery_tagcloud)
180	1264439377000000	dread	Duplicate of ticket:223
181	1296339510000000	rgrp	Uncertain we want to do this and rather overtaken by other events, see e.g. http://ckan.org/wiki/UIRedesignHome
182	1270567116000000	rgrp	Done as part of UI overhaul for v0.11 around xmas. Current openness icons seem good enough.
183	1290604779000000	dread <d.t.read@gmail.com>	You can see the top rated packages in the stats box. Actually not very useful at the moment - not much rating is going on.
184	1266837414000000	dread	This is done in cset:d2026bcf43f5 cset:ac7cf572cbf9 cset:51c6de2dc390 cset:58c660932fcf cset:dd9761591ffb
185	1291830039000000	thejimmyg	"This is probably no longer necessary. I've implemented JavaScript to hide the help text and allow it to be revealed by clicking ""More >"". This makes the form look simpler without needing to hide actual fields."
186	1296341182000000	rgrp	"Now duplicate:

  * #877 - File upload in WUI: 2d
  * #878 - Integrate file upload with workflow around package resources: 3d
"
187	1258970509000000	dread	"Done in cset:af3cbf266750 and e70af291455e.

Issues addressed:
    * tags ARE indexed
    * if tags are converted into lexemes but we also search on exact match.
    * name is split on dash when indexed by postgres.
    * weight name and title higher than other fields.
Remaining issues:
    * natural language search doesn't do partial words, so search for 'gov' doesn't bring up 'government'.
    * previous search system not yet usable with a config file switch (for if we install on a db aside from postgres)
"
187	1258970766000000	dread	Cost: 16h
188	1264436473000000	dread	Duplicate of ticket:219
189	1259925111000000	dread	"All done in 5 days in:
cset:5c7f0ebd728c
cset:20374a1ee763
cset:02ce73aef595
cset:36eda4112f72
cset:dd285dd1b821

Also made relevant changes in importer, create-search-test-data and data4nr. It wasn't clear that download_url could be made a SA proxy, so instead put download_url proxy in the REST interface to maintain compatibility with existing clients."
190	1280686074000000	pudo	"This will be solved using an external plugin and the disqus service. 

A current test version of the external code is at: http://bitbucket.org/pudo/ckandisqus "
190	1280820852000000	pudo	fixed as of cset:1389
191	1305732285000000	dread	"Will's suggestion is to have ""modified_since"" param, just as we have for Revision Search. 

Maybe we don't need a range. 'Order by modification' should be on by default for  queries with 'modified_since' param."
191	1305732414000000	dread	Do this after refactor #1129
191	1305814900000000	dread	"Maybe allow searching by package creation date too?

Suggestion from kindly: when indexing a package, have the search backend also store the metadata_modified value, to make it easy to search on it. "
191	1322762567000000	dread	"So you can do this sort of search:
{{{
curl http://thedatahub.org/api/action/package_search -d '{""q"": ""groups:lodcloud"", ""sort"": ""metadata_modified asc""}'
}}}
but it doesn't work because solr doesn't store the metadata_modified field yet."
191	1323171514000000	thejimmyg	John will just check that the API version 3 does support modified after the new solr schema handled by Adria is in place.
191	1323706210000000	johnglover	working in current master and 1.5.1
191	1323708844000000	dread	A test for this would be great, and maybe add as an example in the search docs too?
191	1323970011000000	dread	"Added a fix for the problems caused by the #1546 fix. SOLR indexing was excepting for new packages (tests such as ckan/tests/functional/api/model/test_package.py:TestPackagesUnversioned.test_entity_update_indexerror failed). The problem was (somehow) related to last_modified function using a new connection causing problems for the modified_metadata in finding the revision & package table entries created during the commit. 

Changeset: [release-v1.5.1c 2c595ae] and cherry picked to [origin/defect-191-modification-date f98a4b2]"
191	1323973116000000	dread	"I put the sort syntax example in the apiv3.rst table and moved the full curl example to http://wiki.ckan.org/Searching_CKAN

I added tests for metadata_modified and prepared this branch for closure.

Changeset: [origin/defect-191-modification-date bebf7a5]

John, please review and close/merge if you think it is all ok."
191	1324030875000000	johnglover	"Thanks for this David. This one in particular was causing me some grief: https://github.com/okfn/ckan/commit/f98a4b2a5f5013fa4aed475bd8b3237bb7847fcc
 
Good spot. All looks good to me."
191	1330020677000000	dread	Went into CKAN 1.6
191	1330020983000000	dread	"Replying to [comment:15 dread]:
> Went into CKAN 1.6
Sorry, I meant 1.5.1
"
192	1261487668000000	dread	Similar stuff is being done in ticket:204. Consider transferring this field into default package schema?
192	1291733895000000	dread	The gov form has had this for months.
194	1260456304000000	dread	"Judging by the logs, a great number of bots are hitting the star ratings. 
In cset:8985cd53f8e5 I've added a robots.txt as well as cli functions to reset star ratings."
195	1258585500000000	rgrp	"Easy for groups because simple secondary=m2m table setup in sqlalchemy (done in cset:9e17314583ce).

For packages+tags was hard because PackageTag is versioned and therefore only get the package_tags relation to work with in mappers. Tried various methods but gave up (see cset:ea4a790e9db9 for details).

My conclusion was that if you want the fields ordered let's just do it by hand with a dedicated attribute or method and added packages_ordered and tags_ordered attributes to Tag and Package respectively (cset:3d3c1025a311)."
196	1264876030000000	rgrp	This will be fixed via using meta http-equiv (see ticket:90). 
196	1265389771000000	dread	"In cset:7eadcdc94b3a package URI changed to:

http://ckan.net/package/32000-naples-florida-businesses-kml

This resolves to html or rdf+xml - see ticket:90
"
197	1258989700000000	dread	"Done in cset:0db8ee29a8fa

Cost: 1.5h"
198	1264688525000000	dread	Bulk of work for this is in cset:d213e942245b
198	1266837606000000	dread	This was finished off by rgrp in cset:ca995c2596c6
199	1267649255000000	rgrp	These tests are no longer failing afaict. To run tests you can just use nosetests -- documented in cset:ebdfc89ccd86/datapkg
200	1311176118000000	thejimmyg	I know this is for datapkg but it is over 6 months old so closing in line with our current ticketing policy.
201	1264439427000000	dread	Done by rgrp
202	1264436548000000	dread	Started in cset:8b6263a422d9
202	1265399429000000	dread	"Step 1 previously done by Benoit

Step 2 done now in cset:cf13a82ab243

Step 3 remains"
202	1265892350000000	rgrp	Closing. Bulk of work has been done and we have deployments at fr.ckan.net and de.ckan.net. Remaining work on forms needs some reflection and has been turned into new ticket:248.
203	1260456150000000	dread	"The list of groups was already done.
The group view is now done in cset:a9506c0c9c68.
Cost: .5h
"
204	1260191598000000	dread	"First, do simple fields, department and a date field. See how it goes.
"
204	1262605982000000	dread	"Basically done in changesets particularly:
cset:06b1232321d7
cset:adc4ad5c5b3f 
cset:2b4c0f723307
cset:39dc4b106dd2"
204	1285081954000000	anonymous	[http://www.grattage.pro Casinos pro]
204	1285082169000000	anonymous	[http://www.casinotop10.fr Top10 des casinos sur internet]
205	1297068450000000	rgrp	"wontfix as:

 1. Easier to just to an import from google docs for which we have several importer examples in ckanclient
 2. (More important) importing is something that is quite bespoke (changes for each cirumstance). As a result pre-written importers tend to be very fragile and it is not a good use of time to try and some customizable WUI one when you can just write a custom importer in code (code is much more flexible than whatever we can write!)

"
206	1260881123000000	dread	Done in wiki:UiReviewNotes and ticket:214 - ticket:227
207	1270569952000000	dread	Done by nick, put into forms branch and will be merged in soon.
207	1271250740000000	dread	This was done in forms branch - merge: cset:c22854a52319
208	1261413421000000	dread	Email addresses now URL-encoded in the package/read/id HTML. Done in cset:af07f3bd9a04
209	1260288728000000	rgrp	Done in cset:4983f1da3a27/isitopen (a while ago).
210	1266509788000000	johnbywater	Isitopen tickets are actually on the OKFN tracker.
211	1266509848000000	johnbywater	Isitopen tickets are actually on the OKFN tracker.
212	1260703969000000	rgrp	Done in cset:3b68a54bd2b0
213	1262689477000000	dread	There is a fab file for microfacts already.
213	1264436021000000	dread	Done from cset:f342b4928466 
214	1260889758000000	dread	3rd item (Routing redirects) done in cset:1b2edc315d1b
214	1263056226000000	nickstenning	Routing now redirects /packages to /package, in addition to /packages/* to /package/*. Introduced in cset:9eda6ff974ae.
214	1263057591000000	nickstenning	Hover names haven't been addressed yet. Otherwise mostly done. Closing.
215	1266513523000000	johnbywater	All done, see e.g. tag cloud in #89.
216	1260891028000000	dread	"First two items done in cset:f49a987492c6

Third item: If this book was correctly input the title would be 'Anna Karenina' and would match. Matching substrings isn't that useful and is difficult to achieve. Google doesn't do it, only doing similar matches. We do some of this - donkey and donkies are indexed and query the same.

Fourth item: still TODO"
216	1260891603000000	dread	On item 3: It does match 'geospatial' if you search for 'geo' or 'spatial' - I think it splits up words like these sensibly. Annakarenina doesn't split only because they are proper nouns.
216	1273050561000000	rgrp	"Closing. Everything done except for item 4: ""autocomplete package names & tags"" which I'm not sure needs doing and certainly won't be done any time soon. Have created a new ticket for this: ticket:308"
217	1260891718000000	dread	Last item done - copywriting - in cset:74ffa691c7b4
217	1263055918000000	nickstenning	Mostly done.
218	1263055964000000	nickstenning	Mostly done. Alphanumeric filtering à la KForge is probably still worth doing at some point.
219	1260892527000000	dread	Item 2 done in cset:399c37b2ed35.
219	1294914901000000	dread	"""three-column package listing"" has not been prioritised for over a year now - marking won't fix."
220	1264436377000000	dread	Done mainly in cset:a61604d082ed
221	1271756757000000	dread	"  * Ability to add the package to groups on this page.
MOVED to ticket:295
  * Fields could be grouped.
DONE
  * Inconsistent capitalisation (Url -> URL).
DONE
  * Tag editor YUI script appears to break occasionally.
DONE
  * Perhaps move to two column forms to save vertical space?
IGNORE
  * Notes field to monospace?
IGNORE
  * Extras fields need some jQuery love -- shouldn't have a fixed number available.
MOVED into ticket:294
  * Typography is a bit of a mess.
DONE	
"
222	1282909280000000	dread	Done already.
223	1264439367000000	dread	"From rgrp:
Looked through jquery plugins and best I could find was this one:  http://addywaddy.github.com/jquery.tagcloud.js/ ( http://plugins.jquery.com/project/jquery_tagcloud) "
223	1273247748000000	dread	Tag cloud is already on the front page. The consolidation of browse and search of tags has already been done.
224	1267100542000000	rgrp	As far as I can tell all of these have been done by early Jan.
225	1266837873000000	dread	Note, in the REST API we are resource oriented.
225	1311178276000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our new ticketing policy.
226	1273247829000000	dread	Lots of excellent suggestions here.
226	1279130390000000	dread	"Remaining items done in cset:7c63c10f5681.
Took: 1h"
227	1273254223000000	dread	The pagination issue was corrected a while ago. The inconsistency of page titles needs looking at still.
227	1279192621000000	dread	"Page titles sorted in cset:2324447eb60f (related to ticket:350)
Cost: 1.5h"
228	1290596875000000	dread <d.t.read@gmail.com>	Duplicate of #262
229	1262799850000000	dread	"Done mainly in cset:dcde72b325d8 plus migrate script in cset:3905a1c08d01 and minor corrections in cset:fe0dba15703b.

Still to resolve questions about what sort of hash to store."
230	1263055318000000	nickstenning	Package read view is now more-or-less self-contained. Refactoring of the template to use a c.pkg object is all that remains to be done and it then can be factored out and used for the preview.
230	1264435915000000	dread	Done in cset:ad3bcfb10002 to cset:fa3bc8c93a91
231	1288516929000000	pudo	fixed in cset:00bc33fbc3ff
232	1297246297000000	thejimmyg	This has been here for over a year and is not a technical ticket. Suggest we close it?
233	1273078975000000	rgrp	Introduction option 1.
233	1273080345000000	rgrp	Done in cset:75756e565b6a
234	1294410993000000	thejimmyg	"Cygri opened #815 which I've closed as a duplicate. He requests: ""The search field (on the homepage and in the top right corner of each page) should have autocomplete for package name. If a package name is selected, it should not do a search but go straight to the package page.""

@memespring - Is this something you are looking at?"
234	1294657094000000	memespring	@ rgrp  - No, I think I suggested something simular for adding new tags to a package though.
234	1338206486000000	ross	18 months, no activity.
235	1302508788000000	pudo	"The first three sub-items of this ticket are done in datautil and dcat-tools: 

Basic GDocs-based normalizer: 

 * https://bitbucket.org/okfn/datautil/src/8bba83b4fa45/datautil/normalization/table_based.py

Example of use: 

 * https://bitbucket.org/okfn/dcat-tools/src/0ec5012bf12a/dcat/core/normalize.py#cl-32

Spreadsheet (as referenced in datautil source, should be a kwarg): 

 * https://spreadsheets.google.com/ccc?key=0AplklDf0nYxWdE8tVlRrN1F3bG9PdDBFUDNZcENDNEE&hl=en#gid=0

Experience so far has been that Google rate limits the current implementation so we should perform all ops in one or two big calls rather than ""piece by piece"". "
235	1340627057000000	icmurray	Moved to ckan-future and unassign so that this ticket will be picked up in triage.
235	1340627624000000	icmurray	"Replying to [comment:3 icmurray]:
> Moved to ckan-future and unassign so that this ticket will be picked up in triage.

Sorry, this comment bears no resemblemnce to what I actually did!  Assigned to tobes for 1.9."
238	1266509806000000	johnbywater	Isitopen tickets are actually on the OKFN tracker.
239	1264875924000000	dread	This was done in cset:d213e942245b
240	1272383770000000	johnbywater	Fixed in revision 5567025e6d5e.
241	1270569769000000	dread	This was fixed by John a couple of weeks ago with his new license stuff.
242	1279286215000000	pudo	item 1 is done with the refactoring
242	1280823876000000	pudo	"Fixed in cset:1393

In the long run, we'll want to remove those SQL-based search from the search code. The upside to using the search backend right now is that we pipe things through the query parser, which means multiple terms are looked up properly. Not a big gain."
243	1266837796000000	dread	Looks like this has been fixed already.
244	1271248968000000	dread	This has been fixed by Benoit (backed out changes, waiting for upgrades to babel / genshi)
245	1297066620000000	rgrp	Closed in favour of https://bitbucket.org/okfn/vdm/issue/1/support-for-composite-primary-keys
246	1297066757000000	rgrp	Moved to https://bitbucket.org/okfn/vdm/issue/2/support-for-primary-key-not-named-id
247	1271248813000000	dread	Done in cset:36c2c01a480c
248	1270745304000000	dread	"Done in cset:193280d51050. 

Cost: 0.8 days"
249	1311182450000000	thejimmyg	This is over 6 months old so closing in line with our ticketing policy. Also, I shouldn't think we really want such a complicated search anyway.
250	1340631430000000	icmurray	"Package entries already include an enclosure for the json representation of the package:

{{{
  <link length=""1645"" href=""http://thedatahub.org/api/2/rest/package/microdados-enem-2010"" type=""application/json"" rel=""enclosure""/>

}}}

so it should be easy enough to include something like the rdf link that already exists on a dataset-view page:

{{{
  <link rel=""alternate"" type=""application/rdf+xml"" title=""RDF/XML"" href=""http://semantic.ckan.net/record//4c23a2fd-4349-4525-8de4-3364ce87016e.rdf"" />
}}}"
251	1270564365000000	rgrp	"  1. /api/rest/revision/ returns nothing
  2. /api/rest/revision/{id} does not return revision.packages and should do."
252	1294410341000000	thejimmyg	David, do you know where this requirement has come from? Is is still relevant?
252	1296477560000000	dread	I've no idea what this is
253	1270632458000000	dread	Closing in favour of the 4 tickets it is split into.
253	1295610188000000	rgrp	Re-opening as this is a useful meta-ticket and should only be closed when all subtickets done.
253	1319709714000000	dread	Closed by mistake
254	1266954625000000	dread	Done with migration script in cset:663ff0c78e6e
255	1268220526000000	dread	Done simply in cset:b98ce3951f0a
256	1290463475000000	dread	This is a test
257	1269277815000000	dread	"Done in changesets leading up to cset:24734bc10f80
Documented in API."
258	1267208356000000	dread	Was already there. Added test in cset:54d61cb0bd9a
259	1267207964000000	dread	rgrp fixed this in cset:45e16431add9
260	1267122137000000	dread	"Done in cset:ffae8f89e577. Also made Group Read WUI format more like that for Package Read.
Cost: 1h"
261	1267207776000000	dread	"Fixed in cset:c024937fc6cb.
license_id removed in API."
262	1267205195000000	dread	"It could be also be a package relationship.

However it's recorded, however it's recorded, it would be good to record the merge in the db.

If the system 'knew' there was a merge then it could:
 * leave a redirect page
 * the merge would sync well"
262	1296468392000000	rgrp	At the moment we get by with adding meta.duplicate tag and putting this in the notes (and possibly putting duplicate in deleted state). If this deemed as insufficient can reopen.
263	1271690219000000	johnbywater	All seems to work. Reported Wordpress trouble may result from user having Wordpress account, but no blog (ie they have 'myname' login, but haven't got a 'myname.wordpress.com' blog. Having the blog makes it work (otherwise you get told that you aren't the owner of the identity).
263	1273072985000000	rgrp	"Issue where if you click on google or yahoo seems to ""remember"" login so next time you click on google or yahoo item it takes you to what you clicked on previously (e.g. click on google then go back and click on yahoo and you are taken to google login).

Also think this plugin may be nicer: http://code.google.com/p/openid-selector/

Also:
  * typo in page (indentity)
  * Not sure ""sign in or create new account"" is clear without some indication of how openid works e.g. better to say something like: ""Login to CKAN using Open ID"""
263	1273083179000000	johnbywater	" 1. Have suspended cookie setting (which was remembering the provider).

 2. We are already using openid-selector.

 3. Fixed type in page ('indentity' => 'identity')

 4. Have changed 'sign in or create new account' to 'Login to CKAN using Open ID'"
263	1273135032000000	rgrp	"Sorry, I meant this plugin: http://jvance.com/pages/JQueryOpenIDPlugin.xhtml

I also do not understand how I can login using my own openid e.g. one not provided by any of those providers (at least not directly ...): by default no box is showing and to make one appear I have to click on a specific provider (with unknown results if i then enter something).

Basically, I think this plugin is poor because it does not offer me a login box by default (as the other plugin seems to ...). What we really want is a simple login box with autocomplete based on provider like the civirm example!"
263	1273136715000000	dread	"Replying to [comment:4 rgrp]:
> I also do not understand how I can login using my own openid e.g. one not provided by any of those providers (at least not directly ...): by default no box is showing and to make one appear I have to click on a specific provider (with unknown results if i then enter something).

I found it pretty obvious to login using openid - clicking on the 'openid' box made sense. The input box may serve to confuse the majority who login via Yahoo/Gmail. I don't think it's worth changing AGAIN."
263	1273155234000000	rgrp	OK, I think we're agreeing to close this now since reasonable and not worth the switch to anything different atm. Still concerned about usability but if necessary we can open a new ticket.
263	1277717180000000	rgrp	I consistently get sent to google login even though I choose openid meaning I am unable to login!
263	1279292730000000	rgrp	JB advised permanently remove ckan.net cookies (may be left over from much earlier). Having done this problem went away.
264	1272390013000000	dread	"Mainly sorted in ticket:292.
Also related changes in cset:ed4c500fcd90"
267	1272960518000000	rgrp	Fixed in cset:9e2e66cced90/vdm
268	1285070682000000	dread	Duplicate of ticket:652
269	1288036269000000	rgrp	I think this has been long obsoleted by other work (e.g. more recent work on gov form).
269	1288037103000000	dread	Several of these points haven't been considered in the recent work.
269	1291830780000000	thejimmyg	"Just discussed this with Evan...

notes field could use a WYSIWYG

 * No, Evan wants to discourage fancy features, plain text/markdown is fine
 * auto-complete on tags - DONE
 * department drop down options list interact with user permission - Evan building the API we need for this now.
 * licenses -> drop down is fine, let's just OGL as default

So just default licence and replacing department with provider and via to be implemented on this ticket.

Evan will provide:

organisation.one() to look up one organsisation by ID

organisation.many() to look up a list of organsisation by ID all at once

organisation.match() to match a string and return a organsisation ID

organisation.department() to take a organsisation ID and return the organsisation ID of the department it represents.


"
269	1291897538000000	dread	"Licence is defaulted in CKAN cset:5bfbcd457426 (merged into default) and DGU cset:2d798e8af3d7.

""replacing department with provider"" is covered in ticket: https://trac.dataco.coi.gov.uk/projects/datagov/ticket/742"
270	1290596640000000	dread <d.t.read@gmail.com>	Nearly everything mentioned here has been achieved with the SpreadsheetData, DataRecords<-SpreadsheetDataRecords, PackageImporter<-SpreadsheetPackageImporter design. New imports can take advantage of this.
271	1272280005000000	johnbywater	"Initial spike solution has been written, covering four user stories:
 1. Commit CKAN revisions to changeset system (#296)
 2. Update CKAN repository from changeset system (#297)
 3. Pull changesets from remote CKAN instance (#298)
 4. Merge diverging lines of changesets (#299)

Emails to ckan-discuss include:
 * http://lists.okfn.org/pipermail/ckan-discuss/2010-March/000109.html
 * http://lists.okfn.org/pipermail/ckan-discuss/2010-March/000154.html"
272	1271764003000000	dread	Package feed done in ticket:255
272	1290004225000000	cygri	A strong +1! Feeds for groups and tags would be extremely useful.
273	1268996987000000	pudo	cf http://lists.okfn.org/pipermail/ckan-discuss/2010-February/000042.html
273	1270717895000000	pudo	"SOLR Requirements

 * 4GB Memory
 * Sun Java 
 * Tomcat 
 * Scala (for Etherpad)  
 * MySQL 5 (for Etherpad) 
 * Cheap bandwidth/low latency to the CKAN servers. "
273	1278578527000000	dread	rgrp: We plan to use SOLR. May investigate Xapian. Nothing more to do in this investigation.
274	1278700842000000	dread	A significant chunk of the work towards this done in cset:742adebb707c (refactoring search options).
274	1279890237000000	pudo	This is included in the Solr indexing engine and will become available as Solr is adopted. 
274	1280262229000000	rgrp	Need to work on postgres and test there.
274	1281452015000000	dread	The docs are now out of date and there doesn't seem to be a test for this.
274	1287398398000000	dread	I fixed the docs a couple of weeks ago. Need to ensure there is a test though.
274	1287402155000000	pudo	"Replying to [comment:7 dread]:
> I fixed the docs a couple of weeks ago. Need to ensure there is a test though.

there is as of cset:c2e66cec3610 "
274	1287402800000000	dread	"Replying to [comment:8 pudo]:
> Replying to [comment:7 dread]:
> > I fixed the docs a couple of weeks ago. Need to ensure there is a test though.
> 
> there is as of cset:c2e66cec3610 

Error: Invalid Changeset Number"
275	1280737701000000	rgrp	"Also, now if you visit ckan.net/admin/Package get 500 error and following in logs:

[Mon Aug 02 08:17:35 2010] [error] [client 86.26.8.30] Error - <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\\xf4' in position 988: ordinal not in range(128)"
275	1280999840000000	pudo	cset:1396 fixes this
275	1280999963000000	pudo	"Replying to [comment:3 pudo]:
> cset:1396 fixes this

Where ""this"" is the field renderer.

"
275	1281001911000000	pudo	"Replying to [comment:2 rgrp]:
> Also, now if you visit ckan.net/admin/Package get 500 error and following in logs:
> 
> [Mon Aug 02 08:17:35 2010] [error] [client 86.26.8.30] Error - <type 'exceptions.UnicodeEncodeError'>: 'ascii' codec can't encode character u'\\xf4' in position 988: ordinal not in range(128)

Cannot reproduce this at the moment. Will wait for it to occur again and then create another ticket. 
"
276	1271250866000000	dread	I could not recreate this. I think it is only for particular packages?
276	1272276020000000	dread	Estimate: 0.5day
276	1272996237000000	dread	Fixed in cset:060e2df72148
277	1294416367000000	thejimmyg	"My opinion is that having configuration in a database is a bad idea. 

We are currently considering moving to a system where CKAN is installable using apt-get. Since we're already moving functionality into CKAN extensions, choosing what you want kind of CKAN you would like would then be as simple as chosing the package to install. Configuring it would just be editing the config file. 

I don't think this is as relevant as it was 10 months ago. Anyone mind if I change this to wontfix?"
277	1296340723000000	rgrp	I think this is useful but there may be complexities giving the non-reloading nature of python apps. Have also converted to an extension
277	1296470458000000	kindly	"I think generally this is a bad idea. 
I think in a few controlled circumstances some configuration is worth changing at runtime, however looking through the development.ini file I do not see hardly anything in there that does not require a restart anyway.
It would be good to have some clear examples of things that would be in the extension."
278	1271173752000000	dread	Fixed in cset:ad64bd0f6073 - copes with spaces now.
279	1272451384000000	johnbywater	Fixed in 5b6029c72f9a.
280	1271173769000000	dread	Fixed on default in cset:ad64bd0f6073
281	1270723675000000	dread	Done in cset:5e9f8ce150c2
282	1338206417000000	ross	This was discussed with Toby who has a ticket for this same feature because of disqus requirements.
283	1270715817000000	rgrp	"Can I *strongly* suggest we just use the existing perfectly-good-system for flagging stuff called ""tags"" :)

I suggest we have agree in the community a standard set of ""meta"" tags for this kind of stuff. E.g. i'm already using the ""duplicate"" tag for marking duplicates (I also add in notes the link to duplicate package but that's optional). So I suggest we:

  1. Create ""reserved"" tag prefix ""meta""
  2. Create following specific tags (suggestions/comments welcome):

  * meta.duplicate - duplicate of another package. If possible
indicate in notes or an extras field (to be decided) what it is
duplicate of
  * meta.spam

Editors can then just visit http://ckan.net/tag/read/meta.spam and
work through list of packages there.

If ""push"" notifications are required as well as ""pull"" then I suggest this be put in an external service (e.g. rss2email) rather than integrated into CKAN core.

"
285	1340631923000000	icmurray	Unassign to be triaged.
286	1270723629000000	dread	Done in cset:76560fa09db8 and cset:752a634a3095 and error handling in cset:aa021336d64d
287	1270801210000000	dread	Done in cset:76560fa09db8 through cset:ea397fc03587
288	1271173777000000	dread	Fixed in cset:ad64bd0f6073
289	1271249368000000	dread	Done in cset:bf98b63331cf
291	1273254895000000	dread	"This seems spurious. 

The options.q is unicode finds foreign characters fine.

The hack has since been taken out."
292	1272286005000000	dread	"Achieved in cset:56b02fda195e (rgrp), cset:95498407d15e and cset:f5af59a3365c.

Remaining broken test put in ticket:300."
293	1271885457000000	johnbywater	Can't reproduce this exception. Have added tests covering adding, removing and updating resources, and it all seems to work.
293	1271940083000000	johnbywater	"With the metastable revision of CKAN, the package resource data structure in ckanclient scripts must have all four keys set in the Resource-Dict. Setting 'hash' in the resource data cures this issues with ""metastable"".

The ""bad"" code was:
  resources.append((res['url'], res['format'], res['description'], res['hash']))
KeyError: 'hash'

This code was adjusted in revision 40c4fe04038d, to default unspecified resource attributes to the empty string. It was changed further in subsequent revisions, to use parameters of the Package.add_resource method to default unspecified values.

However, the API doc doesn't mention the resource hash, although it is required, but I just fixed that in the source (in revision 0f20bfb45d13).
http://knowledgeforge.net/ckan/doc/ckan/api.html "
294	1291830960000000	thejimmyg	Duplicate of #812
295	1272384758000000	dread	"Done in cset:18edc4d95f2f.
Took: 3h"
296	1294407032000000	thejimmyg	Merging into #896.
297	1294407051000000	thejimmyg	Merging into #896.
298	1294407080000000	thejimmyg	Merging into #896.
299	1294407099000000	thejimmyg	Merging into #896.
300	1272384474000000	dread	Rufus fixed this in cset:e6e3
301	1274832112000000	tim	Duplicate of #190, although that ticket has a different implementation. It prefers comments as blog comments.
301	1281342885000000	rgrp	Should not have been closed. ticket:190 is about comments this is about a wiki-like discussion page which is very different.
301	1340632055000000	icmurray	Unassign in order for it to be triaged.
302	1272453821000000	johnbywater	Fixed in 61c8b3107f0e.
303	1272454025000000	johnbywater	We could also fix up the temporal model.
303	1272912573000000	dread	Package history page now shows revisions for tag, extra and resources. Needs tidying up and adding to REST. Done in cset:dc99df3ab4bd
303	1272988619000000	dread	Done in cset:dc99df3ab4bd cset:beb72a0aa810 cset:96bab1eb53f5 and vdm cset:bb9f97b1c4b0
304	1272447296000000	johnbywater	Fixed in c4bf92996b8a.
305	1272994804000000	rgrp	Closed in cset:8136e7369c0c
306	1318181194000000	rgrp	Duplicate of https://github.com/okfn/datapkg/issues/4
307	1288027815000000	rgrp	Done in cset:90e318c3c7dc/datapkg cset:0036b5c505eb/datapkg etc
308	1275302577000000	rgrp	Duplicate of ticket:234.
309	1280743432000000	pudo	fixed in cset:1382 
310	1279300525000000	dread	"Fixed in cset:a0acf179355c
Cost: 2h"
311	1274282065000000	rgrp	"Resolved (sort of) in cset:489007a10bb9. This was a migration issue.

Tracked this down to fact that on ckan.net we have:

    ""package_resource_revision_pkey"" PRIMARY KEY, btree (id)

When it should be:

    ""package_resource_revision_pkey"" PRIMARY KEY, btree (id, revision_id)

Looking in browser:ckan/migration/versions/012_add_resources.py find:

{{{
    Column('revision_id', UnicodeText, ForeignKey('revision.id')),
    #NB revision_id should have been primary_key too (joint with id)
}}}

How come this was not corrected here or at least noted for upgrade of ckan.net???

I have now fixed this so that others doing migration (at least with v1.0) will end up with correct code.

I have also fixed issue on ckan.net by manual sql!"
312	1311176173000000	thejimmyg	This ticket is more than 6 months old so closing in line with our current ticketing policy.
313	1275404524000000	johnbywater	Fixed in changeset 06c949266644.
315	1275846764000000	dread	Fixed in cset:61548ced8b7d - Quote marks correctly read in for data4nr data, which makes this problem record ok (which opened in openoffice fine incidentally). Fields in package are now dumped in correct order to make it clearer. Not changed resource serialisation - if you want tidy json, then use the json dump. No real call for half-way house dump.
316	1274366801000000	dread	"This exception occurs for ckan.net with just this one character:
http://ckan.net/package/search?q=%C2
(you can wget it)

But I can't recreate it on my machine. Maybe it's a version issue.

The client that is making all these crazy calls is googlebot."
316	1291831177000000	thejimmyg	"I've just tested this on ckan.net and it gives a sensible message:

    There was an error while searching. Please try another search term."
317	1279005278000000	pudo	this has been in for a while now but still needs to be extended to include the indexing of entities (ckan.model.search_index) 
317	1279286041000000	pudo	should be done after refactoring the search functions. 
318	1274377385000000	wwaites	"Some more datapoints from Leigh Dodds of Talis:


I'm still having no joy with this I'm afraid. I'm test parsing the
data locally using the TDB command-line tools, specifically tdbcheck
which will parse the data and generate warnings/exceptions. This uses
the same parsing code, data and URI validation code as we're using on
the Platform.

Currently its giving me warnings for invalid lexical values for dates, e.g:

Lexical not valid for datatype: ""2008""^^http://www.w3.org/2001/XMLSchema#date

While these aren't a major issue, looking at some of the data suggests
that there are more underlying data problems that need checking and
fixing up, e.g:

Lexical not valid for datatype: ""n/a""^^http://www.w3.org/2001/XMLSchema#date
Lexical not valid for datatype: ""27/04/2006
13:56""^^http://www.w3.org/2001/XMLSchema#date
Lexical not valid for datatype: ""Real time
calculation""^^http://www.w3.org/2001/XMLSchema#date
Lexical not valid for datatype: ""varies by
country""^^http://www.w3.org/2001/XMLSchema#date

And there are still some invalid URIs, e.g:

<https://mqi.ic.nhs.uk/IndicatorDataView.aspx?query=NRLS%3&ref=3.02.16>
Code: 30/ILLEGAL_PERCENT_ENCODING in QUERY: The host component a
percent occurred without two following hexadecimal digits.

Can I suggest you try running the converted data through tdbcheck to
iron out any problems? Then I can push it into the Platform.
"
318	1275320677000000	dread	"We can't change any of the metadata without permission from the various departments who supplied it.

I think ""Don't shoot the messenger"" is apt here.

Adding this to the form validation isn't going to change any of the existing data. I think this is better off in the data quality scoring."
318	1276271343000000	wwaites	"url validation reputed to be here:

http://www.livinglogic.de/Python/url/Howto.html"
318	1276438793000000	wwaites	"Some good news, ll.url seems to take bad urls and make them into good urls.

viz:

{{{
In [1]: from ll import url
In [2]: print url.URL(""https://mqi.ic.nhs.uk/IndicatorDataView.aspx?query=NRLS%3&ref=3.02.16"")
------> print(url.URL(""https://mqi.ic.nhs.uk/IndicatorDataView.aspx?query=NRLS%3&ref=3.02.16""))
/Users/ww/Work/OKF/ckanrdf/lib/python2.6/site-packages/ll/url.py:2358: UserWarning: truncated escape at position 4
  value = _unescape(namevalue[1].replace(""+"", "" ""))
https://mqi.ic.nhs.uk/IndicatorDataView.aspx?query=NRLS%253&ref=3%2E02%2E16
}}}"
318	1276438832000000	wwaites	"Also fyi, getting ll.url is done like so

{{
pip install ll-xist
}}}"
318	1276438907000000	wwaites	"I've updated ckanrdf to strip out datatypes and use this ll.url on external references so that should be sufficient to hold off talis. 

Still need to work particularly on validating dates though..."
318	1280737620000000	rgrp	Important but low priority according to CO so bumping into next milestone (v1.2). NB: did not seem able to update milestone in trac interface! (Perhaps due to agilo stuff?)
318	1283179768000000	wwaites	CO may not realise the implications when they said it was low priority. The implication of this lack of validation is that it is impossible to generate valid URIs in the RDF which means it cannot be imported by Talis. So until there is a solution to this, no RDF catalog.
318	1296340768000000	rgrp	Still not sure what the priority is so moving to awaiting triage.
318	1296467308000000	pudo	This will be implicit in #852, thus not building something specific for it now.
318	1296482049000000	wwaites	We still require form validation to check URIs. They are not free-form strings. This is not the same as 852 or necessarily included in it.
318	1311176497000000	thejimmyg	Assigning to John so that he can see whether the QA code correctly flags these kinds of problems. If it does, we can close this ticket because although the API will serve invalid URLs, the publishers will be notified to clean up.
318	1311770683000000	johnglover	The QA code should identify invalid URLs. Resources with invalid urls will have an 'openness_score' of 0 and an 'openness_score_reason' of 'Invalid url scheme' or 'invalid URL'.
318	1349778662000000	dread	"Here's a real example - one of many from MOD
{{{http://www.dasa.mod.uk/applications/newWeb/www/index.php?page=48&thiscontent=180&date=2011-05-26&pubType=1&PublishTime=09:30:00&from=home&tabOption=1}}}
Browsers accept colons and slashes happily, which is the main usage of our links. The URL looks better with the colons and slashes, rather than the encoded version. The average departmental user doesn't understand that the reason to encode them is for some academic RFC and RDF which is not ""liberal in what it accepts"". Since the RDF tool has a satisfactory way to encode links, this problem is essentially solved. Therefore I'm changing ckanext-archiver to accept these unencoded links, I'm afraid."
319	1274366882000000	dread	Fixed in cset:a1ef783d27d2 on default and metastable.
320	1279105983000000	dread	"site_title added in cset:b4c0e0a5630d

site_logo is changeable in one place in the template so not essential"
320	1279130535000000	dread	Took 1.5h
321	1291831399000000	anonymous	This has now been superseded with this proposal: #787
322	1274773856000000	pudo	This looks very reasonable. Maybe we should have a webhooks client as a simple demo for this? 
322	1274807530000000	pudo	"Replying to [comment:2 pudo]:
> This looks very reasonable. Maybe we should have a webhooks client as a simple demo for this? 

c.f. #327 "
322	1277722821000000	dread	Done but not pushed. Took 3.5 days.
323	1277722845000000	dread	Done but not pushed yet. Took 3.5 days.
324	1274807970000000	pudo	I am currently writing a Solr subclass for the search index (#317) and would propose adding standard methods to the ckan.libn.search.Search class: index_package(), index_tag(), index_group(). Those could then be called by a generic queue consumer, irrespective of the used search back-end. I will prototype such a consumer soon, so we should talk to avoid doing some duplicate work here. 
324	1278599927000000	dread	Done in changesets leading up to cset:ca565562129d.
325	1278599979000000	dread	Both sending and received tickets closed.
326	1274789296000000	dread	Done in cset:66c21d78d2f8. Took 20mins.
327	1281342690000000	rgrp	Remove from v1.1 as this awaiting triage now and we are not sure when exactly we will do this.
327	1296467361000000	pudo	Nerdy solution that doesn't really seem to catch on, does nothing that cannot be done through queue workers. 
328	1275318745000000	dread	Done in cset:170cac0b50ac and uploaded to kforge.
329	1275079189000000	dread	Fixed in cset:d264f9d57477 and cset:07701ef4085e
330	1275303122000000	dread	Fixed in cset:2f18d0e661fd on metastable and default branches.
331	1282833125000000	dread	"CKAN timestamps should not be in a timezone, since when the clock goes back, it could cause problems for vdm.

But there may be cases when CKAN is running on a machine
that needs the clock set for a particular country (say for a front-end
running on the same machine), and so vdm should be changed to create
timestamps using UTC specifically (rather than add a timezone, since a
mixture of timezones won't sort). And when we display it (or reply to
a request) we convert it to the local timezone, as suggested in the description."
332	1275306933000000	dread	"Switched from YUI a couple of months ago.

"
332	1280743320000000	pudo	was fixed in cset:1381
333	1275407987000000	dread	"Use case 1: decided that when the user is redirected back to the front-end system, the URL contains a parameter with the package just edited. (In addition to the notification message.)

Use case 2: decided that if the load on the front-end is not high from 100 non-web requests. Should it become a problem in future, the queue consumer could be adapted to slow down / amalgate multiple requests."
334	1280743667000000	pudo	fixed in cset:1380
335	1275997752000000	dread	Done in cset:5c0c0b6e1342
335	1276179605000000	dread	On discussion with rgrp it's clear that it's also useful to set the redirect url in a config variable - then the client doesn't have to change. This was done in cset:b9fdd208dd45
336	1276162601000000	dread	"

"
336	1278700021000000	dread	Done in cset:742adebb707c and cset:1748e6554e77.
336	1278700266000000	dread	Took 0.75 days.
336	1279368544000000	Donny	"http://ckan.net/api/search/resource?url=http://scraperwiki.com&all_fields=1&callback=ckantest

yields 

Bad search option: Field ""callback"" not recognised in Resource search."
336	1279373842000000	dread	Fixed in cset:e719f449bc74
337	1279300972000000	dread	"Fixed in cset:f5cc13ade0e8
Cost: 30m"
338	1279886392000000	johnbywater	Putting this into API Version 2 (similar to package references).
340	1276010234000000	dread	Done in cset:f77639ddcf0d
340	1328807317000000	dread	Went into CKAN 1.0.2?
341	1277483030000000	dread	Done in cset:c7a9ba55db0d on metastable and merged to default.
342	1276278485000000	dread	Done in cset:61f145b7d4a8
343	1277824018000000	johnbywater	"Regarding the package search, if I do:

$ paster db clean && paster db init && paster create-test-data

and then:

$ paster serve development.ini &

and then:

$ curl http://127.0.0.1:5000/api/1/search/package?name=warandpeace

I get:

{""count"": 1, ""results"": [""warandpeace""]}

and with:

$ curl http://127.0.0.1:5000/api/2/search/package?name=warandpeace

I get:

{""count"": 1, ""results"": [""c90b6c00-9496-4c8c-b7fa-7bdd3ef65c72""]}

Am I missing something?

"
343	1277892699000000	johnbywater	Okay, so in version 2, names were still being used in the relationships part of the packages entity. But I don't know why these entities can't be retrieved independently, and references to the entities returned in representations of the entities which reference them.
344	1277477712000000	dread	"Done in cset:13737a7ba4d9
"
345	1291831615000000	thejimmyg	"This is a bit out of date. We have moved to a system of ""stable"" and ""default"" branches with feature branches for features, bugs and tickets. We already have default and stable tested by buildbot.
"
346	1294410298000000	thejimmyg	Could you take a look at this at some point please David? If it is already resolved could you please close the ticket? Thanks!
346	1296477510000000	dread	"We no longer use the ""Gdu"" SoS doc."
349	1277820679000000	anonymous	Mostly done, but issue regarding departments still outstanding: can the association between packages, groups, and departments be placed elsewhere?
350	1277072822000000	glen@open.org.nz	"Also check out the SEO review done by Charles Coxhead - http://www.quicksitereviews.com/ckan-net/

Pagination – In the tag section of the site particularly I’d suggest replacing the traditional numbered pagination with alphabetical links, ie, display 26 links A-Z and then on each of those pages displaying the relevant tags. The point being that the tag pages represent an opportunity to index pages which intersect with very targeted search demand, so let’s give them all every opportunity to get crawled and indexed. Linking to all 26 alphabetically arranged pages from the main tag page (and maybe even the home page) will bring all the tag pages closer to the home page and give them all some more link popularity. Also suggest something similar to this for the listings in the Packages section, so arrange these on alphabetical pages.

Tag page titles – Take a programmatic, but more focussed approach to these. Currently all tag pages have the title “CKAN – Comprehensive Knowledge Archive Network – Tags – [tag]” – I would make this something like “[tag] – Open Data  – CKAN” or something like that which puts the emphasis on the tag keyword and adds some meaningful qualifiers to that.

Tag page listings – On the tag pages there are related open data sets listed and next to each the associated tags. This leads to masses of tag links on the page and loads of duplicated links. If possible I recommend removing the tags from each data set listing, and instead displaying a cloud of “Related tags” on the right hand side.

Group pages – The user curated group pages are possibly even better than the tag pages from a search perspective because they all intersect with very clear search demand, so would also benefit from having improved page titles. I suggest a similar approach to the above where the group name becomes the main keyword with some qualifiers added. It might even be a good idea to let group owners define their own page titles.

Data set pages – These also could do with improved page titles, presumably the data set name, eg. “[data-set-name] – CKAN”
Heading tags – not a big deal but I’m always in favor of using H tags strictly for headlines (rather than wrapping an H1 around the site logo for example)."
350	1279230686000000	dread	"Done in cset:b9b82e7ae078
Cost 9 hours, including: alphabetical pager, title changes, removed links from tags in package list."
353	1280262363000000	pudo	"
cset:1366:e719f449bc74 fixes this"
353	1280737966000000	pudo	Add a supervisord example config
353	1280756379000000	pudo	This is done as of cset:8 (of ckanext!) 
355	1311177552000000	thejimmyg	Our policy is to recommend the use of hyphens, but not to enforce it. The new package name suggestion autocomplete JavaScript uses hyphens.
356	1278931816000000	rgrp	Done in cset:a1af5f8fe59e. Have not done advanced search link normal package search currently provides no info about how to use advanced features.
357	1277461466000000	johnbywater	Fixed in 79c426c0acb6.
358	1303122109000000	kindly	"This ticket needs to have a more thorough spec which needs to include.

* Examples of put/post requests to resources and if they are needed.
* Dealing with resources that do not have a related packages in terms of authorization. Do they have a new action? how granular is the authorization? per resource? system level? etc.
* The rules related to authorization for resources attached to packages. i.e you only get read permissions when the related package has read permissions? do they have their own rules? 

"
358	1303123611000000	dread	"This ticket was designed only for reading resources, following an ongoing requirement from the Scraperwiki collaboration. Assume PUT/POST is out of scope.

I suggest dealing with resources that aren't attached to packages in an entirely new ticket or CEP, as the implications are wider than this aspect of the API."
358	1310128782000000	thejimmyg	Merging with #922 go there for latest updates.
359	1291135692000000	rgrp	Done in cset:90e318c3c7dc/datapkg and cset:0036b5c505eb/datapkg and others.
360	1288004891000000	rgrp	Done in cset:beaa842ed502/datapkg and following.
361	1291135756000000	rgrp	Done in cset:7305c1d04692/datapkg
362	1296469470000000	rgrp	Rating are currently disabled (invisible) so moving this down.
362	1311176564000000	thejimmyg	This ticket is more than 6 months old so marking as invalid in line with out ticketing policy.
363	1291733459000000	dread	Changes to user properties aren't linked to a package.
363	1298840718000000	kindly	revision objects are made everytime a new revision is made even if their are no changes.
363	1310125872000000	thejimmyg	This will eventually be fixed as part of braoder VDM changes. This work cannot be prioritised above other things we want to do.
364	1281451132000000	dread	But this works with the new SOLR search now - close?
364	1291637291000000	rgrp	Have now switched to solr search (and maybe working in postgres by now). Note correct link is http://ckan.net/package?q=statistics
365	1279300621000000	dread	"Fixed in cset:c11738dcb1ba
Cost: 1d"
366	1297075053000000	rgrp	Now #938 is done this is straightforward.
366	1299845116000000	dread	I'm very pleased that this now works when you try to edit a package that is not allowed. Are there other circumstances we should cover or can we close this?
366	1299845781000000	pudo	You're right, that's done!
366	1300212171000000	dread	changeset d7a8df888f44
367	1279303693000000	dread	"Done in cset:79200de013e1
Cost: 1h"
368	1291831811000000	thejimmyg	I don't have enough information to debug this problem. I'm assuming that since this has been a while that the problem is solved? If not please re-open the ticket and add your contact details.
371	1292257189000000	nils.toedtmann	"(I know the term ""QoS"" as a very specific networking term about classifying and prioritising network traffic. I assume here it means ''uptime'', ''availability'', ''performance monitoring''?)


There seem to be are at least three monitors already in place: 
  * http://munin.okfn.org/ on eu1 monitoring eu[0-7] and us1, gathering additional health information via locally installed daemons. Munin's notification subsystem is not configured.
  * http://nagios.hmg.ckan.net/ on hmg.ckan.net monitoring the CKAN-HMG service group (network monitoring only). Notfications are not configured (or?)
  * We have a http://wasitup.com/ account which is watching some OKFN services (e.g. {ca,de,www}.ckan.org, {blog,www}.okfn.org) and sending loads of alerts to sysadmin@okfn.org. Only checking for ""HTTP 200 OK"" and whether the response contains a configurable string.


My 2ct: We should consolidate. What do we want?
 * A webservice like https://www.pingdom.com/ ($40/month incl 30 checks and 200 SMS, $0.5/month per extra check, $0.14-20/SMS) or http://www.serverdensity.com/ ($10/server-month plus 5-10p/SMS)? 
 * Or run our own monitor (nagios, opsview, monin)? 

In the latter case we want to have a separate machine which is not in on EC2 (but e.g. ByteMark), dedicated to monitoring only.


We should also include root mails into the alert/notification policies. Root mails should be trimmed down to important warnings and errors only.
"
371	1292257389000000	nils.toedtmann	The nagios fork [http://www.opsview.com/ OPSview] might be worth a look.
371	1292704716000000	nils.toedtmann	"Replying to [comment:9 nils.toedtmann]:
> There seem to be are at least three monitors already in place: 
[[BR]]
Correction: at least four, we seem to have a Montastic account, too:[[BR]]

On 18/12/10 15:03, noreply@montastic.com wrote:
 {{{
Dear okfn,
 
This is a monthly reminder that you have an account on Montastic, the
website monitor service.
 
### ACCOUNT INFORMATION
Signup date: 2009-10-06
Email you signup with: sysadmin@okfn.org
 
### 20 WEBSITES MONITORED
[OK] - http://www.ckan.net/
[OK] - http://www.knowledgeforge.net/
[OK] - http://okfn.org/
[not monitored] - http://blog.okfn.org/
[...]
 
### EMAIL ALERT RECIPIENTS
- sysadmin@okfn.org
- rufus.pollock@okfn.org
- martin.keenan@okfn.org
[...]
To make changes to your account or contact us, go to www.montastic.com.
[...]
 }}}"
371	1294411939000000	thejimmyg	It is implied in this that the performance of sites should beat the QoS criteria, therefore closing #485. Ensuring this happens is an ongoing process.
371	1294417434000000	thejimmyg	"From #440 we'll also need to ""Write and pass comprehensive performance tests"""
371	1294417553000000	thejimmyg	"From #395:

At the moment, some pages within CKAN tend to load slowly. We should create a profiling setup in which we can measure response times for complete requests and individual methods calls.

This could be used to identify bottlenecks and find an appropriate caching or tuning strategy to improve CKAN performance.

NB: We should also agree on a maximum request latency.

TODO: Read up on all those QoS tickets to avoid overlapping efforts.
"
371	1294676093000000	anonymous	"Mainly handled in http://knowledgeforge.net/okfn/tasks/ticket/564 now. Close here?
"
371	1300217820000000	thejimmyg	"Marking as closed since http://knowledgeforge.net/okfn/tasks/ticket/600 now takes on this ticket.

I will check nils has added the new DGU Bytemark servers are added to Nagios."
372	1280514163000000	johnbywater	Moved from sprint 1.1.1
373	1286376071000000	dread	Done
374	1280223744000000	johnbywater	Requested by DGU.
377	1280323309000000	johnbywater	"Thanks a lot! I totally agree and have already started working on this. For example, try pointing your browser to http://ckan.net/api/search/revision (ie without any arguments). Also, there is probably a lot less HTML than there was, since the errors are not handled as if it was an error within the ""Web"" user interface.
At any rate, perhaps we could work through the error cases, filling in the tests as we go? I think it's just unworked ground, rather than anything deliberate. :-)"
377	1338206330000000	ross	We have another ticket for fixing the API
379	1280326254000000	johnbywater	Referencing ticket #378 has changed sprint.
380	1280326254000000	johnbywater	Referencing ticket #378 has changed sprint.
381	1294410466000000	thejimmyg	There is no mention of what the test defect is. All tests pass so marking invalid.
383	1280348216000000	johnbywater	Referencing ticket #382 has changed sprint.
383	1280514163000000	johnbywater	Moved from sprint 1.1.1
386	1280356628000000	johnbywater	Referencing ticket #372 has changed sprint.
386	1280514164000000	johnbywater	Referencing ticket #372 has changed sprint.
386	1281088994000000	johnbywater	Not doing for Apache, since it does not run as a user process.
390	1282214629000000	dread	"Done - removed 'test' package:
88c485ec-fb70-44b2-9e18-b5dbcb7de57e	2010-07-28 14:35:30.922018	frontend2"
391	1280514163000000	johnbywater	Moved from sprint 1.1.1
394	1294407189000000	thejimmyg	Duplicate of #371.
395	1281110035000000	johnbywater	Moved from sprint 1.1.2
395	1294417538000000	thejimmyg	Merging with #371
396	1281110035000000	johnbywater	Moved from sprint 1.1.2
398	1282661799000000	rgrp	Referencing ticket #481 has changed sprint.
398	1288003624000000	dread	Is this to be completed, or are we scrapping it?
398	1294407372000000	thejimmyg	"Considering this closed because of this blog post documenting the use of the API and linking to the CKAN docs:

 * http://data.gov.uk/blog/announcing-datagovuk-catalogue-apis"
399	1282227985000000	dread	Finished all code for this today. Cost: 4.5d (+1d to fix ticket:432)
400	1282661799000000	rgrp	Referencing ticket #481 has changed sprint.
400	1288003690000000	dread	This was done a couple of weeks ago.
401	1281373828000000	pudo	"Coming along nicely:

* http://bitbucket.org/pudo/ckanextworker "
402	1281373707000000	pudo	"This is beginning to go somewhere:

* http://bitbucket.org/pudo/ckanextarchive"
402	1296467635000000	pudo	De-dup: #891
403	1287392451000000	pudo	Available at http://bitbucket.org/pudo/repod 
404	1294415587000000	thejimmyg	Duplicate of #896
404	1294415965000000	rgrp	This is in datapkg, not a duplicate. Partly done in fact but not complete (Indexes are now pluggable).
404	1297072955000000	rgrp	Nothing more required here I think.
405	1296467471000000	pudo	"Rufus, you mentioned this could be done very quickly - could you have a look? 

"
405	1297211204000000	rgrp	By mime-type and all resources done in cset:7bd693614c80 and previous (with other improvements to download system).
405	1297214793000000	rgrp	Completed in cset:a7df5071f200
405	1297214833000000	rgrp	(That is did the interactive version)
406	1291139434000000	rgrp	Renaming done as part of v0.7 (cset:0ea44c864153/datapkg) but pluggability for downloaders is currently disabled (half-implemented and then decided to hold back pending further thoughts).
406	1296467427000000	pudo	Has existed for a while, not implementing any more except for what is in #852. 
407	1281506792000000	aidan@scraperwiki	Need to agree who is doing this. ATM Julian is on holiday and Richard is focussed on visualisation. Will pick up after holidays - hope this is ok.
407	1291149724000000	anonymous	Related bug on ScraperWiki tracker: https://bitbucket.org/ScraperWiki/scraperwiki/issue/42/finish-ckan-integration
407	1330769956000000	rgrp	Long out of date ...
408	1281609572000000	pudo	"* Plugin for this is located at: http://bitbucket.org/pudo/ckanextdeliverance
* Usage is documented in HOWTO.txt (http://bitbucket.org/pudo/ckanextdeliverance/src/tip/HOWTO.txt)
* Changes to CKAN were in: cset: 1422"
409	1297074067000000	rgrp	Done item (2) http://packages.python.org/datapkg/extending.html#commands and Command class is already pluggable.
410	1281619720000000	pudo	Done in http://bitbucket.org/pudo/ckandisqus/changeset/be90fd4d386c 
411	1287393033000000	pudo	Now using squid in production on eu6; will only need one cache at a time. 
413	1282661798000000	rgrp	Referencing ticket #481 has changed sprint.
413	1294407429000000	thejimmyg	There is no caching in the current DGU CKAN code.
413	1294407458000000	thejimmyg	(or rather all caching is disabled). If we re-enable it we'll want to test its behaviour.
414	1282661799000000	rgrp	Referencing ticket #481 has changed sprint.
414	1288003770000000	dread	Catalogue API went live with caching a couple of weeks ago
415	1288003954000000	dread	rdf now available at semantic.ckan.net courtesy of ww
418	1291637919000000	rgrp	Not clear what ticket entails and think this has happened (should be on dgu in any case).
421	1282909772000000	dread	Done
422	1283165156000000	dread	Closed by mistake - task remains.
422	1292586586000000	dread	Ticket remaining is #427. No need for this story ticket now.
423	1282812768000000	dread	Examples for creating packages with curl are now in the API docs.
424	1281606707000000	johnbywater	Referencing ticket #422 has changed sprint.
424	1282919429000000	dread	"Done in:
https://trac.dataco.coi.gov.uk/projects/datagov/ticket/496#comment:2"
426	1281606707000000	johnbywater	Referencing ticket #422 has changed sprint.
426	1282667892000000	dread	Referencing ticket #422 has changed sprint.
426	1282925305000000	dread	No responses unfortunately - maybe they are fine!
427	1281606707000000	johnbywater	Referencing ticket #422 has changed sprint.
427	1283165089000000	dread	Posting a new package is done. Just licenses to explain.
427	1287997311000000	dread	"To cover in the README:
* Deployment of the service - DONE
* Adding a licence
* Adding a licence group

CKAN docs requires:
* Example of pointing CKAN to a licence service URI, local file.
* Explanation of which licences are in CKAN by default (if you don't point it to a URI)."
427	1289822093000000	dread	Referencing ticket #412 has changed sprint.
427	1294407533000000	thejimmyg	We may need an updated form of the license service to support UKLP.
427	1297686183000000	thejimmyg	Documentation of the licenses service was handled in #973. Changing this ticket to be about matching the license service in UKLII.
427	1299164063000000	thejimmyg	This is done in the latest release to test.
428	1285757316000000	dread	This was achieved a couple of weeks ago
429	1285757274000000	dread	Will Waites fixed this a couple of weeks ago
430	1298283075000000	thejimmyg	"We are doing other refactoring that is more important than this such as:

* Plugin APIs to enable extensions
* Form refactroing

This ticket is 6 months old so closing."
432	1282065261000000	dread	Fixed in cset:5adbb79d33a2
432	1282552819000000	dread	"Looks like the line with the 'location' header went in in this changeset:

changeset:   1207:0525981e3b78
user:        johnbywater
date:        Wed Jun 02 12:22:11 2010 +0100
summary:     Added support for using package ID as a package reference in all operations of the API.
"
433	1282081297000000	wwaites	"So one more modification, the datapkg_sources argument is no longer a dictionary but a string, similar to the metadata.txt but with the name as the section heading rather than [DEFAULT] so as to be able to support more than one download. As of now, this works::

{{{
    This class treats an installed python package as a data
    index. For instructions on creating such a package, what
    needs to go in its setup.py and such, see 
    :func:`datapkg.pypkgtools.datapkg_sources`. Here we are
    concerned with how to use such a package.

    An example of one such package can be installed like so::

        % pip install hg+http://bitbucket.org/ww/ukgov_treasury_cra

    Once installed, datapkg can be used to inspect it and 
    install parts wherever desired::

        % datapkg list egg://ukgov_treasury_cra
        cra2009 -- Country and Regional Analysis 2009
        % datapkg install egg://ukgov_treasury_cra/cra2009 file:///tmp
        [...]
        % ls -l /tmp/cra2009/ 
        total 11112
        -rw-r--r--  1 ww  wheel  5681852 May 12 15:48 cra_2009_db.csv
        -rw-r--r--  1 ww  wheel      292 Aug 17 22:37 metadata.txt
}}}

Of course the related python code and machinery hasn't been ported over to that package yet, but that's quite another matter."
433	1283183548000000	wwaites	changed datapkg_sources to datapkg_index and updated to work with the new changes to how the downloader works.
434	1283189807000000	rgrp	Looking at stack trac clear this was an issue with genshi/babel and i18n. Net search led to http://trac.edgewall.org/ticket/9171 which confirmed this. Fact that error was on every page when logged in suggested this was a string in template showing up on log in. Quick search confirmed suspicion ('You are logged in as' string) and fix in http://bitbucket.org/bboissin/ckan-i18n/changeset/8e0c25102cc0
435	1298284084000000	thejimmyg	Haven't seen this myself and it is 6 months old now.
436	1288003983000000	dread	Not seen since.
437	1288004009000000	dread	This was fixed a while ago
438	1294414132000000	thejimmyg	Any idea what this ticket means? Should we mark as invalid and close? Thanks.
438	1294661079000000	dread	This was to ensure it didn't parse ONS data on the CKAN server, which is complete.
439	1294413903000000	thejimmyg	These have been agreed and are awaiting signoff.
440	1294417436000000	thejimmyg	Merging with #371. We'll do this as part of the move to the new DGU servers.
441	1282724509000000	dread	Comment from pudo: Apache version is documented here:  http://knowledgeforge.net/okfn/tasks/ticket/466
441	1282724585000000	anonymous	Comment from pudo: CKAN should have a read-only maintenance mode with a nice little banner on all pages, appropriate REST messages etc. Bonus points if this is triggered via an environment variable and thus can be triggered by the surrounding apache. 
441	1292586309000000	dread	No need for requirements. Story tickets exist: #763 & #765
442	1294414214000000	thejimmyg	Is this still important? Do we need to set aside some time for it? Thanks.
442	1294661028000000	dread	"I'll close this now.

Only thing to note is the importer code pudo wrote in ckanclient that could usefully be merged with the ckanext importer code."
443	1282662560000000	rgrp	Referencing ticket #457 has changed sprint.
443	1282735925000000	dread	"Now produces daily dump in ~/dumps. Was running as root, not user. Previously it was updating ONS data but not dump because of path issues of being root.

Serving files using Apache file index.

Added docs for database dumping.

Cost: 2h"
444	1294414008000000	thejimmyg	Merging with #691
445	1282662530000000	rgrp	Referencing ticket #477 has changed sprint.
446	1282423615000000	johnbywater	"I think ""an admin writes to the CKAN API"" is a mishearing."
446	1294414077000000	thejimmyg	I don't understand this ticket. Since no-one has contributed to this ticket in 5 months I'm closing it.
447	1294410666000000	thejimmyg	Hi Richard, could you take a look at this please? It is probably invalid now, in which case feel free to close it. Many thanks, James
447	1294410738000000	memespring	Have you got a link or screengrab?
448	1286386256000000	dread	Has this all been finished yet?
448	1294417061000000	thejimmyg	We do this on an ongoing basis. I don't think we need a ticket for it too.
449	1294411301000000	thejimmyg	Will, if this is something you are interested in do you want to kick it off. Otherwise maybe close the ticket?
449	1311182945000000	thejimmyg	This ticket is now more than 6 months old so marking as invalid in line with our ticketing policy.
451	1288038146000000	johnbywater	Moved from sprint 1.3.0
451	1292587233000000	dread	Duplicate of #742
452	1287997540000000	dread	John did this a while ago.
453	1294411369000000	thejimmyg	This isn't really something that should be a CKAN ticket. It is more an ongoing thing. 
454	1286376044000000	dread	Done
455	1291637172000000	rgrp	Closing as invalid as not clear what task is and now almost certainly out of date.
458	1294415537000000	thejimmyg	N/a anymore.
459	1282921783000000	dread	"I've now fixed this.

default: 1.1
metastable: 1.1
stable: 1.1 / 1.0.2 (two heads)
ultrastable: 1.0.2"
460	1282330016000000	richard@cyganiak.de	"Note, I'm not a sysadmin but I ''can'' see the Status dropdown for this package, with values ""active"" and ""deleted"". Not knowing much about the permission system, I was assuming that's because I created the package.

I am however certain that I did not modify (or even notice) this dropdown in the mysterious edit that led to the state change from ""active"" to ""None""."
460	1285443859000000	richard@cyganiak.de	"I believe the initial report is incorrect. It states that the status was changed from ""active"" to ""deleted"". I believe that it was actually changed from ""active"" to ""None"".

This might indicate a bug in the code: The value of the status field is lost."
460	1285489964000000	rgrp	To add to this ticket I note that package 'owners' are entitled to see State not just system sysadmins (this allows owners to delete packages).
460	1311176868000000	thejimmyg	This is most likely fixed in the new logic layer refactor but is more than 6 months old anyway so closing in line with our new ticketing policy.
461	1282662564000000	rgrp	Referencing ticket #454 has changed sprint.
462	1285757238000000	dread	Available at http://data.gov.uk/data/dumps
463	1282306480000000	dread	"Could be related to this shortly afterwards at 22:32:
{{{
Mail
Contacts
Tasks
Compose mail
Inbox (11364)
Starred
Sent Mail
Drafts (10)
alert (5090)
bts (383)
Notes
okfn (134)
okfn-lists (26)
osm (462)
 
8 more▼
David Read 

Google Docs

Invite a friend
><
About these ads
UK Ruby on Rails £10/m - www.1stEasy.com/ruby-on-rails - 1) Phusion Passenger LAMP stack. 2) Great support. 3) Try us free :)
« Back to InboxArchiveReport spamDeleteMove to Labels More actions 
‹ Newer 29 of 19141 Older ›
WebApp Error: <class 'genshi.template.eval.UndefinedError'>: None has no member named ""id"" 						
Inbox
X						 
Reply
no-reply@ckan.net to ckan-sysadmin
show details 22:32 (14 hours ago)
URL: http://ckan.net/revision/diff/dbtune-audioscrobbler?diff=a99c98be-767a-4e49-9025-2472b2d18b9c&oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),
Module weberror.errormiddleware:162 in __call__
<<              __traceback_supplement__ = Supplement, self, environ
                   sr_checker = ResponseStartChecker(start_response)
                   app_iter = self.application(environ, sr_checker)
                   return self.make_catching_iter(app_iter, environ, sr_checker)
               except:
>>  app_iter = self.application(environ, sr_checker)
Module beaker.middleware:73 in __call__
<<                                                     self.cache_manager)
               environ[self.environ_key] = self.cache_manager
               return self.app(environ, start_response)
>>  return self.app(environ, start_response)
Module beaker.middleware:152 in __call__
<<                          headers.append(('Set-cookie', cookie))
                   return start_response(status, headers, exc_info)
               return self.wrap_app(environ, session_start_response)
           
           def _get_session(self):
>>  return self.wrap_app(environ, session_start_response)
Module routes.middleware:130 in __call__
<<                  environ['SCRIPT_NAME'] = environ['SCRIPT_NAME'][:-1]
               
               response = self.app(environ, start_response)
               
               # Wrapped in try as in rare cases the attribute will be gone already
>>  response = self.app(environ, start_response)
Module pylons.wsgiapp:125 in __call__
<<          
               controller = self.resolve(environ, start_response)
               response = self.dispatch(controller, environ, start_response)
               
               if 'paste.testing_variables' in environ and hasattr(response,
>>  response = self.dispatch(controller, environ, start_response)
Module pylons.wsgiapp:324 in dispatch
<<          if log_debug:
                   log.debug(""Calling controller class with WSGI interface"")
               return controller(environ, start_response)
           
           def load_test_env(self, environ):
>>  return controller(environ, start_response)
Module ckan.lib.base:73 in __call__
<<          # available in environ['pylons.routes_dict']    
               try:
                   return WSGIController.__call__(self, environ, start_response)
               finally:
                   model.Session.remove()
>>  return WSGIController.__call__(self, environ, start_response)
Module pylons.controllers.core:221 in __call__
<<                  return response(environ, self.start_response)
               
               response = self._dispatch_call()
               if not start_response_called:
                   self.start_response = start_response
>>  response = self._dispatch_call()
Module pylons.controllers.core:172 in _dispatch_call
<<              req.environ['pylons.action_method'] = func
                   
                   response = self._inspect_call(func)
               else:
                   if log_debug:
>>  response = self._inspect_call(func)
Module pylons.controllers.core:107 in _inspect_call
<<                        func.__name__, args)
               try:
                   result = self._perform_call(func, args)
               except HTTPException, httpe:
                   if log_debug:
>>  result = self._perform_call(func, args)
Module pylons.controllers.core:60 in _perform_call
<<          """"""Hide the traceback for everything above this method""""""
               __traceback_hide__ = 'before_and_this'
               return func(**args)
           
           def _inspect_call(self, func):
>>  return func(**args)
Module ckan.controllers.revision:123 in diff
<<          c.diff.sort()
               c.pkg = pkg
               return render('revision/diff.html')
       
           def _has_purge_permissions(self):
>>  return render('revision/diff.html')
Module ckan.lib.base:38 in render
<<          return literal(stream.render(method=method, encoding=None))
           
           return render_template()
       #return cached_template(template_name, render_template, cache_key=cache_key,
       #                       cache_type=cache_type, cache_expire=cache_expire,
>>  return render_template()
Module ckan.lib.base:36 in render_template
<<              stream = _filter(stream)
               
               return literal(stream.render(method=method, encoding=None))
           
           return render_template()
>>  return literal(stream.render(method=method, encoding=None))
Module genshi.core:183 in render
<<              method = self.serializer or 'xml'
               generator = self.serialize(method=method, **kwargs)
               return encode(generator, method=method, encoding=encoding, out=out)
       
           def select(self, path, namespaces=None, variables=None):
>>  return encode(generator, method=method, encoding=encoding, out=out)
Module genshi.output:57 in encode
<<          _encode = lambda string: string
           if out is None:
               return _encode(''.join(list(iterator)))
           for chunk in iterator:
               out.write(_encode(chunk))
>>  return _encode(''.join(list(iterator)))
Module genshi.output:339 in __call__
<<          for filter_ in self.filters:
                   stream = filter_(stream)
               for kind, data, pos in stream:
                   cached = cache_get((kind, data))
                   if cached is not None:
>>  for kind, data, pos in stream:
Module genshi.output:670 in __call__
<<          _gen_prefix = _gen_prefix().next
       
               for kind, data, pos in stream:
                   output = cache_get((kind, data))
                   if output is not None:
>>  for kind, data, pos in stream:
Module genshi.output:771 in __call__
<<          push_text = textbuf.append
               pop_text = textbuf.pop
               for kind, data, pos in chain(stream, [(None, None, None)]):
       
                   if kind is TEXT:
>>  for kind, data, pos in chain(stream, [(None, None, None)]):
Module genshi.output:586 in __call__
<<      def __call__(self, stream):
               prev = (None, None, None)
               for ev in stream:
                   if prev[0] is START:
                       if ev[0] is END:
>>  for ev in stream:
Module genshi.core:288 in _ensure
<<      # unchanged
           yield event
           for event in stream:
               yield event
>>  for event in stream:
Module genshi.template.base:618 in _include
<<                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
>>  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:618 in _include
<<                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
>>  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:618 in _include
<<                      tmpl = self.loader.load(href, relative_to=event[2][0],
                                                   cls=cls or self.__class__)
                           for event in tmpl.generate(ctxt, **vars):
                               yield event
                       except TemplateNotFound:
>>  for event in tmpl.generate(ctxt, **vars):
Module genshi.template.base:605 in _include
<<          from genshi.template.loader import TemplateNotFound
       
               for event in stream:
                   if event[0] is INCLUDE:
                       href, cls, fallback = event[1]
>>  for event in stream:
Module genshi.template.markup:378 in _match
<<                      for event in self._match(self._flatten(template, ctxt,
                                                                  **vars),
                                                    ctxt, start=idx + 1, **vars):
                               yield event
>>  ctxt, start=idx + 1, **vars):
Module genshi.template.markup:327 in _match
<<                      break
       
               for event in stream:
       
                   # We (currently) only care about start and end events for matching
>>  for event in stream:
Module genshi.template.base:565 in _flatten
<<                  elif kind is EXPR:
                           result = _eval_expr(data, ctxt, vars)
                           if result is not None:
                               # First check for a string, otherwise the iterable test
>>  result = _eval_expr(data, ctxt, vars)
Module genshi.template.base:277 in _eval_expr
<<      if vars:
               ctxt.push(vars)
           retval = expr.evaluate(ctxt)
           if vars:
               ctxt.pop()
>>  retval = expr.evaluate(ctxt)
Module genshi.template.eval:178 in evaluate
<<          __traceback_hide__ = 'before_and_this'
               _globals = self._globals(data)
               return eval(self.code, _globals, {'__data__': data})
>>  return eval(self.code, _globals, {'__data__': data})
Module ?:11 in <Expression u'c.revision_from.id'>
<<            
           <p>
           From: ${c.revision_from.id} - ${c.revision_from.timestamp}
           </p>
>>  From: ${c.revision_from.id} - ${c.revision_from.timestamp}
Module genshi.template.eval:324 in lookup_attr
<<                      val = obj[key]
                       except (KeyError, TypeError):
                           val = cls.undefined(key, owner=obj)
               return val
>>  val = cls.undefined(key, owner=obj)
Module genshi.template.eval:410 in undefined
<<          """"""Raise an ``UndefinedError`` immediately.""""""
               __traceback_hide__ = True
               raise UndefinedError(key, owner=owner)
>>  raise UndefinedError(key, owner=owner)
UndefinedError: None has no member named ""id""
CGI Variables
DOCUMENT_ROOT	'/htdocs'
GATEWAY_INTERFACE	'CGI/1.1'
HTTP_ACCEPT	'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, */*'
HTTP_ACCEPT_ENCODING	'gzip, deflate'
HTTP_ACCEPT_LANGUAGE	'en-us'
HTTP_CONNECTION	'TE, close'
HTTP_HOST	'ckan.net'
HTTP_TE	'deflate,gzip;q=0.3'
HTTP_UA_CPU	'x86'
HTTP_USER_AGENT	'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8)'
PATH	'/usr/local/bin:/usr/bin:/bin'
PATH_INFO	'/revision/diff/dbtune-audioscrobbler'
PATH_TRANSLATED	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py/revision/diff/dbtune-audioscrobbler'
QUERY_STRING	'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),'
REMOTE_ADDR	'89.145.108.201'
REMOTE_PORT	'39586'
REQUEST_METHOD	'GET'
REQUEST_URI	'/revision/diff/dbtune-audioscrobbler?diff=a99c98be-767a-4e49-9025-2472b2d18b9c&oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),'
SCRIPT_FILENAME	'/home/okfn/var/srvc/ckan.net/pyenv/bin/ckan.net.py'
SCRIPT_URI	'http://ckan.net/revision/diff/dbtune-audioscrobbler'
SCRIPT_URL	'/revision/diff/dbtune-audioscrobbler'
SERVER_ADDR	'10.226.226.118'
SERVER_ADMIN	'[no address given]'
SERVER_NAME	'ckan.net'
SERVER_PORT	'80'
SERVER_PROTOCOL	'HTTP/1.1'
SERVER_SIGNATURE	'<address>Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2 Server at ckan.net Port 80</address>\n'
SERVER_SOFTWARE	'Apache/2.2.9 (Debian) mod_wsgi/2.5 Python/2.5.2'
WSGI Variables
application	<beaker.middleware.CacheMiddleware object at 0xaa5f14c>
beaker.cache	<beaker.cache.CacheManager object at 0xaa5f16c>
beaker.get_session	<bound method SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware object at 0xaa5f0ec>>
beaker.session	{'_accessed_time': 1282253553.63995, '_creation_time': 1282253553.63995}
mod_wsgi.application_group	'ckan.net|'
mod_wsgi.callable_object	'application'
mod_wsgi.listener_host	''
mod_wsgi.listener_port	'80'
mod_wsgi.process_group	''
mod_wsgi.reload_mechanism	'0'
mod_wsgi.script_reloading	'1'
mod_wsgi.version	(2, 5)
paste.cookies	(<SimpleCookie: >, '')
paste.parsed_querystring	([('diff', 'a99c98be-767a-4e49-9025-2472b2d18b9c'), ('oldid', '66a47b9e-232a-4838-8674-66fa1a5c76e1),')], 'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),')
paste.registry	<paste.registry.Registry object at 0x11f9d8cc>
paste.throw_errors	True
pylons.action_method	<bound method RevisionController.diff of <ckan.controllers.revision.RevisionController object at 0x1200454c>>
pylons.controller	<ckan.controllers.revision.RevisionController object at 0x1200454c>
pylons.environ_config	{'session': 'beaker.session', 'cache': 'beaker.cache'}
pylons.pylons	<pylons.util.PylonsContext object at 0x11fb464c>
pylons.routes_dict	{'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'}
repoze.who.logger	<logging.Logger instance at 0xab7168c>
repoze.who.plugins	{'openid': <OpenIdIdentificationPlugin 179181772>, 'auth_tkt': <AuthTktCookiePlugin 179770188>}
routes.route	<routes.route.Route object at 0xaa42fac>
routes.url	<routes.util.URLGenerator object at 0x11f9d42c>
webob._parsed_query_vars	(GET([('diff', 'a99c98be-767a-4e49-9025-2472b2d18b9c'), ('oldid', '66a47b9e-232a-4838-8674-66fa1a5c76e1),')]), 'diff=a99c98be-767a-4e49-9025-2472b2d18b9c&oldid=66a47b9e-232a-4838-8674-66fa1a5c76e1),')
webob.adhoc_attrs	{'language': 'en-us'}
wsgi process	'Multi process AND threads (?)'
wsgi.file_wrapper	<built-in method file_wrapper of mod_wsgi.Adapter object at 0x11c20698>
wsgiorg.routing_args	(<routes.util.URLGenerator object at 0x11f9d42c>, {'action': u'diff', 'controller': u'revision', 'id': u'dbtune-audioscrobbler'})
}}}"
463	1294916148000000	dread	Haven't seen this for ages.
464	1282325194000000	johnbywater	Duplicates #458.
465	1282724701000000	dread	This was an idea, to be able to monitor users overloading. It may not be required though.
465	1294411534000000	thejimmyg	Let's reopen this ticket if it comes up again. For now not an issue. Maybe also related to caching tickets #840 #841 #856 #668 #543 #540 #537.
466	1282723866000000	dread	As mentioned yesterday, I'm not convinced this is the best way to achieve the actual requirement, which is to access the API securely, and we should discuss this further.
466	1282921608000000	dread	We've agreed that we need another header for this, although it's not clear that it needs to be configurable. We could just accept Authorization OR the new one.
466	1294411633000000	thejimmyg	What was the original requirement? What's wrong with the current HTTP header name? Can we not mark this as wontfix for now and re-open if needed?
466	1294835610000000	dread	Agreed
467	1294411656000000	thejimmyg	Duplicate of #467
467	1294411681000000	thejimmyg	Sorry, that should have been #466.
468	1282662774000000	rgrp	Referencing ticket #467 has changed sprint.
469	1282662778000000	rgrp	Referencing ticket #471 has changed sprint.
470	1282662774000000	rgrp	Referencing ticket #467 has changed sprint.
470	1292587187000000	dread	apikey_header_name was set to X-CKAN-API-Key some time ago I believe. 
474	1294916760000000	dread	Questions are out of date now
475	1282662794000000	rgrp	Referencing ticket #472 has changed sprint.
476	1294411741000000	thejimmyg	Where did this requirement come from? Setting to wontfix for the timebeing. Feel free to re-open if there is a clear use case for this.
477	1294411761000000	thejimmyg	Duplicate of #476
478	1282662798000000	rgrp	Referencing ticket #473 has changed sprint.
479	1282662526000000	rgrp	Referencing ticket #462 has changed sprint.
479	1282920017000000	dread	Still discussing. Current thinking that the apache file listing would easiest be opened up together with CKAN read-only web i/f.
479	1288004211000000	dread	Done
480	1294411813000000	thejimmyg	We are currently updating the specification and the servers this runs on.
480	1300281551000000	thejimmyg	This is complete (albeit with a different architecture).
481	1294248359000000	thejimmyg	This is now implemented for DGU.
482	1294417310000000	thejimmyg	At some point we may want to introduce rate limiting on the CKAN API.
482	1298284158000000	thejimmyg	This is now 6 months old and there still doesn't seem to be a requirement for this. Marking wontfix and we can come back to it if it comes up again.
483	1294417216000000	thejimmyg	There isn't a catalogue web UI, just CKAN. I don't understand this, marking invalid. See instead #482 and #484.
484	1294417248000000	thejimmyg	There isn't a catalogue web UI, just CKAN. I don't understand this, marking invalid. See instead #482.
485	1294411946000000	thejimmyg	Merging with #371.
486	1291639321000000	rgrp	This is a requirement ticket which we no longer support and a duplicate #847.
487	1291639404000000	rgrp	Obsolete story type and looks like duplicate of #353 (and other parts of ticket:847)
488	1320930240000000	dread	Not a current reqt.
489	1294414420000000	thejimmyg	Which RDF service? Why does it need model events? Will, any ideas or shall I close it? Thanks.
489	1294416189000000	wwaites	"We still do need something like this. Right now the rdf generation is a cron job that crawls the API. Really we want two things:

  * only generate RDF for those packages that have changed
  * enable multiple client/worker processes, potentially run
    by third parties, to generate different parts of the RDF
    description.

For example, it is reasonable that we generate the DCat representation ourselves, however the voiD authors (DCat is generic, voiD is about RDF datasets in particular) want to generate the voiD-specific annotations themselves and contribute it back to augment the catalogue.

Another example: group curators may also want to annotate packages in their group with group-specific metadata.

Yet another example: checks on the coherence, availability, quality, openness, etc. of a package should be done from time to time or when a package changes, which can result in further annotations (see the curate tool).

Because of the ""third party"" aspect we cannot do this with the internal package representation and the rabbit queue. Most likely it is feasible to do this by looking at the revisions in the API to get all changes since the last time a script was run in which case most likely the answer is, yes, there is nothing to do here and the ticket can be closed."
490	1283770756000000	wwaites	Presuming this is for INSPIRE compliance, support for Opensearch should be added
496	1294407899000000	thejimmyg	"This would only apply to packages that had a HarvestedDcoument record (ie had been harvested).

There are two approaches for this:

 * Build the capability to respond to CSW ""GetCapabilities"" and ""Get Records"" requests
 * Export to an existing CSW server to provide the mechanism for us"
496	1297684298000000	thejimmyg	"The latest plan after update with PP is as follows:

* CKAN will have a CSW interface
* OS GenoNetwork will use this interface to determine:
  * New documents
  * Modified documents
  * Removed documents
* OS will then handle the serving back to the EU since GeoNetwork already implements the custom filters the EU may require (their docs are ambiguous).

This means the creation of the CSW server extension is now a high priority but it only needs to know about documents in the harvested_documents table. I've already implemented a REST API to get the those documents (but depending on the implementation it may need changing)."
496	1299164106000000	thejimmyg	Will has implemented this now and OS have confirmed their export to GeoNetwork works.
497	1294407705000000	thejimmyg	Merged with #497
497	1294407718000000	thejimmyg	Sorry that should have been #496.
498	1294412520000000	thejimmyg	This is something that the Drupal team would need to do. There is no ability or requirement to embed the map widget into the CKAN search system yet. 
499	1296593038000000	thejimmyg	Not on the SoR.
500	1287747652000000	rgrp	Looks like a duplicate of ticket:463 (also added by dread -- so hope I'm not making a mistake!)
501	1282563166000000	pudo	 * Apache version is documented here: http://knowledgeforge.net/okfn/tasks/ticket/466
501	1282724566000000	dread	Good thinking - see previous ticket on this: ticket:441
502	1292586466000000	dread	Not doing data4nr at the moment.
503	1314031851000000	dread	"Relationships exist now on ckan.net. e.g. http://ckan.net/package/rkb-explorer-ibm

No current DGU interest."
505	1288606561000000	dread	Referencing ticket #504 has changed sprint.
505	1298368280000000	dread	Now complete
507	1282909852000000	dread	Done
508	1282822372000000	dread	"ultrastable branch created from 1.0.1 - version on dgu.

Developing policy at wiki:BranchingPolicy"
508	1282908795000000	dread	Policy discussed on list.
509	1285757116000000	dread	Will Waites did this a couple of weeks agoWill Waites did this a couple of weeks ago
509	1291734435000000	dread	Story no longer required. Work to do is still described in #510
510	1282925375000000	dread	Referencing ticket #509 has changed sprint.
510	1292955569000000	dread	Now setup - just need to check the cron fires ok.
510	1294138332000000	dread	Completed 21st Dec 2010.
511	1297075354000000	thejimmyg	There have been quite a lot of improvements, this is now OK.
512	1294917121000000	dread	Same as #513
513	1302774329000000	dread	In enh-1046-dictize-the-api we remove the distinction of extras, so we can't do this.
514	1282757391000000	dread	Same as ticket:515
515	1302774253000000	dread	This is now fixed in enh-1046-dictize-the-api. Both groups and packages return the location header.
516	1288002933000000	dread	Someone has fixed this.
517	1283897199000000	pudo	See forms/iati, fixtures.py, fixtures.json as of ckanextiati: a02467cb67ba
518	1282893844000000	pudo	" * Priority: 5
 * Web user interface for publishing entities
"
518	1283536932000000	pudo	" * Still needs ""archive file"" and ""donors country"" fields, PE questions to be answered. "
518	1283896718000000	pudo	functional as of cset:ae4d4263b0c0 in ckanextiati
519	1283536828000000	pudo	 * Mostly implemented, still have to consider further cleanup. 
520	1283538080000000	pudo	 * http://bitbucket.org/okfn/iati/changeset/378431974c76 solr facets
521	1282893545000000	pudo	"Ability to search over the IATI metadata stored about the IATI records that have been registered.

 * Priority: 5 (may merge into 1 to some extent)"
521	1283538342000000	pudo	" * still needs to have schema adapted a bit
 * work so far is at eu4:~/var/solr/iati/conf/schema.xml"
521	1283897124000000	pudo	Schema has been adapted to suit IATI
522	1285595317000000	pudo	"Still missing some internal authorization work but on the UI side, things are mostly functional. 
 
cf. http://bitbucket.org/okfn/ckanextiati/changeset/b2588091fa56 ff"
522	1287392999000000	pudo	Has been fixed for quite some time. 
523	1283897688000000	pudo	" * Auth will be finished in #524. 
 * PE write access etc. via standard API, compare ckanextiati:a02467cb67ba"
524	1285594971000000	pudo	fixed as of cset:470d1e1c4460 
525	1285595080000000	pudo	"As of now, PE creation can only be done by sysadmins. When opened to normal users, they will not be able to set the group type and thus moderation will be required of sysadmins.

"
526	1320930201000000	dread	Is this still relevant or can it be closed?
526	1340626152000000	icmurray	Won't fix as it's 20 months old, and no feedback on whether it's still relevant or not.
527	1293097531000000	rgrp	Just to note: did this relate to IATI or ...? Any way to add component and milestone?
528	1283536475000000	pudo	Done at http://iati.ckan.net 
529	1283536554000000	pudo	 at https://spreadsheets5.google.com/ccc?key=tuOtQjD0Psoqr1pWTS8EXZQ&hl=en#gid=0
530	1282899463000000	pudo	"The core of the COI/data.gov.uk standard seems to look like:

Identifier
Title   
Abstract
Department
Contact   
Contact e-mail
Licence    
Resource format    
Resource URL    
Resource ID    
Publisher

And the IATI-specific ones we'd want are:

Publishing Entity: 
Publishing Entity Type: (Donor, Recipient, Community Data..)
Donor
Country
Activity period: 
Verification status: enumeration of statuses (checked, not checked etc)
Resource links: to the actual IATI record
Number of activities: ...
Date record updated:
Date data updated: 
License: Need this field even if it may be a standard license

So naively mashing these together, we get something like:

Identifier
Title   
Abstract
Donor
Country
Publisher
Publisher Type
Verification Status
Department
Contact   
Contact e-mail
Licence    
Resource format    
Resource URL    
Resource ID    
Activity period
Number of activities
Date record updated
Date data updated"
531	1283536676000000	pudo	done: http://bitbucket.org/okfn/ckanextiati/src/tip/ckanext/iati/fixtures.py
533	1292957374000000	dread	Not a current issue afaik.
534	1288002762000000	dread	I fixed this a while back.
535	1283167040000000	rgrp	Duplicate of #434
536	1286376029000000	dread	I did this a few weeks ago.
537	1283325156000000	wwaites	See #540 for a story about Varnish. Strongly favouring squid at this juncture.
537	1288023097000000	dread	Can this ticket be updated? Were any tasks listed here done? Anything remaining still planned?
537	1311178929000000	thejimmyg	Consolidation of caching has been moved in ticket #995.
538	1294412635000000	thejimmyg	Rufus, is this something you want to take on or shall we close the ticket as wontfix?
538	1294414537000000	rgrp	We don't use reports any more -- just the query module -- so closing as wontfix.
539	1303118486000000	thejimmyg	Old ticket, not sure exactly what it is referring to, closing.
540	1283324947000000	wwaites	"Cut-and-paste from ckan-discuss:


I had a look at Varnish and I agree that the configuration
language is complicated. In fact by default Varnish
disregards cache control headers and in general behaves
in a very standards non-compliant way. I have no doubt
that it is very fast -- if you are willing to spend the
efford to customise its configuration for the exact
layout of pages and headers and such that each web
site it is going to be used with will use. In other words,
there is a large administrative burden.

So I decided to change tack and see where the Squid
proxy has gotten to in the decade or so since I last met
it. Squid is a general purpose caching proxy that can
be configured as an http accelerator. The configuration
is simple. You tell it where your web servers are for
which sites. The web servers make sure to set the
cache control headers appropriately.

Here are some results from my testing, against
http://de.ckan.net/package/list?page=B which is an
example of a slow page. Except for the first, which
only did 100 requests, the tests were set to 8
simultaneous connections and a total of 1000
requests.
{{{
No caching of any kind:
    Requests per second:    0.44 [#/sec] (mean)

Beaker Cache (filesystem):
    Requests per second:    43.16 [#/sec] (mean)

SQUID setting cache control headers correctly:
    Requests per second:    421.33 [#/sec] (mean)
}}}
The results are clear. Using the application cache is
about 100 times faster than doing nothing. Using
squid is about 1000 times faster. (Doing both wouldn't
necessarily help very much).

I'm sure we could squeeze a bit more performance out
of it if we used Varnish, but probably not an order of
magnitude and I don't think it is worth the
administrative burden.

If we set up a production Squid instance (or farm),
with a bare minimum of work it can cache for any
number of sites, not just CKAN.

For the python coders, here's what you have to do
to set the headers properly so that squid will cache
the page:
{{{
       del response.headers[""Pragma""]
       del response.headers[""Cache-Control""]
       from time import gmtime, strftime
       response.headers[""Last-Modified""] = strftime(""%a, %d %b %Y
%H:%M:%S GMT"", gmtime())
       response.cache_expires(seconds=3600)
}}}

A further advantage is that the *browsers* will also
understand these cache-control headers and do their
own caching - just setting them properly without
even using Squid should result in some subjective
performance improvements.

That's all for now, I suggest we dedicate a machine
to just running squid, the more RAM the better and
big discs are good, and put it between the world and
the ckans. Oh, and comb through the controllers
setting the headers correctly where appropriate...
"
540	1302694845000000	dread	Closing - all the suggestions have been implemented: squid instance and cache headers set for high traffic pages.
541	1294924872000000	wwaites	this is implemented with the cookie javascript technique. not so suitable for pages where content is radically differerent depending on the logged in user but for small bits like the logged in status works perfectly well, likewise for edit links.
542	1283278896000000	wwaites	"Implemented with:

  * cset:2bbc186459cb
  * cset:eba23cc027e5
  * cset:e89e0b82b24e
  * cset:943ed812e237"
543	1311178918000000	thejimmyg	Consolidation of caching has been moved in ticket #995.
544	1291638966000000	rgrp	Duplicate of #672
546	1286896167000000	anonymous	[http://www.pokers.li Jeux de poker en ligne]
546	1286896450000000	anonymous	[http://www.bonus-pokers.eu Poker en ligne]
546	1286896814000000	anonymous	[http://www.salle-de-poker-legal.com Jouer au poker en ligne]
548	1283340866000000	johnbywater	Referencing ticket #546 has changed sprint.
549	1283340866000000	johnbywater	Referencing ticket #546 has changed sprint.
550	1283340866000000	johnbywater	Referencing ticket #546 has changed sprint.
551	1283340866000000	johnbywater	Referencing ticket #546 has changed sprint.
552	1283340874000000	johnbywater	Referencing ticket #547 has changed sprint.
553	1283340874000000	johnbywater	Referencing ticket #547 has changed sprint.
554	1283340873000000	johnbywater	Referencing ticket #547 has changed sprint.
555	1283340873000000	johnbywater	Referencing ticket #547 has changed sprint.
556	1283340873000000	johnbywater	Referencing ticket #547 has changed sprint.
558	1283781883000000	pudo	fixed in cset:2c4c43302f21
559	1288085627000000	pudo	Still missing: the possibility to remove an added entry before committing the form (i.e. you look up a package and then decide not to include it after all). 
559	1310126313000000	shevski	I don't understand this one. It is older than 6 months so marking invalid.
559	1310127694000000	dread	Makes sense to me... Works for me too, so leaving closed.
560	1285430085000000	ehs@pobox.com	I think I'm seeing a variation on this behavior: I'm retrieving the packages in the lodcloud group (http://ckan.net/api/rest/group/lodcloud) and finding bibbase, and then fetching the package details (http://ckan.net/api/rest/package/bibbase) and getting a 403 Access Denied. If access to the package isn't available I would think it wouldn't be listed in the lodcloud group response.
560	1288002971000000	dread	This is still an issue.
560	1297084192000000	kindly	"changeset

https://bitbucket.org/okfn/ckan/changeset/b899085071a8
cset:b899085071a8"
562	1284063574000000	pudo	fixed by ww by upgrading python-openid
563	1294231961000000	thejimmyg	There is a choice here as to whether we provide an export to GeoNetwork or support a minimal CSW interface ourselves.
563	1296592472000000	thejimmyg	This is a duplicate of #496
564	1294412714000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing.
565	1294412708000000	thejimmyg	Don't understand this one? Anyone else know about it?
565	1294417752000000	thejimmyg	OK, just looked this up. We are moving to a publisher/provider model as a first step, not moving to code lists. Marking invalid.
566	1294232284000000	thejimmyg	To a large extent it does now so closing this ticket in favour of more specific ones.
568	1285957164000000	johnbywater	Moved from sprint 1.2.5
568	1286786419000000	johnbywater	Moved from sprint 1.2.6
568	1287392122000000	johnbywater	Moved from sprint 1.2.8
568	1287776309000000	johnbywater	Moved from sprint 1.2.9
569	1285957164000000	johnbywater	Moved from sprint 1.2.5
569	1286786420000000	johnbywater	Moved from sprint 1.2.6
569	1287392122000000	johnbywater	Moved from sprint 1.2.8
569	1288038146000000	johnbywater	Moved from sprint 1.3.0
569	1294408084000000	thejimmyg	"Our metadata validation will consist of:

 * Testing the schema
 * Testing the schematron
 * Checking we can get out the data we need
"
569	1297177220000000	wwaites	so this means a dependency on amara (finally). on the plus side it is one of the better xml python libraries, xpath, xslt, etc. on the down side it how many xml libraries do we depend on and use now? this is for the schematron...
569	1297177522000000	wwaites	*sigh* but it relies on 4suite in version 1.x and amara2 doesn't have the schematron anymore...
569	1297177695000000	wwaites	*sigh* again. the gemini schematron schema isn't compatible with the amara scimitar... despite the instructions to use the implementation from schematron.com...
569	1297347214000000	thejimmyg	This is now complete in ckanext-csw.
570	1286786420000000	johnbywater	Moved from sprint 1.2.6
570	1287392123000000	johnbywater	Moved from sprint 1.2.8
570	1288038146000000	johnbywater	Moved from sprint 1.3.0
570	1294407974000000	thejimmyg	Merged with #569.
572	1285957164000000	johnbywater	Moved from sprint 1.2.5
572	1286786420000000	johnbywater	Moved from sprint 1.2.6
572	1287392122000000	johnbywater	Moved from sprint 1.2.8
572	1287776309000000	johnbywater	Moved from sprint 1.2.9
575	1288012749000000	johnbywater	This was supported with harvesting jobs.
576	1284212162000000	wwaites	"* cset:9b1255e02e5e removes a reference to Package.c which is deprecated even in 0.4
* cset:d7e583948c95 wraps the session creation in if/else block on SQAlchemy version as the default behaviours and options have changed

Unit Tests appear to work as before... Boy do they take a long time to run..."
576	1284215009000000	wwaites	cset:7a04e78cec97 ''pool_threadlocal=True'' is no longer the default with 0.5. Setting it to ''False'' (the default) causes unit tests to hang. So explicitly set it to ''True'' to retain compatibility. It is an open question whether this is the ''correct'' setting, the defaults were changed as apparently they led to surprising behaviour. One hopes that our unit tests have already eliminated any such surprises.
576	1284222948000000	wwaites	"Most of the way to 0.6 compatibility with cset:ce6b870570c1/vdm

All tests still pass with 0.4 and 0.5"
576	1294753848000000	dread	Seb's completed this now I believe. It's merged into head CKAN cset:68d63fda4814.
581	1284219829000000	johnbywater	Referencing ticket #580 has changed sprint.
582	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
583	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
584	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
585	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
586	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
587	1284216078000000	johnbywater	Referencing ticket #491 has changed sprint.
588	1284216104000000	johnbywater	Referencing ticket #492 has changed sprint.
589	1284216104000000	johnbywater	Referencing ticket #492 has changed sprint.
590	1284216104000000	johnbywater	Referencing ticket #492 has changed sprint.
591	1284216120000000	johnbywater	Referencing ticket #493 has changed sprint.
592	1284216120000000	johnbywater	Referencing ticket #493 has changed sprint.
593	1284216137000000	johnbywater	Referencing ticket #494 has changed sprint.
593	1284225618000000	johnbywater	Referencing ticket #494 has changed sprint.
594	1284216137000000	johnbywater	Referencing ticket #494 has changed sprint.
594	1284225618000000	johnbywater	Referencing ticket #494 has changed sprint.
595	1284216137000000	johnbywater	Referencing ticket #494 has changed sprint.
595	1284225618000000	johnbywater	Referencing ticket #494 has changed sprint.
596	1284216140000000	johnbywater	Referencing ticket #495 has changed sprint.
596	1284225651000000	johnbywater	Referencing ticket #495 has changed sprint.
597	1284216140000000	johnbywater	Referencing ticket #495 has changed sprint.
597	1284225651000000	johnbywater	Referencing ticket #495 has changed sprint.
599	1284216189000000	johnbywater	Referencing ticket #598 has changed sprint.
600	1284216189000000	johnbywater	Referencing ticket #598 has changed sprint.
601	1284216189000000	johnbywater	Referencing ticket #598 has changed sprint.
602	1284219570000000	johnbywater	Referencing ticket #567 has changed sprint.
603	1284219570000000	johnbywater	Referencing ticket #567 has changed sprint.
604	1284219570000000	johnbywater	Referencing ticket #567 has changed sprint.
605	1284219570000000	johnbywater	Referencing ticket #567 has changed sprint.
606	1284219594000000	johnbywater	Referencing ticket #578 has changed sprint.
607	1284219594000000	johnbywater	Referencing ticket #578 has changed sprint.
608	1284219588000000	johnbywater	Referencing ticket #577 has changed sprint.
608	1284689330000000	johnbywater	Referencing ticket #577 has changed sprint.
609	1284219588000000	johnbywater	Referencing ticket #577 has changed sprint.
609	1284689330000000	johnbywater	Referencing ticket #577 has changed sprint.
610	1284219601000000	johnbywater	Referencing ticket #569 has changed sprint.
610	1284225063000000	johnbywater	Referencing ticket #570 has changed sprint.
610	1285199168000000	johnbywater	Referencing ticket #570 has changed sprint.
610	1285629333000000	johnbywater	Referencing ticket #570 has changed sprint.
610	1286786420000000	johnbywater	Referencing ticket #569 has changed sprint.
610	1287392122000000	johnbywater	Referencing ticket #569 has changed sprint.
610	1287703423000000	johnbywater	Referencing ticket #569 has changed sprint.
610	1288038146000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1284219601000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1284689449000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1285199361000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1285957164000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1286786420000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1287392122000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1287703423000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1288038146000000	johnbywater	Referencing ticket #569 has changed sprint.
611	1294408239000000	thejimmyg	I don't understand this task, but suspect it can be treated as a duplicate of #569.
612	1284219601000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1284689449000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1285199361000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1285957164000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1286786420000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1287392122000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1287703423000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1288038146000000	johnbywater	Referencing ticket #569 has changed sprint.
612	1294408188000000	thejimmyg	Duplicate of #569.
613	1284219601000000	johnbywater	Referencing ticket #569 has changed sprint.
613	1284689450000000	johnbywater	Referencing ticket #569 has changed sprint.
613	1285199361000000	johnbywater	Referencing ticket #569 has changed sprint.
613	1285957164000000	johnbywater	Referencing ticket #569 has changed sprint.
613	1286786420000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1284219601000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1284689449000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1285199361000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1285957164000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1286786420000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1287392122000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1287703423000000	johnbywater	Referencing ticket #569 has changed sprint.
614	1288038146000000	johnbywater	Referencing ticket #569 has changed sprint.
615	1284219609000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1284225063000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1285199168000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1285629333000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1286786420000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1287392123000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1287703431000000	johnbywater	Referencing ticket #570 has changed sprint.
615	1288038146000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1284219609000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1284225063000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1285199168000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1285629333000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1286786420000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1287392123000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1287703431000000	johnbywater	Referencing ticket #570 has changed sprint.
616	1288038146000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1284219609000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1284225063000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1285199168000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1285629333000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1286786420000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1287392123000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1287703431000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1288038146000000	johnbywater	Referencing ticket #570 has changed sprint.
617	1294408164000000	thejimmyg	Duplicate of #569.
618	1284219775000000	johnbywater	Referencing ticket #571 has changed sprint.
621	1285348152000000	johnbywater	Referencing ticket #568 has changed sprint.
621	1285957164000000	johnbywater	Referencing ticket #568 has changed sprint.
621	1286786420000000	johnbywater	Referencing ticket #568 has changed sprint.
621	1287392122000000	johnbywater	Referencing ticket #568 has changed sprint.
621	1287776309000000	johnbywater	Referencing ticket #568 has changed sprint.
622	1285348152000000	johnbywater	Referencing ticket #568 has changed sprint.
622	1286786420000000	johnbywater	Referencing ticket #568 has changed sprint.
622	1287392122000000	johnbywater	Referencing ticket #568 has changed sprint.
623	1285348152000000	johnbywater	Referencing ticket #568 has changed sprint.
623	1286786419000000	johnbywater	Referencing ticket #568 has changed sprint.
623	1287392122000000	johnbywater	Referencing ticket #568 has changed sprint.
626	1284750525000000	johnbywater	Moved from sprint 1.2.3
626	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
628	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
629	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
630	1285348178000000	johnbywater	Referencing ticket #572 has changed sprint.
632	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
633	1285348167000000	johnbywater	Referencing ticket #572 has changed sprint.
633	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
634	1285348167000000	johnbywater	Referencing ticket #572 has changed sprint.
634	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
635	1285348167000000	johnbywater	Referencing ticket #572 has changed sprint.
635	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
636	1284689350000000	johnbywater	Referencing ticket #579 has changed sprint.
641	1284689330000000	johnbywater	Referencing ticket #577 has changed sprint.
644	1284689350000000	johnbywater	Referencing ticket #579 has changed sprint.
645	1284750525000000	johnbywater	Moved from sprint 1.2.3
645	1285348177000000	johnbywater	Referencing ticket #572 has changed sprint.
645	1285957164000000	johnbywater	Referencing ticket #572 has changed sprint.
645	1286786420000000	johnbywater	Referencing ticket #572 has changed sprint.
645	1287392122000000	johnbywater	Referencing ticket #572 has changed sprint.
646	1294413500000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing. 
648	1284889656000000	pudo	introduced in ckan-authz2 cset:934b30ec84fd
649	1284889939000000	pudo	developed in cset:e65d7342ffe4
650	1286789277000000	johnbywater	Moved from sprint 1.2.7
650	1287391932000000	pudo	included since cset:781ef73e61cc
651	1311169144000000	thejimmyg	This has been open for more than 6 months so closing it. It may even have been fixed in John's auth refactor.
651	1311171097000000	dread	Yes, John fixed this. Changing to fixed.
652	1284998201000000	pudo	Fixed in cset: 688cbd25b3f0 (ckan-authz2) 
655	1285252726000000	johnbywater	Referencing ticket #654 has changed sprint.
656	1285252726000000	johnbywater	Referencing ticket #654 has changed sprint.
657	1285252726000000	johnbywater	Referencing ticket #654 has changed sprint.
658	1285252726000000	johnbywater	Referencing ticket #655 has changed sprint.
659	1298379892000000	dread	"Smoketest scripts exist for exactly this in ckanext. It would be great to have this running on nagios.

It is as simple as running:

 python blackbox/smoke.py -H ckan.net blackbox/ckan.net.profile.json

See here for code:

https://bitbucket.org/okfn/ckanext/src/default/blackbox"
659	1298424109000000	nils.toedtmann	Good idea. Listed this in my nagios ticket http://knowledgeforge.net/okfn/tasks/ticket/600
659	1311183031000000	thejimmyg	Since there is already an implementation and already exists as a ticket in the OKFN tasks, I'm marking this as closed. If there is a reason this is still open, please add it to a more appropriate ticket, such as the API version 3 one.
660	1311183115000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our ticketing policy.
661	1288271266000000	dread	"Friedrich has done the main meat of this in ckanext/blackbox/smoke.py

I've extended it to include http basic auth, testing wanted error statuses, checking API calls etc."
662	1286991079000000	dread	"I agree we should not have the 'read-only' things like Ratings in the default returned Package Entity. What do you think of having a parameter to be able to get these if you want them though?

Do you mean you *can* re-post the *entity* post response?

Not sure what you mean by ""An issue for CKAN too.""?

In addition to this ticket, what do you think about changing the behaviour of the Package Entity PUT/POST, so that you replace the entire Package, not just the fields you specify? So you don't keep left-over values, just because you didn't specify them as null?"
662	1286993727000000	johnbywater	"It might be natural for the locator of the rating for a package to be ""/package/{id}/rating"".

I've got not idea what I meant by ""An issue for CKAN too.""  I may have intended to log this againt ckanclient. Anyway, it seems to be just a CKAN thing. :-)

I think I would like to do this:

    $data = c.package_register_post({'name': 'example'})
    $data['title'] = 'Example'
    c.package_entity_put($data['id'], $data)

and this:

    $data = c.package_entity_get('example')
    $data['title'] = 'Example'
    c.package_entity_put($data['id'], $data)

I don't think either work. We could write a test for each.

I think this does work:

    $data = c.package_entity_get('example')
    $data = c.package_entity_put($data['id'], $data)
    $data['title'] = 'Old Example'
    c.package_entity_put($data['id'], $data)

Which is inconsistent. The reason is that the data returned by the update operation (""entity put"") isn't given the same treatment as the read and create operations, which adds various read-only values.

That's as far as I got. I inferred that one or several of the read-only values, when present in the update request data, cause the update to fail. I'm not sure how it fails. Rather than cutting down the response data, we could make the update call more robust. One fix would pick out from the request package data only the attributes that are permitted. A alternative fix would make what ever is choking on the extra values ignore them. I mean, ids are read-only, but we wouldn't want to reject an update because it has an id in the data. We do need to be careful about loading up the package entity data, but the 'id' is read-only and we aren't going to quible about that being present in the data of an update request (even if it doesn't match the referenced entity).

I would rather not support ""replace the entire package"" with especial functionality and documentation. I think the model create/update/delete, where update is ""set attributes"" is sufficient, simple, and fairly optimal. To obliterate all registerd values without deleting, I would get the package entity data, loop over the keys and set the values to '', [] or {} depending on the type, and then PUT the entity. We could write a test for that."
662	1288624137000000	wwaites	"Ran into this with RDF export (that then updates the CKAN package with LOD2-compatible extras from the results). Cannot use ckanclient.package_entity_put(ckanclient.package_entity_get(""ckan"")).

Is this related to the modifications htat are showing up in the changelog with no apparent package (the package that should be appearing there is ""ckan"" itself)"
662	1288628902000000	dread	"Yes we all agree this needs fixing it. 

I'm tempted by John's 'permissive' suggestion of ignoring these 'read-only' values, but to avoid confusion we should except with a 400 error if the user has changed these values. 

Read only fields: 'id', 'relationships', 'ratings_average', 'ratings_count', 'ckan_url'

Use cases for changes between GET package, PUT package:
 1. package unchanged - 200 OK
 2. user changes id, ckan_url, relationships, ratings_* expecting that value to change - 400 error.
 3. just license changes (but not license_id) - 400 error
 4. both license and license_id change in step - 200 OK

Does that sound reasonable John and Will?"
662	1297344790000000	rgrp	Now part of 'model/validation/forms' meta-ticket #961 so reassigning to Seb.
662	1299755259000000	dread	We want this fixed for CLG customer (DGU), so have put in a quick fix into branch 3.1.2 cset:0010a709edf0 (and merged to default) as a stopgap whilst new forms are on their way.
662	1301076443000000	dread	Bug: license_id field is assigned the value of the 'license' parameter.
662	1301076463000000	dread	license bug fixed in cset:00038ef33c45
663	1294414953000000	thejimmyg	This is still an issue. Who is best to look into it? Assigning to me for timebeing.
663	1294660906000000	dread	This is my domain, but I suggest you don't assign it to me until it becomes important.
663	1298913603000000	kindly	cset:76a77439ecd0
664	1294413696000000	thejimmyg	@pudo is this still valid?
664	1300371645000000	kindly	"fixed

cset:a5f4a49190e2"
665	1294247602000000	thejimmyg	Duplicate of #884
665	1297268097000000	thejimmyg	The latest version of the DMS collection interface spec says that this should be a manual process. No work to be done.
667	1285925476000000	dread	This was done when caching was switched off for a few hours it seems. Still, it is worth investigating this.
667	1294414834000000	thejimmyg	"This is something we'll shortly be looking into for DGU work anyway once we switch to the ""thin"" system so don't need a separate ticket for it here too. Also, the upgrade of SQLAlchmey and test performance improvements may also make this less of a problem now anyway. Marking wontfix."
667	1297069121000000	rgrp	Actually marking as wontfix!
668	1294412060000000	thejimmyg	Assigning this to myself but won't be looking at it any time soon, if anyone else wants to take it on I'd be very grateful.
668	1311176649000000	thejimmyg	This ticket is more than 6 months old so marking as invalid in line with our ticketing policy. The API v1 and 2 were completely re-written as part of the logic layer refactor so it is likely this issue is resolved anyway.
669	1286789428000000	johnbywater	Moved from sprint 1.2.7
669	1287392123000000	johnbywater	Moved from sprint 1.2.8
669	1287776309000000	johnbywater	Moved from sprint 1.2.9
669	1288038146000000	johnbywater	Moved from sprint 1.3.0
669	1291715237000000	pudo	Important sub-task: check in schema.xml from eu4 somewhere. 
670	1286789428000000	johnbywater	Moved from sprint 1.2.7
670	1287392123000000	johnbywater	Moved from sprint 1.2.8
670	1287776309000000	johnbywater	Moved from sprint 1.2.9
670	1288038146000000	johnbywater	Moved from sprint 1.3.0
671	1286789428000000	johnbywater	Moved from sprint 1.2.7
671	1287392123000000	johnbywater	Moved from sprint 1.2.8
671	1287776309000000	johnbywater	Moved from sprint 1.2.9
671	1288038146000000	johnbywater	Moved from sprint 1.3.0
672	1286789428000000	johnbywater	Moved from sprint 1.2.7
672	1287392123000000	johnbywater	Moved from sprint 1.2.8
672	1287776309000000	johnbywater	Moved from sprint 1.2.9
672	1288038146000000	johnbywater	Moved from sprint 1.3.0
672	1291715338000000	pudo	This is fixed for Solr now, plus a decision not to support postgres facets has been made. 
673	1286786420000000	johnbywater	Referencing ticket #568 has changed sprint.
674	1286786419000000	johnbywater	Referencing ticket #568 has changed sprint.
675	1286786420000000	johnbywater	Referencing ticket #568 has changed sprint.
675	1287392122000000	johnbywater	Referencing ticket #568 has changed sprint.
675	1287776309000000	johnbywater	Referencing ticket #568 has changed sprint.
676	1294413641000000	thejimmyg	There was discussion of this on the list a few months ago, was there a conclusion?
676	1295869107000000	rgrp	Closing as wontfix. For dev/sysadmin documentation people can follow the link in the CKAN footer to ckan.org where we are consolidating documentation.
677	1286786420000000	johnbywater	Moved from sprint 1.2.6
677	1287392123000000	johnbywater	Moved from sprint 1.2.8
677	1287589651000000	dread	Related to https://trac.dataco.coi.gov.uk/projects/datagov/ticket/645
677	1287745278000000	dread	Currently blocked, waiting for exact details of script.
677	1287746221000000	johnbywater	Just to say, in cases where something needs to be delivered by somebody else, it can be useful to create a separate task ticket (with undefined remaining time) to indicate what deliverable is being waited on, and in the sprint backlog to drag it above the ticket(s) that depend on the deliverable. That means we don't feel a need to factor unknowable waiting time into our own tasks. It also means impediments are more obviously displayed, so you don't lose track when waiting for a number of things. The two different objectives also well separated so there is no question that somebody is stuck and passing time on a task. I've done this a few times recently and it does help to keep things simple. :-)
677	1287776309000000	johnbywater	Moved from sprint 1.2.9
677	1288038147000000	johnbywater	Moved from sprint 1.3.0
677	1292587315000000	dread	Done a few weeks ago in dgu repo.
678	1286786420000000	johnbywater	Moved from sprint 1.2.6
679	1286786420000000	johnbywater	Moved from sprint 1.2.6
679	1287392123000000	johnbywater	Moved from sprint 1.2.8
679	1287776309000000	johnbywater	Moved from sprint 1.2.9
679	1288038147000000	johnbywater	Moved from sprint 1.3.0
679	1292587426000000	dread	James has started this, but still some things to add.
679	1294166120000000	dread	I added some extra bits in cset:1ca7ba29d409. Resource formats disagree between DGU and the FAQ - have sided with DGU for now as it's simpler. I think this ticket is complete now.
681	1286786420000000	johnbywater	Moved from sprint 1.2.6
681	1287160548000000	dread	Looks like integration with drupal is the problem here. I'm writing tests.
681	1287392123000000	johnbywater	Moved from sprint 1.2.8
681	1287776309000000	johnbywater	Moved from sprint 1.2.9
681	1288036387000000	rgrp	This has been fixed.
681	1288036983000000	dread	The code is fixed, but not yet deployed, which requires time.
681	1290507180000000	dread <d.t.read@gmail.com>	This has been deployed now.
682	1286786420000000	johnbywater	Moved from sprint 1.2.6
682	1287392123000000	johnbywater	Moved from sprint 1.2.8
682	1287776309000000	johnbywater	Moved from sprint 1.2.9
682	1288038147000000	johnbywater	Moved from sprint 1.3.0
682	1297358266000000	dread	Various improvements to ckanclient to enable this: cset:1bfefd7596d3 and cset:47fd07087547 and installed on buildbot now.
683	1287142289000000	dread	Done apart from ultrastable - not in use at moment.
684	1286388346000000	dread	Referencing ticket #683 has changed sprint.
685	1286388345000000	dread	Referencing ticket #683 has changed sprint.
686	1286388346000000	dread	Referencing ticket #683 has changed sprint.
686	1287997047000000	dread	Don't need this yet.
689	1287392122000000	johnbywater	Referencing ticket #572 has changed sprint.
689	1287776309000000	johnbywater	Referencing ticket #572 has changed sprint.
690	1288013610000000	johnbywater	This concern was resolved in favour of a converged set of attributes (#711).
691	1294412765000000	thejimmyg	"This is more a long term idea, taking ownership for the timebeing but happy for someone else to take this on.
"
691	1294412929000000	thejimmyg	If we did implement this we'd need to link new sample package to previous sample package of continuous series. So closing #748.
691	1294413010000000	thejimmyg	We'd also fold up continuous series in search results behind newest sample package. So closing #749.
691	1294413993000000	thejimmyg	"We'd also discuss package relationships ideas with JF so closing #444.

"
691	1295610145000000	rgrp	Most of package relationships was implemented in ticket:253 and its subtickets. Therefore closing this as duplicate.
692	1294247841000000	thejimmyg	CKAN doesn't need to implement this, Drupal does. Incidentally, the initial version is implemented on UAT anyway.
693	1286831155000000	wwaites	"Fixed with cset:1e53d160abb6

If expires argument is set, Cache-Control headers get set -- so remove any values, default or otherwise from your configs.

ETag gets set to last-modified."
694	1287087801000000	wwaites	Installed postgres client from lenny backports on eu3. Can now access without problem, web sites still appear to work (e.g. fr.ckan.net). Note that the backup process runs directly on eu5 now as mentioned by rgrp in email
695	1287391751000000	pudo	This is triggered by an issue where having local blinker notifications without asynchronous notifications will break indexing. The issues cause is still unknown, but one possible fix is running CKAN with a queue enabled, synchronous indexing on and no queue consumers attached. Not a real solution, but made possible in cset:a065dbc8041c 
695	1287677169000000	ollyc	"This is down to blinker not persisting the signal objects. Although the docs claim:

  ""Every call to signal('name') returns the same signal object, allowing
  unconnected parts of code (different modules, plugins, anything) to all
  use the same signal without requiring any code sharing or special
  imports""

This isn't true unless you maintain a reference to the signal object. To demonstrate this:

{{{
>>> import gc
>>> from blinker import signal
>>> signal_id = id(signal('Package'))
>>> gc.collect()
0
>>> id(signal('Package')) == signal_id
False
}}}

The synchronous notifications code connects to signals without storing the signal objects, which are subsequently garbage collected and hence never fire.
The async notifications stores references to all signals as a class attribute, so this problem is not seen when async notifications are enabled.
"
695	1287677481000000	dread	Superb finding Friedrich! Any chance of a quick fix for metastable then? 
695	1287677524000000	dread	Sorry, I meant Olly!
695	1287748240000000	ollyc	"Fix and tests for this are here:

 * http://bitbucket.org/ollyc/ckan/changeset/48234e36ee61
 * http://bitbucket.org/ollyc/ckan/changeset/f1447bbc9d65
 * http://bitbucket.org/ollyc/ckan/changeset/1d3cb5378a2f
 * http://bitbucket.org/ollyc/ckan/changeset/e8409c84683d
 * http://bitbucket.org/ollyc/ckan/changeset/8e89cbce15c7
 * http://bitbucket.org/ollyc/ckan/changeset/d1d63db64585
 * http://bitbucket.org/ollyc/ckan/changeset/3d9eb4172f48
"
695	1287766973000000	dread	"These changesets do the trick. I've:
 * merged Ollie's changes into default and metastable branches.
 * updated ckan.net to latest metastable and reindexed it.
 * ckan.net now searches on latest packages, including sanskrit example.
 * test-hmg.ckan.net also updated to latest metastable for testing with UAT.
 * ckanhmg is to be updated next week and DGU ticket remains for this."
696	1287392123000000	johnbywater	Moved from sprint 1.2.8
698	1291742752000000	Stiivi	"I see two possible options:

Option A: store only mirrors of source files, have file format based plugins for querying files

Option B: store mirrors of source files, have plugin based loading scripts into ""common structured format"", have single query module.

I would go with option B as it is:

- easier to implement - file format based transformations are simpler than file format based queries
- more transparent data management process
- only one simple query module
(see attached  ckan-srcmirror.png)

The Option B will fit better to the broader data architecture context:

http://democracyfarm.org/f/ckan/data_arch.png

Concerning API I would suggest to try to be compatible with google spreadsheet API:

http://code.google.com/apis/spreadsheets/data/3.0/reference.html
"
698	1291832133000000	thejimmyg	"Actually we've implemented a first version which doesn't store the data.

See this post: http://blog.ckan.org/2010/12/04/open-data-day-announcing-ckan-data-proxy/

You can get data like this:

http://1.latest.jsonpdataproxy.appspot.com/?sheet=1&indent=4&url=http://research.dwp.gov.uk/asd/asd4/r1_values.xls"
698	1291851275000000	Stiivi	"@thejimmyg: It is neat simple solution.

You have suggested a proxy API:

''There will be a new API at ``/api/spreadsheet?callback=jsonpcallback&url=``
''

There are two options:

1. Have public ckan data proxy as stand-alone service: I get package resource URL from CKAN and pass it to proxy

2. Have ckan data API (as ticket title suggests): If I am talking to CKAN, I am getting data from CKAN, I should not care about proxy or anything behind nor I should care about original data source - I care about resource data in a format that I can process (CSV/JSON).

For CKAN data API I would suggest something like:


{{{
/api/resource_data/RESOURCE_ID?...

}}}

or more human readable:


{{{
/api/resource_data/PACKAGE_NAME/RESOURCE_NUMBER?...

}}}

This will allow others to get only CKAN resources. Moreover, allowing to get only resource data (not any URL data) would allow us to pre-process resources in the future.

First version/implementation: pass each requested resource URL to your proxy service (external, not CKAN related), which determines file by file extension in URL, fail on unknown file or unprocessable file.

/api/resource_data/PACKAGE/RESOURCE?output=jsonp&sheet=1...

would be redirected to (for example):

http://1.latest.jsonpdataproxy.appspot.com/?url=RESOURCE[""URL""]&sheet=1...


Second version/implementation: Determine file type in advance and pass to appropriate conversion service when requested

If you upload document on scribd or slideshare it gets processed in the background. This can be done in CKAN after any resource change. We do not need to download the file at the moment, however what can be done is:

1. try a converter by URL file extension
2. try a converter by MIME type (content-type header)
3. brute-force try all converters

No need to store copies of files, just store determined file type somewhere in the resource record (as mime type).

Also, it would be nice if any data conversion service would provide output in both - JSON/CSV. Therefore we would be able to have ""Download CSV"" link directly in CKAN web page for browsing users:

/api/resource_data/PACKAGE/RESOURCE?output=csv...
"
698	1291858346000000	Stiivi	"I have created ""proof of concept"" implementation that will use external data proxy service when accessing:


{{{
/api/data/PACKAGE_ID

}}}

like:


{{{
http://127.0.0.1:5000/api/data/069c80f8-8476-452e-bfd4-0a9077666c14

}}}

It just works and requires refactoring to match ckan standards. I would need help from soneone who knows ckan internals better."
698	1291859298000000	Stiivi	"One more note: it would be good if packages had names/identifiers as well, as referencing internal IDs from outside world is not very good practice - they are quite volatile, mostly in regard to expected objects.

PACKAGE/RESOURCE_REFERENCE

Possible resource references:
- 'default' - reserved keyword for 'the only one resource' if there is only one, or first resource if there are more or the one with flag 'default'
- 'latest' - to be able to access 'latest' resource within package (or 'actual' or 'last'?)
- alphanumeric identifier (not starting with number)
- number - index of resource as human/visitor sees it on page (not the same as ""position"" attribute - as that one might contain gaps or be different (and it is in some cases)), index of resource should be something like:

{{{
SELECT package_id, id, url, ROW_NUMBER() OVER (PARTITION BY package_id ORDER BY position) AS index FROM package_resource

}}}
"
698	1292001709000000	Stiivi	"'draft"": https://github.com/Stiivi/ckanext-dataapi

requires that the client handles HTTP 302 Redirect correctly."
698	1292239372000000	rgrp	" 1. move repo to bitbucket
 2. clone james proxy code and modify to make google spreadsheets compatible (add a test ...)
 3. update the ckanext to pass on parameters ....
 4. Deploy all of this to test.ckan.net
 5. Rufus: check redirects with javascript"
698	1292596589000000	Stiivi	"Here is the fork for (json) data proxy:

https://bitbucket.org/Stiivi/dataproxy

I've refactored it and moved transformations into separate modules. For each resource type there should be a module in transform/<type>_transform.py

Each module should implement ``transform(flow, url, query)`` and should return a dictionary
as a result.

Existing modules:

* transform/csv_transform - CSV files
* transform/xls_transform - Excel XLS files

if there is no resource_type module, HTTP 200 Error Resource type not supported is returned.

You can override URL file extension or specify type if extension is missing through type= URL option. For example if you have any URL that contains CSV data however the url is just foo.com/data then you can pass: url=http://foo.com/data&type=csv

Note: Source refactored/updated in example/dataproxy, being tested by running locally localhost:8000.
"
698	1292781368000000	Stiivi	pushed parameter passing; change handling of unknown reply type on proxy side: do not raise exception, but reply with 200 Error - unkown reply type, use json/jsonp
698	1293472613000000	anonymous	"Data proxy documentation: http://democracyfarm.org/dataproxy/api.html (included in sources)

Updated ('s' as in structured) data proxy app: http://sdataproxy.appspot.com
"
698	1293649815000000	rgrp	"This ticket is complete:

  * ckanext-dataapi: working /api/data/{resource-id} with tests
  * https://bitbucket.org/okfn/dataproxy - the dataproxy code running at http://jsonpdataproxy.appspot.com
    * functioning but needs tests and improvements

There a whole bunch of improvements to be done but these will be in ticket:888"
699	1294412194000000	thejimmyg	I've just verified that the search pages navigation does not respect the checkboxes. Could you have a look please Friedrich?
699	1296499061000000	pudo	fixed in cset:81a0f5538a5b
700	1288562082000000	rgrp	"I can verify that groups are getting lost on package preview on ckan.net (steps: 1. click edit, 2. preview 3. look at edit form and group has disappeared).

Given this is a bug on a production service it is urgent this gets fixed.

@pudo: please can you confirm your expected fix date on this?"
700	1289823108000000	dread	This is still holding back releases. @pudo please can you look at it this
703	1288355926000000	johnbywater	Referencing ticket #700 has changed sprint.
703	1288356182000000	johnbywater	Referencing ticket #700 has changed sprint.
703	1289909096000000	pudo	fixed in cset:b23377108b6d
704	1288355926000000	johnbywater	Referencing ticket #700 has changed sprint.
704	1288356182000000	johnbywater	Referencing ticket #700 has changed sprint.
705	1288356302000000	johnbywater	Referencing ticket #701 has changed sprint.
705	1288356319000000	johnbywater	Referencing ticket #701 has changed sprint.
706	1288355926000000	johnbywater	Referencing ticket #700 has changed sprint.
706	1288356181000000	johnbywater	Referencing ticket #700 has changed sprint.
706	1289909028000000	pudo	fixed in cset:b23377108b6d 
707	1288355926000000	johnbywater	Referencing ticket #700 has changed sprint.
707	1288356181000000	johnbywater	Referencing ticket #700 has changed sprint.
708	1288356302000000	johnbywater	Referencing ticket #701 has changed sprint.
708	1288356319000000	johnbywater	Referencing ticket #701 has changed sprint.
711	1288014219000000	johnbywater	See also #504.
711	1294232521000000	thejimmyg	At the moment DGU has locations such as Wales, England etc. This won't change and won't try to be merged with INSPIRE datasets or bounding boxes. What we do need is a flag for INSPIRE so that the different types of package can be highlighted.
711	1296592589000000	thejimmyg	"Our new approach agreed with Rod is to start with a minimum set of package extras and expand them in line with feedback from the user group. We can now show the source GEMINI record as XML (and also a very basic HTML view) for anyone who wants the full detail.

No need for this ticket anymore."
712	1288038147000000	johnbywater	Moved from sprint 1.3.0
712	1294408364000000	thejimmyg	There is no 0.4 metadata spec yet so we can't model it. If there was, the discussion would be on #711 anyway.
713	1288026226000000	johnbywater	Referencing ticket #712 has changed sprint.
713	1288038147000000	johnbywater	Referencing ticket #712 has changed sprint.
714	1291733788000000	dread	This was implemented with DGU ticket 614
715	1289815657000000	johnbywater	Moved from sprint 1.3.3
715	1297796784000000	pudo	fixed in cset:69c4210f635a
718	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
718	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
718	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
718	1288459823000000	pudo	"fixed

http://bitbucket.org/okfn/ckanextiati/changeset/4bf10d3f26e7"
719	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
719	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
719	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
720	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
720	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
720	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
720	1288459344000000	pudo	Customer has stated they do not want this in the current iteration.
721	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
721	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
721	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
721	1288459534000000	pudo	"Solved using javascript to toggle hide/show preview for each resource:

http://bitbucket.org/okfn/ckanextiati/changeset/942cec028cf5"
722	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
722	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
722	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
722	1288459703000000	pudo	"fixed: 

http://bitbucket.org/okfn/ckanextiati/changeset/fb166fde9d3e"
723	1288195538000000	johnbywater	Referencing ticket #716 has changed sprint.
723	1288196547000000	johnbywater	Referencing ticket #716 has changed sprint.
723	1288197569000000	johnbywater	Referencing ticket #716 has changed sprint.
723	1288459610000000	pudo	Fixed in cset:78b23f3f6aaf 
725	1288195549000000	johnbywater	Referencing ticket #724 has changed sprint.
725	1288196716000000	johnbywater	Referencing ticket #724 has changed sprint.
725	1288197657000000	johnbywater	Referencing ticket #724 has changed sprint.
725	1289295966000000	pudo	fixed in cset:ff4264eb609c (http://bitbucket.org/okfn/iati/changeset/ff4264eb609c)
726	1288195549000000	johnbywater	Referencing ticket #724 has changed sprint.
726	1288196716000000	johnbywater	Referencing ticket #724 has changed sprint.
726	1288197657000000	johnbywater	Referencing ticket #724 has changed sprint.
727	1288195549000000	johnbywater	Referencing ticket #724 has changed sprint.
727	1288196716000000	johnbywater	Referencing ticket #724 has changed sprint.
727	1288197657000000	johnbywater	Referencing ticket #724 has changed sprint.
728	1294232752000000	thejimmyg	WAF records may always need to be re-harvested to see if they have changed. Does CSW provide any functionality that allows us to see what has changed?
728	1304934653000000	wwaites	filters not properly supported by e.g. geonetwork. so we defer.
728	1304936482000000	thejimmyg	Actually, these are a different type of filter. We need to send a filter to only get modified documents, to save processing our end.
728	1310124784000000	thejimmyg	Isn't this already completed? Putting in the backlog but I think it is already implemented. Adria, could you please update accordingly?
729	1288012854000000	rgrp	Closed in cset:a9006fd56450
730	1291139609000000	rgrp	Duplicate of ticket:402
731	1288015048000000	johnbywater	Are the tasks for this user story outstading, or can we close them now?
732	1287776309000000	johnbywater	Moved from sprint 1.2.9
732	1288021197000000	dread	Couldn't reproduce
733	1287776309000000	johnbywater	Moved from sprint 1.2.9
734	1288038147000000	johnbywater	Moved from sprint 1.3.0
734	1292587603000000	dread	Found problems and ticketed: #872 #873
735	1292957248000000	dread	"I have been through looking for package names with a trailing underscore checking if they should indeed be separate package from those without.

#872 and #873 cover creation of the duplicates in the first place."
736	1294409747000000	thejimmyg	"The tests we write for this would need to:

* Submit harvest source form with valid CSW location
* Submit harvest source form with invalid CSW location

We can now close #790 and #791. Note that discussion on end-to-end testing is now at #784."
736	1296592767000000	thejimmyg	We also need to check WMS URLs added to package resources to check they are genuine WMSs.
736	1304937755000000	thejimmyg	"We now check WMS links. The CSW link checking could be more robust. New proposal is:

Check that a URL with a / is treated the same way as one without. Treated as the same if same port, scheme, domain and path (ie query string and fragment are ignored, port is normalised away)"
736	1304963598000000	amercader	"See
https://bitbucket.org/okfn/ckanext-harvest/changeset/a7b6d8c0dde7
https://bitbucket.org/okfn/ckanext-harvest/changeset/40de12fada74"
737	1319730303000000	dread	"Something like this one on github:

{{{
# This is an <h1> tag
## This is an <h2> tag
###### This is an <h6> tag
Text styles
*This text will be italic*
_This will also be italic_
**This text will be bold**
__This will also be bold__

*You **can** combine them*
Lists
Unordered
* Item 1
* Item 2
  * Item 2a
  * Item 2b
Ordered
1. Item 1
2. Item 2
3. Item 3
   * Item 3a
   * Item 3b
Miscellaneous
Images
![GitHub Logo](/images/logo.png)
Format: ![Alt Text](url)
Links
http://github.com - automatic!
[GitHub](http://github.com)
Blockquotes
As Kanye West said:
> We're living the future so
> the present is our past.
}}}"
738	1294408864000000	thejimmyg	This needs more discussion. It is a separate problem from deleting a harvest source from the admin interface which is dealt with in #884.
738	1294409432000000	thejimmyg	"Note from John Bywater on duplicate ticket #783 says: ""We need a condition for 'disappears'. Asked AW about this (prob. in July) but should chase for an answer."""
738	1297685069000000	thejimmyg	"It may be handy to have a history of harvested documents and also be able to delete documents but still get their revisions.

The package comparison code will need to look at these revisions."
738	1299761436000000	thejimmyg	This is now complete and on UAT.
739	1294247758000000	thejimmyg	This needs to be implemented via an API call that Drupal can use
739	1296592842000000	thejimmyg	Implemented today. May want a better implementation later.
740	1294408931000000	thejimmyg	This will have to be done via the API though for DGU/UKLP. Should probably have it on the package interface in main CKAN too though.
740	1296592889000000	thejimmyg	Duplicate of #739.
741	1291988087000000	rgrp	Done in cset:49d5bd0a6a99 and cset:68522feabfeb among others. Documentation of progress on http://ckan.okfnpad.org/plugins
742	1288038147000000	johnbywater	Moved from sprint 1.3.0
743	1294412807000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing.
744	1294412813000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing. 
745	1294412820000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing. 
746	1294412827000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing. 
747	1294412834000000	thejimmyg	This is a Drupal requirement rather than a CKAN one for the timebeing. 
748	1294412916000000	thejimmyg	Merging with #676.
748	1294412976000000	thejimmyg	Sorry, that should have been #691.
749	1294412986000000	thejimmyg	Merge with #691
750	1289483616000000	johnbywater	Referencing ticket #728 has changed sprint.
750	1294408970000000	thejimmyg	How would this be done? Is it part of the CSW spec?
750	1296592940000000	thejimmyg	Duplicate of #728
752	1294408472000000	thejimmyg	Duplicate of #712. See #711 now.
753	1289209646000000	johnbywater	Moved from sprint 1.3.2
753	1289815657000000	johnbywater	Moved from sprint 1.3.3
753	1294247922000000	thejimmyg	Not an explicit requirement yet so closing ticket. Will re-open if needed.
754	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
754	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
754	1294408726000000	thejimmyg	"We may not need to do any filtering in practice but if we did, the implementation would have these stages:

 * Add filter attribute to harvest source entity
 * Add filter field to harvest source form
 * Construct and send filtered CSW GetRecords request

Thus these tickets can now be marked as duplicated: #755 #756 #759."
754	1294409145000000	thejimmyg	"Also:

 * Change API documentation to indicate harvest source entity has filter attribute
 * Change ""CSW Get Records"" request to accept and use given CSW filter

Now #758 and #760 can be closed too."
755	1288041215000000	johnbywater	Referencing ticket #754 has changed sprint.
755	1288264918000000	johnbywater	Referencing ticket #754 has changed sprint.
755	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
755	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
755	1294408632000000	thejimmyg	Duplicate of #754
756	1288041215000000	johnbywater	Referencing ticket #754 has changed sprint.
756	1288264917000000	johnbywater	Referencing ticket #754 has changed sprint.
756	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
756	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
756	1294408642000000	thejimmyg	Duplicate of #754
757	1288041215000000	johnbywater	Referencing ticket #754 has changed sprint.
757	1288264918000000	johnbywater	Referencing ticket #754 has changed sprint.
757	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
757	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
757	1294233016000000	thejimmyg	Don't fully understand this ticket. Will return to it.
757	1296593448000000	thejimmyg	Duplicate of #754. If we added filtering we'd need to write a migration script anyway.
758	1288041215000000	johnbywater	Referencing ticket #754 has changed sprint.
758	1288264917000000	johnbywater	Referencing ticket #754 has changed sprint.
758	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
758	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
758	1294409053000000	thejimmyg	Also a duplicate of #754.
759	1289209646000000	johnbywater	Referencing ticket #753 has changed sprint.
759	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
759	1294408652000000	thejimmyg	Duplicate of #754
760	1288041238000000	johnbywater	Referencing ticket #759 has changed sprint.
760	1288265044000000	johnbywater	Referencing ticket #759 has changed sprint.
760	1289209646000000	johnbywater	Referencing ticket #759 has changed sprint.
760	1289815657000000	johnbywater	Referencing ticket #753 has changed sprint.
760	1294409111000000	thejimmyg	Duplicate of #754
763	1288606918000000	dread	Referencing ticket #441 has changed sprint.
763	1292775248000000	thejimmyg	"Notes from my discussion with David a while ago:

Following irc discussion, it looks like read-only mode is simply
achieved by Apache config:
* 503 for PUT/POST operations - stops writes
* 503 for GETs to URIs containing: /edit, /create, /new, /authz -
stops providing forms that lead to a write
* setenv CKAN_READONLY=""Undergoing maintenance 12.00 UTC for one hour""
which can be picked up by CKAN to be displayed as we see fit in the
future. Friedrich's current IATI sprint may link into this and grey
out edit links etc."
764	1289209648000000	johnbywater	Moved from sprint 1.3.2
764	1289815657000000	johnbywater	Moved from sprint 1.3.3
764	1310133334000000	shevski	will be done as part of #1094
765	1288606918000000	dread	Referencing ticket #441 has changed sprint.
766	1289815658000000	johnbywater	Moved from sprint 1.3.3
766	1294248066000000	thejimmyg	I haven't heard this mentioned yet, but yes, let's try to implement it if possible. Appears to expose a CSW interface? http://webhelp.esri.com/geoportal_extension/9.3.1/index.htm#ext_csw_clnts.htm
766	1296593519000000	thejimmyg	This is a duplicate of #767
767	1289209649000000	johnbywater	Moved from sprint 1.3.2
767	1289815658000000	johnbywater	Referencing ticket #766 has changed sprint.
767	1294409336000000	thejimmyg	"Our CSW code should be able to cope with ArcGIS too though surely? Worth testing though.

To do this we'd need to:

 * Obtain example ArcGIS CSW server
 * Write a test

Now we can close #768 and #769."
767	1296593504000000	thejimmyg	"I haven't heard this mentioned yet, but yes, let's try to implement it if possible. Appears to expose a CSW interface?  http://webhelp.esri.com/geoportal_extension/9.3.1/index.htm#ext_csw_clnts.htm
"
767	1304936413000000	thejimmyg	We are now live and have used a variety of servers in testing.
768	1288190630000000	johnbywater	Referencing ticket #767 has changed sprint.
768	1289209649000000	johnbywater	Referencing ticket #767 has changed sprint.
768	1289815658000000	johnbywater	Referencing ticket #766 has changed sprint.
768	1294409308000000	thejimmyg	Duplicate of #767
769	1288190630000000	johnbywater	Referencing ticket #767 has changed sprint.
769	1289209649000000	johnbywater	Referencing ticket #767 has changed sprint.
769	1289815658000000	johnbywater	Referencing ticket #766 has changed sprint.
769	1294409318000000	thejimmyg	Duplicate of #767
770	1289209650000000	johnbywater	Moved from sprint 1.3.2
770	1289815658000000	johnbywater	Moved from sprint 1.3.3
770	1294413390000000	thejimmyg	"Running CLI harvester command without arguments or with --help would return help for the harvester (currently crashes). 

We can therefore close #772, #773 and #774"
770	1296593925000000	thejimmyg	I don't care about this. It is too trivial. If I get around to fixing it they great but I don't need it logged as a ticket.
771	1288190596000000	johnbywater	Referencing ticket #770 has changed sprint.
771	1288190682000000	johnbywater	Referencing ticket #770 has changed sprint.
771	1288190711000000	johnbywater	Referencing ticket #770 has changed sprint.
771	1289209650000000	johnbywater	Referencing ticket #770 has changed sprint.
771	1289815658000000	johnbywater	Referencing ticket #770 has changed sprint.
771	1294413256000000	thejimmyg	"This works for me. 


{{{
paster help
}}}

and


{{{
paster --help
}}}

both show help text for me.

"
772	1288190596000000	johnbywater	Referencing ticket #770 has changed sprint.
772	1288190682000000	johnbywater	Referencing ticket #770 has changed sprint.
772	1288190711000000	johnbywater	Referencing ticket #770 has changed sprint.
772	1289209650000000	johnbywater	Referencing ticket #770 has changed sprint.
772	1289815658000000	johnbywater	Referencing ticket #770 has changed sprint.
772	1294413313000000	thejimmyg	Merging with #770
773	1288190596000000	johnbywater	Referencing ticket #770 has changed sprint.
773	1288190682000000	johnbywater	Referencing ticket #770 has changed sprint.
773	1288190711000000	johnbywater	Referencing ticket #770 has changed sprint.
773	1289209650000000	johnbywater	Referencing ticket #770 has changed sprint.
773	1289815658000000	johnbywater	Referencing ticket #770 has changed sprint.
773	1294413400000000	thejimmyg	Merging with #770
774	1288190596000000	johnbywater	Referencing ticket #770 has changed sprint.
774	1288190682000000	johnbywater	Referencing ticket #772 has changed sprint.
774	1288190711000000	johnbywater	Referencing ticket #772 has changed sprint.
774	1289209650000000	johnbywater	Referencing ticket #772 has changed sprint.
774	1289815658000000	johnbywater	Referencing ticket #772 has changed sprint.
774	1294413412000000	thejimmyg	Merging with #770
775	1295260144000000	pudo	fixed in cset:98c9997e80e8
776	1297066840000000	rgrp	Moved to https://bitbucket.org/okfn/vdm/issue/3/avoid-generating-vdm-warnings
777	1289209649000000	johnbywater	Referencing ticket #764 has changed sprint.
777	1289815658000000	johnbywater	Referencing ticket #764 has changed sprint.
777	1292586843000000	dread	James did this a while ago.
778	1289209652000000	johnbywater	Moved from sprint 1.3.2
778	1289815658000000	johnbywater	Moved from sprint 1.3.3
778	1294416567000000	thejimmyg	This is now done.
779	1289209652000000	johnbywater	Moved from sprint 1.3.2
779	1289815658000000	johnbywater	Moved from sprint 1.3.3
779	1294416581000000	thejimmyg	This is now done.
780	1289209653000000	johnbywater	Moved from sprint 1.3.2
780	1289815658000000	johnbywater	Moved from sprint 1.3.3
780	1294416608000000	thejimmyg	This is now done.
781	1289209653000000	johnbywater	Moved from sprint 1.3.2
781	1289815658000000	johnbywater	Moved from sprint 1.3.3
781	1294415081000000	thejimmyg	This is a duplicate of #812 so closing.
782	1289218497000000	pudo	"This has existed for quite a while, but misses documentation. Has been documented in cset:db18a16a5b4d 
"
783	1294409399000000	thejimmyg	Exact duplicate of #738.
784	1289815658000000	johnbywater	Moved from sprint 1.3.3
784	1294410089000000	thejimmyg	"In order to have end to end testing for UKLII we need to:

 * Review document from PP with the different things we need to test
 * Set up a GeoNetwork instance with sample documents to be tested

We may also want to test ArcGIS, see #767"
784	1304936251000000	thejimmyg	The UKLP test manager is looking at a new test proposal, we have had approval to go live without this, we can re-open later if necessary.
786	1289815658000000	johnbywater	Moved from sprint 1.3.3
786	1294410004000000	thejimmyg	Duplicate of #884.
787	1289295207000000	pudo	"Alternative:

 * The Drupal system will expose a resource at data.gov.uk/profile which wil contain the reqesting user's nickname, fullname, email etc. in JSON (or XML) form. 
 * The Drupal system will also run an OAuth server (and provide /request_token, /access_token, /authorize). 
 * CKAN's login form will be rewired to initiate a client OAuth request on the /profile resource.
 * Recognizing CKAN's callback URL at catalogue.data.gov.uk, Drupal will automatically grant the request if a user is signed in. 
 * Upon return, a user is created, optionally using the OAuth access token as the users API key, thus making it known both to Drupal and CKAN. 
 * The authorizer will be extended to check access to the /profile resource for OAuth accounts (slow but safe). 

Advantages: 

 * Well-known protocol, does not depend on cookies (which are strange and never behave as defined, or even the same in multiple browsers) 
 * Python code is available: http://oauth.googlecode.com/svn/code/python/oauth/example
 * Drupal seems to have very complete support: http://drupal.org/node/296205 
 * Can be fully implemented as a plugin, using an OAuthClientController for callback and adding hooks to the Authorizer (perhaps need to reconfigure who.ini)

"
787	1289815658000000	johnbywater	Moved from sprint 1.3.3
787	1303118054000000	thejimmyg	The AuthAPI now exists as an IMiddleware plugin, we really need the permission system moved into CKAN before it is useful though and this depends on a refactor of the Auth system. See #1094
787	1315821118000000	thejimmyg	"The joint authentication was implemented a long time ago and is deployed on catalogue.data.gov.uk. We'll build the authorisation layer in ticket #1326 so marking this as fixed.
"
788	1289815658000000	johnbywater	Referencing ticket #786 has changed sprint.
788	1294410007000000	thejimmyg	Duplicate of #884.
789	1294248289000000	thejimmyg	Will, this means that we just get given a URL to harvest from and we need to determine whether it is a CSW or a WAF. Can you look at this please? The code may already do it, I'm not sure.
789	1296593257000000	thejimmyg	Covered by #736 now.
790	1289815658000000	johnbywater	Moved from sprint 1.3.3
790	1294409709000000	thejimmyg	Duplicate of #736.
791	1294409723000000	thejimmyg	Duplicate of #736
793	1289815658000000	johnbywater	Moved from sprint 1.3.3
793	1294409836000000	thejimmyg	"Anyone else know what this means?

I can't find changeset aa9aa32e00a9 in the repository so marking as invalid."
794	1289815658000000	johnbywater	Moved from sprint 1.3.3
794	1294248216000000	thejimmyg	This work is now underway in the underlying DGU implementation.
794	1297686491000000	thejimmyg	Actually, for the timebeing we will match but not do anything with that matched information, until there is a clear use case. Publisher is simply the publisher for which the source was registered. Closing this ticket.
794	1300877517000000	thejimmyg	I think we need to look at this again in relation to scotland.
795	1296593361000000	thejimmyg	This is a duplicate of #794 because if we needed to do this it would be because we need to support harvest sources registered on behalf of publishers by agents,
796	1291640040000000	rgrp	We no longer have an alpha page due to refactor of search and usage of search for list view (see ticket:847 and subtickets).
797	1289402982000000	rgrp	Fixed yesterday night in cset:5b522c762e71
798	1289815658000000	johnbywater	Moved from sprint 1.3.3
798	1294916973000000	dread	This was done a while ago.
799	1294232675000000	thejimmyg	"How can we tell a WAF document has changed, we simply need to re-harvest it to see surely?

Moving the issue to ticket #728 to be dealt with together."
800	1289483682000000	johnbywater	Referencing ticket #799 has changed sprint.
800	1294245610000000	thejimmyg	Discussion for this ticket is now at #728
801	1289483616000000	johnbywater	Referencing ticket #728 has changed sprint.
801	1289483682000000	johnbywater	Referencing ticket #799 has changed sprint.
801	1294233386000000	thejimmyg	Perhaps this should be implemented differently so that each harvest attempt creates its own database entry with a timestamp and a status attached. We'll need to move to this when we move to a queue based system.
801	1296593735000000	thejimmyg	I don't see why we'd really need to do this. Under the current system a job would be created just before the harvesting would be run so the creation date of the job is (give or take a few seconds) the date of the harvesting. If we moved to a queue system this would be done better anyway.
801	1297686706000000	thejimmyg	We do have a requirement for this now. The job model has changed so that it is hidden from the user. We therefore want to know the timestamp the job started and the timestamp it finished. We'll therefore need migrations adding too.
801	1300196714000000	thejimmyg	This will now be solved as part of the larger harvesting refactor. See #921.
802	1294233294000000	thejimmyg	Merging with #801
803	1289489024000000	dread	"I'm not sure a template is needed for the test script - surely repeated stuff can just be factored out?

Creating the model dump file:
 * 'hg up' to ckan as it was at the last model migration
 * 'paster db clean', 'paster db init', 'paster create-test-data'
 * 'pgdump'
 * 'hg up default'
 * Check in the dumped file

Do we really want a script to mess with our repo like this? Isn't it just safer to do manually with good instructions?"
803	1314031451000000	dread	We now use nose to test migrations instead.
804	1294233156000000	thejimmyg	This is the document I drafted after discussions with each party which was approved by JF.
805	1298379084000000	dread	"Migration tests added to buildbot using kindly's new nose option #965.
Also removed legacy system of migration testing in: ckan/migration/tests
and updated docs. cset:643673c7db3e"
806	1290071159000000	dread	This is done now I think? Please list changesets, time taken vs estimate and close ticket.
806	1291128886000000	rgrp	Duplicate of ticket:827
806	1291134978000000	dread	This is not a duplicate of #827
806	1294916284000000	dread	This looks finished
806	1324034356000000	dread	This was introduced in CKAN 1.3
807	1297075372000000	rgrp	wontfix as with traffic we have this is not a massive issue and these are very minor items (we can reopen later if this comes up again).
808	1297783658000000	pudo	implemented in cset:8200247e74e9
809	1297075561000000	thejimmyg	This is something to think about more in the future.
810	1297679091000000	pudo	At the moment, this crashes the groups field for some mysterious reason. Since this is going to be redundant with the new forms and the ticket has a low priority, I'm bumping this back 2 weeks. 
810	1300093797000000	rgrp	Moving back to backlog for v1.4 as should be dependent on forms overhaul and seems to be problematic (and not that urgent).
810	1310128477000000	thejimmyg	This ticket is over 6 months old so closing.
811	1294415158000000	thejimmyg	See also related extras field tickets #811 and #893
812	1294658293000000	dread	Just added stuff from duplicate #781
813	1294411047000000	thejimmyg	"This is now done. The text reads ""Add a Package"" in the main navigation. Thanks!"
814	1294411109000000	thejimmyg	"This is now done. It's the ""About"" link in the main application. Thanks!"
815	1294410951000000	thejimmyg	This is a duplicate of #234. Please have a look at existing tickets or re-open closed ones rather than adding new ones so that we can keep the old discussions. I've added your point to #234. Thanks!
816	1311171466000000	thejimmyg	"John, could you have a look at this one please. We'd need an entry in the logic layer for it and then some autocomplete JavaScript on the format field.

Can we standardise on jQueryUI going forward.

http://jqueryui.com/demos/autocomplete/"
816	1312192499000000	rgrp	"What about idea of 'model' refactor for resource, specifically to have:

 * format: human created format string with possible nesting e.g. zip:csv
 * kind: file | api | example | service
 * mimetype: standard mimetype (e.g. for zipped csv would be application/zip)
 * mimetype-inner: mimetype of innermost object (so for example would be text/csv)

See http://lists.okfn.org/pipermail/ckan-discuss/2011-April/001139.html"
816	1312212782000000	dread	"I like rgrp's idea to change the model. But since it's complicated it would be good to have a UI.

e.g. You might make format field simply a drop-down with only some common options: 'CSV, Excel, Zip, Other'. If you go for Other, then a more substantial UI appears, to cover more filetypes, APIs, services and a text box for Other. And if you select 'Zip' then another set of options appears to say what is in the zip. etc.etc.

Another approach would be to have a background process downloading the data file and filling this in for you."
816	1312295371000000	johnglover	"I have implemented the resource autocomplete so am closing this for now.

I agree that more information on the resource would be a good addition. It seems a bit of a different issue to just adding autocomplete though, with potentially far more changes to the codebase, so maybe it would be better discussed in a separate ticket/CREP. However, any new fields would presumably want to either be constrained or have an autocomplete and so can reuse the work done on this feature.

Cheers,
John"
816	1319804698000000	dread	John did this in cset:1697dfa2552c for release 1.5
816	1319812324000000	dread	And branch feature-816-format-autocomplete
817	1289997628000000	cygri	"I'm not allowed to create attachments for some reason. Here's the screenshot:

[[Image(http://richard.cyganiak.de/2010/ckan/ckan-resources-table-proposal.png)]]

http://richard.cyganiak.de/2010/ckan/ckan-resources-table-proposal.png"
817	1297073724000000	thejimmyg	This appears to be fixed now.
818	1305559442000000	dread	1.4 complete
819	1323171435000000	thejimmyg	This issue is fixed. Further improvements to the UX of the autocomplete will be dealt with in other tickets.
820	1311325226000000	dread	This has been fixed
821	1298486642000000	dread	"Investigating several of these packages, it works for me (and David Raznick).

For example ni_013_migrants_english_language_skills_and_knowledge, one resource is  seen created in the diffs, is displayed in CKAN, in the API and in the dumps. Yet looking at the dump from 17/11/10 when this ticket was created, the resource didn't have a URI, which by the current model is a requirement, so it suggests the data was fine underneath, but it had problems displaying this field, and is now fixed."
822	1290506354000000	dread	"Fixed in cset:045cab10aa1d
Thanks for the patch!"
823	1290506116000000	anonymous	Fixed in cset:3845a501ed5f
824	1290595559000000	dread <d.t.read@gmail.com>	Done on metastable for 1.2 release.
825	1290624449000000	dread	Added plenty of info in cset:627249a1c102
826	1297414412000000	dread	"It's great that the extras are added in-line with other Resource properties (as opposed to package extras which are a dict not off 'package' but off 'package.extras').

However, the resource extra field keys are defined in config option ""ckan.extra_resource_fields"". This config option should be removed - extras need to be entirely flexible for our purposes. (In the next ticket we should make it possible to add/remove both keys and values from the Web UI or API.)

It would also be good to tidy things in this direction: http://wiki.okfn.org/Coding_Standards

I've merged from default to the branch enhancment_826_resource_extra_fields ready for you."
826	1297415095000000	pudo	"I want to strongly support david in his call for fully flexible extras: one of my use cases for them is to store the various bits of fallout from an archiving process, such as: 
 
* last-status
* last-crawled
* last-etag
* last-expires
* last-md5
* failure-count
* fall-back-url

These are things needed to really archive the data well, but they have nothing to do with CKAN core ops. Essentially, the archiver is a seperate concern and it need not appear in the CKAN config."
826	1297416879000000	kindly	"There is nothing to stop anyone from putting any extra attributes in the extra_info field dict.  So any have the flexibility you need.

The config option is to add some fields that act in exactly the same way as python attributes, having the same semantics as them.  i.e if you have an extra field called alturl, you can do obj.alturl = 'fdsffs'.   

This is the best of both worlds as far as I can tell."
826	1297417900000000	kindly	"I forgot to mention that he main advantage of the fixed fields, is that we can make them properly searchable i.e the values searchable.  This currently does not work for package extra values as they are jsons.

I have added this searchability for the sql backend."
826	1297421022000000	dread	Ah - I understand. I'd like it if you could make all the extra fields work as attributes and be searchable - is that possible?
826	1297423342000000	kindly	"This would be too much of a hack.  You do not want users overwriting any attributes on the object.  If they called the attribute ""__init__"" it would write over the actual __init__.


"
826	1297429910000000	dread	"Merged into default in cset:613d7bd5fc96.

Future tickets in this area include:
 * #978 Full edit in Web UI
 * #979 Edit Resource extras in the API"
826	1306766057000000	dread	This went into ckan release 1.3.2.
827	1290766239000000	rgrp	Fixed in cset:63a0c0223da4
828	1290696586000000	rgrp	Closed in cset:66a3efe16ed4
829	1290697386000000	dread	Some work towards this in cset:066b1b553595. No exceptions and test skip in place. Looks like formalchemy changed its interface.
829	1303118864000000	thejimmyg	Is this still relevant?
829	1303122056000000	dread	Rufus originally specified it. Reassigning to him to decide whether we still want it or not.
829	1303838115000000	rgrp	This is a wontfix for the present.
830	1311180263000000	thejimmyg	We can now implement themes via extensions or change them via config options. See https://bitbucket.org/okfn/ckanext-exampletheme/ for an example.
831	1290760864000000	rgrp	Done over the last week (finally fixed weird trac no __dict__ bug today and enabled user accounts on wednesday).
832	1296334980000000	rgrp	Done (~4w ago). See https://bitbucket.org/okfn/ckanext-stats and remove from core cset:311313e4afdb.
833	1295263447000000	rgrp	Have repo https://bitbucket.org/okfn/ckanext-admin
833	1298889104000000	rgrp	In progress now (sysadmin view and update nearly done).
833	1302276855000000	rgrp	Authz subsystem complete.
833	1303236364000000	rgrp	Two main tickets done so closing.
834	1291633657000000	rgrp	"Alexander: Documentation is here: http://packages.python.org/ckan/api/version2.html#search-api

Those queries should work but I do suggest you use the stable version of CKAN which is v1.2 and we suggest you use that. If you still have problems please reopen. "
835	1291644820000000	pudo	done in cset:d41b77099954
836	1291851041000000	rgrp	Fixed in cset:2f6d54341b47 and branch feature-286-siteurl
836	1302882808000000	dread	This has been a (minor) issue since release v1.3
838	1291299716000000	memespring	Package page redesign: http://ckan.org/ticket/839
838	1291636351000000	memespring	Merge css files http://ckan.org/ticket/846
838	1291721955000000	memespring	Show welcome message: http://ckan.org/ticket/850
838	1291729819000000	memespring	Prompt users to enter missing info - http://ckan.org/ticket/863
838	1291736461000000	memespring	Search results changes: http://ckan.org/ticket/864
838	1291812318000000	memespring	Add download formats to search results (http://ckan.org/ticket/866)
838	1295259773000000	rgrp	I'm going to close this ticket as almost everything done and remaining ticket can be done on its own.
839	1291736541000000	memespring	Done with the exception of the discuss/comments page. Plugin won't install on my setup. Fredrich looking into it.
840	1291325251000000	dread	"dread:

] That's the proxy_cache decorator which sets a Beaker expiry time only.
] Whether that is on or off, you still end up run the
] ""etag_cache(cache_key)"" command in the package controller won't you?
] And won't that will either insert the Etags header or abort 304 for a
] repeat? I must admit I've not tried it, asking purely with the code in
] front of me and welcome you pointing out where I've gone wrong.

ww:

Right. So those etag calls predate the cache decorators and should
probably be either moved up into the decorator (e.g. use @ckan_cache
instead of @proxy_cache) or wrapped in a check for the config
parameter. (And @ckan_cache could be changed to use pylons' etag_cache
function rather than just setting the header...)"
840	1302694123000000	dread	Basic on/off switch added, tested & documented in cset:0da189c9630e on default.
841	1300364333000000	thejimmyg	See #995
842	1296468313000000	rgrp	Change to awaitingtriage as definitely not critical.
842	1303474131000000	thejimmyg	"As a user I come to a package:

   Have a todo count at that top that takes you down to the todo list (which may say nothing todo)

   At the bottom is a section of the package display titled ""ToDo"" where I see a list of all toDos for the package most recent at the top

  If I am logged in 

       see a form for ""Add to do"" at the top of the todo section and can add one straight away

       I see a ""now resolved"" button next to each which goes green when you hover.

       When clicked the todo fades away.

  Otherwise I see a button that says ""login to add todo""

      expands out the form

  The form

      One of the fields is category -> autocomplete the category (not constrained)

      Add a description

      Submit, the todo gets added via AJAX to the list at the top as the most recent todo

Model:

todo
  id
  package_id
  todo_category_id (required)
  description (required)
  date=NOW()
  resolved=False

todo_category
  id
  name

Prepopulate with: broken-resource-link, no-author, bad-format


"
842	1303474228000000	thejimmyg	"
>   Otherwise I see a button that says ""login to add todo""
> 
>       expands out the form
> 

Actually rather than expanding the form, you will go away to the login page and come back to see the expanded form (question: how does this redirect you back to the bottom?)"
843	1291652696000000	pudo	The real name is also requested via AX/SReg extensions in OpenID so for new users who are not using google, this should usually be filled in automatically. 
843	1319710380000000	dread	" * ""we should show the openid as well to distinguish between users with the same name."" - when ""Full name"" is not distinguishable, maybe best to display the unique 'name' field as a hover-over.

* ""on account creation, the user should be redirected to their personal details page to encourage them to fill in a human readable name."" - yes you always got take to the personal details page. We should use a flash message at this point if they have not filled in the ""Full name"" field to suggest they click edit and do this.

 * ""List is to long"" - this has been addressed - see http://thedatahub.org/user"
843	1319721601000000	dread	"Ok I misunderstood this ticket. This is referring to adding a user in e.g. http://thedatahub.org/group/authz/energy-data

This UI seems to be updated. You start typing the name, full name or open id of the person and it has a dropdown that autocompletes. This seems to be sufficient for Will's points 1 and 3.

Would be still good to have a flash message on account creation to encourage people to add personal their Full name. This is similar to #1413 so I'll close this ticket and add it there."
844	1296340486000000	rgrp	Looking at DNS this apparently has been fixed.
845	1291723492000000	dread	This was completed on the feature-845-required-fields branch and merged into default in cset:3b5635ffaa7d
846	1291715212000000	rgrp	Reopening and fix used illegal css ;) -- it is illegal to have an @import statement (as we do with extras.css) after normal css statements. We therefore need to move the core css back out into a ckan.css (or similar file).
846	1291719074000000	memespring	It's been done on a branch and pushed to bitbucket: http://bitbucket.org/memespring/ckan/src/9e74c40ff073/ckan/public/css/style.css
847	1291639903000000	rgrp	Done my best to pull all the solr related tickets and work together in one place.
847	1292844627000000	rgrp	Still have ticket:669 and ticket:874 to do (431 probably won't be done for a while).
847	1295259902000000	pudo	This is now functional, minus the index testing tool.
849	1291715179000000	pudo	 == #846 
851	1292860957000000	wwaites	" * link checker above uses the queue. queue not running generally
 * quickest way forward is just to put the curate tool in a cron job and make a suitable rule. shall do this soonest"
851	1292892515000000	wwaites	"Ready to put into cron job. cf:

  * http://groups.google.com/group/fuxi-discussion/browse_thread/thread/47f131fc2e3817e3 (Actions)
  * http://groups.google.com/group/fuxi-discussion/browse_thread/thread/bf955620a6ae77d8 (denoted/calculated functions)
  * http://groups.google.com/group/fuxi-discussion/browse_thread/thread/71a94191e9fef384 (FuXi 1.2)
  * https://github.com/wwaites/curate/commit/042a96c1589c0fa4980aca733c64c080e02f111e (curate tool update)"
851	1292894661000000	wwaites	currently running against ckan.net, adding broken_link tag if a broken link is found. perhaps something more elaborate should be done? works for now anyhow...
851	1292941303000000	wwaites	"urllib2 is good for http(s) urls but not, unfortunately, for other types most prominently ftp.

change the httpReq action to use http://curl.haxx.se/libcurl/python/"
851	1293025112000000	wwaites	"Implemented curlReq that does a curl request and returns statements 
similar to or analogous to httpReq. Require curate<=0.8

This in a cron job is sufficient to go through all the packages and update
them with a broken link tag now:

{{{
curate -r https://github.com/wwaites/curate/raw/master/examples/tagging.n3 -s -k API_KEY  
}}}"
852	1291723207000000	wwaites	plugin documentation: http://packages.python.org/ckan/plugins.html
852	1295259620000000	rgrp	Removing from sprint and moving to release as a master ticket.
852	1315821628000000	rgrp	Moved dataset archiving into new ticket #1327 and this is therefore now done.
853	1291723143000000	wwaites	done in http://bitbucket.org/ww/ofs need to merge back into main ofs repo
853	1294047550000000	pudo	"Looking at the changeset this cannot be functional yet: where is the implementation of the policy document exchange. It seems to me like this is currently adding the actual credentials to the request (self.ofs.conn.add_aws_auth_header(headers, 'PUT', path)). 

c.f.: 

* http://doc.s3.amazonaws.com/proposals/post.html#Form_Fields
* http://code.google.com/apis/storage/docs/reference-methods.html#postobject 
"
853	1294594581000000	wwaites	"we don't need a policy document exchange. it's simpler than that. the ""server"" instance has already permissions to upload. it just calculates the headers and such that are needed (based on the ""client""'s initial headers) and gives them to the ""client"" the client then uploads without knowing the ""server""'s credentials. The ""client"" never needs any of its own goostor credentials at all.

the only separate step is to make the widget readable by the world.

ticket #879 is to expose this as a small set of API calls."
854	1304351843000000	johnlawrenceaspden	"Coverage now up to 84% and 81%. Remaining untested code is error conditions, which we decided weren't worth the effort of locking down.

fixed on feature-854-tests-for-authz-groups, now merged into default code."
855	1311176988000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our new ticketing policy. The auth code is in the process of a major refactor anyway.
856	1311177066000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our new ticketing policy. We know that test coverage needs to be improved, particularly in the logic layer.
857	1311177075000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our new ticketing policy. We know that test coverage needs to be improved, particularly in the logic layer.
858	1291734297000000	dread	On branch feature-858-diff removed ckan.lib.diff as it was not being used. Merged into default in cset:f9ba1ae63ddd
859	1311177461000000	thejimmyg	This ticket is more than 6 months old so closing it in line with our new ticketing policy. We know that test coverage needs to be improved, particularly in the logic layer.
860	1291726067000000	wwaites	http://bitbucket.org/ww/ckanrdf/changeset/67df6dc33ec4
861	1311168845000000	thejimmyg	This ticket has been open for than 6 months so I'm closing it.
862	1291726261000000	wwaites	not to mention sparql endpoint...
863	1295259827000000	rgrp	Removing milestone as not certain when we'll do this.
863	1338206455000000	ross	UI has changed rather a lot in last 18 months, so I killing this bug.
864	1291741028000000	memespring	Havent implemented all text changes because worried about impact on other themes.
865	1294414639000000	thejimmyg	Isn't this in there now? Can we close? Thanks
865	1295259773000000	pudo	This has been fixed on the respective branch and merged into default..
867	1291916278000000	dread	Done in ckanclient cset:d40fb101aba9
867	1292410515000000	dread	Also ckan cset:c5b018bfe9bb
867	1299866685000000	rgrp	This was a breaking change for loaders code. Obviously we don't have tests for that so would not have been noticed ... Fixed in cset:af81e54bd590/ckanclient
868	1292890251000000	kindly@gmail.com	"Below is a patch to make the tests run at least 2.5 times faster (about 15 mins on my old laptop).  Instead of dropping the tables each time, it just deletes everything in them, using a low level connection.  All the tests pass this way. It's a surprisingly clean patch.  Here are a few points concerning it.

 * I tested truncating the tables but it's slower. If there are any big tables in the tests this way is the fastest (faster than drop).
 * The sequences (id columns) will start from where they left off.
 * I also investigated making postgres template database and cloning it, but the complication was not worth it. 
 * sqlalchemy iterates the tables in reverse dependency order, which make this possible.
 * I targeted rebuild_db as that what most of the tests I saw where using, however I have not checked all tests to see if they all are. 
 * There is a slight hack on the repo object to make sure it knows that ""clean_db"" is coming from the tests.
 * I refactored init_db for code reuse.
 * I have not done a version check. sqlalchemy >= 0.5 do this in a different way as outlined in the comments.


{{{
diff -r 7f2239b0f743 ckan/model/__init__.py
--- a/ckan/model/__init__.py	Fri Dec 17 10:34:47 2010 +0000
+++ b/ckan/model/__init__.py	Mon Dec 20 23:25:04 2010 +0000
@@ -41,6 +41,9 @@
 
     def init_db(self):
         super(Repository, self).init_db()
+        self.add_initial_data()
+
+    def add_initial_data(self):
         # assume if this exists everything else does too
         if not User.by_name(PSEUDO_USER__VISITOR):
             visitor = User(name=PSEUDO_USER__VISITOR)
@@ -69,6 +72,26 @@
         import migrate.versioning.api as mig
         version = mig.version(self.migrate_repository)
         return version
+    
+    def clean_db(self):
+        # delete only added for tests
+        if hasattr(self, ""delete_only"") and self.delete_only:
+            self.delete_all()
+        else:
+            super(Repository, self).clean_db()
+    
+    def delete_all(self):
+        
+        self.session.remove()
+        ## use raw connection for performance
+        connection = self.session.connection()
+        ## sqla sorts in reverse dependancy order.
+        ## in >= 0.5 use reversed(metadata.sorted_tables()) instead of table_iterator
+        for table in self.metadata.table_iterator():
+            connection.execute('delete from ""%s""' % table.name)
+        self.session.commit()
+
+        self.add_initial_data()
 
     def setup_migration_version_control(self, version=None):
         import migrate.versioning.exceptions
diff -r 7f2239b0f743 ckan/tests/__init__.py
--- a/ckan/tests/__init__.py	Fri Dec 17 10:34:47 2010 +0000
+++ b/ckan/tests/__init__.py	Mon Dec 20 23:25:04 2010 +0000
@@ -55,6 +55,7 @@
 
 import ckan.model as model
 model.repo.rebuild_db()
+model.repo.delete_only = True
 
 class BaseCase(object):
}}}

 
"
868	1292921428000000	sebbacon	"See also #867

Thanks for the patch."
868	1292921456000000	sebbacon	I mean #876, of course.
868	1293401808000000	anonymous	Attached are the timings I have for the tests after I upgraded to 0.57 and after a few simple test tweaks.  They do not include setup and teardown time at the class level as they are not assignable to individual tests.
868	1294753596000000	dread	"I've merged in David Raznick's patches:
 * no_autoflush_deletes.diff cset:2b9591172182
 * postgres_speed.diff cset:fa1b7e3a4e0f
 * vdm_purge_no_autoflush.diff vdm cset 8accdd0b9b7f

I've also merged in Seb's fork: cset:68d63fda4814 which closes this ticket, achieving test speeds of under 3 minutes!"
869	1292059662000000	rgrp	Closed by cset:83734b5e251c which implements an IConfigurer interface.
870	1294862485000000	kindly@gmail.com	"A patch is available here.

https://bitbucket.org/kindly/ckan/changeset/9a1d6f55587b"
870	1294914243000000	anonymous	Merged into default in cset:54ae110094be
871	1292322361000000	wwaites	"Regarding rkhunter -- yes, eu1 appears to be clean

Regarding the upgrade -- upgradede to 4.72 from backports which, looking more closely, appears to still have the privilege escalation bug but not the remote root exploit.

Regarding exim on other hosts, there is no reason for them to be running a full mta, something like ssmtp should suffice.

Also very worth the thought of moving to postfix. It's much easier to configure and I haven't known it to have any comparable bugs in the decade or so I've been running it. In fact I've never seen anyone actually use exim before..."
871	1292323656000000	nils.toedtmann	"Re postfix: I second ww. I like to run some super simple local MTA (e.g. ""nullmailer"") on all but one server, using a central postfix (or a send-only GMail account) as smarthost. Am happy with postfix for >10years, it's straightforward and rock solid.
"
871	1296340558000000	rgrp	This is not a ckan issue. should have been on http://knowledgeforge.net/okfn/tasks
872	1292957110000000	dread	Done in ckanext cset:8a7e931ef37c
873	1292939274000000	dread	Fixed in dgu cset:8bfb867e247a and ckanext cset:fabd31544a73
875	1297085261000000	pudo	So far opting for route 1) (not implementing facets), therefore this can be closed! 
876	1292891133000000	kindly@gmail.com	"I have looked into this already so I can give you a head start.  I am working on a project that uses many backends so I have some experience. So here is what I have found so far. 

== nested transactions ==

VDM does not support sqlite, as it uses nested transactions.  I do not think vdm needs nested transactions. It can use a flush instead.  Here is the patch that works. All vdm tests pass.

{{{
--- a/vdm/sqlalchemy/base.py	Sat Sep 11 23:06:26 2010 +0000
+++ b/vdm/sqlalchemy/base.py	Mon Dec 20 16:16:34 2010 +0000
@@ -40,9 +40,8 @@
         self.setattr(session, 'HEAD', True)
         self.setattr(session, 'revision', revision)
         if revision.id is None:
-            session.begin_nested()
             session.add(revision)
-            session.commit()
+            session.flush()
}}}

== indexes ==

The index file 021_postgres_upgrade.sql in the migrate repository will not run as it uses syntax particular to postgres. Another will need to be made thats similar. sqlite does not support complex indexes like upper(text), so a work around will need to be found.

== unicode ==

The harvesting returns utf8 encoded strings and pysqlite dbapi only supports python unicode objects (as far as I can tell).  There will need to be a process in converting all strings that get into the database with string.decode(""utf8"")

== dates ==

Have not looked into this one too much. However, as sqlite stores everything as strings the timestamps appear to be failing on conversion back into python.

I have solved the above two issues before by adding attribute extensions to sqlalchemy mappers to do the conversions without effecting too much code.

== in memory sqlite ==

Some tests need to change in order to make sure the database is created first because the database gets lost each time.  In the tests that I have made pass, they run in about a seventh of the time as they do on postgres. 

== Other things to keep in mind. ==

 * Need a new flag in test.ini to remove full text indexing completely, or always use it with solr.
 * There are enough incompatibilities between the databases that you would also want to test against postgres as well, at least before a release.  
 * I would probably upgrade sqlalchemy first, so you will not have to the changes twice. The new versions are significantly faster too.
 * I have submitted a patch to #868 that makes the tests run about 2.5 times as fast and I think there are more low hanging fruit if the aim is test speed. 

"
876	1292924064000000	sebbacon	"Thanks for the info!

Re. nested transactions.  I am getting repeated non-deterministic test failures against sqlite (and indeed postgres, but these failures appear more frequent against sqlite).  One of them I seemed to be able to get rid of by eliminating the savepoint as per your first point.  However, it appears that sqlite [http://www.sqlite.org/lang_savepoint.html does] support savepoints; to demonstrate it, the following test code appears to work in the latest sqlalchemy:

{{{
#!python
from sqlalchemy import *
from sqlalchemy.orm import *

db = create_engine('sqlite:///')

metadata = MetaData(db)

users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('name', String(40)),)
users.create()

class User(object):
    pass

usermapper = mapper(User, users)

Session = sessionmaker()
session = Session()

fred = User()
fred.name = ""Fred""

sue = User()
sue.name = ""Sue""

amy = User()
amy.name = ""Amy""

session.add(fred)
session.add(amy)
session.begin_nested()
session.add(sue)
session.rollback()
session.commit()
assert session.query(User).count() == 2
print ""OK""

}}}

So, while I agree they're not needed, I'm not sure they're a problem.  What do you think?  Also, have you seen non-deterministic test errors like this?"
876	1292939711000000	kindly@gmail.com	"I have read quite a lot of people having problems with savepoints with sqlite and thought they were not supported on sqlalchemy.  They are at least not consistant with postgres ones.  I may well be out of date on this.  
Here is an [http://groups.google.com/group/sqlalchemy/browse_thread/thread/dc9d1b61044bf730/65a62a33ec313842?lnk=gst&q=no+such+savepoint#65a62a33ec313842 example] even though its a bit old. 

I did get some non deterninistic errors, the above seemed to fix them. A failed subtransaction is not handled well by sqlalchemy and I think this causes knockon effects due to the unresolved transaction.  I would stay well clear of them entirely if possible.

What are the errors you are getting??


My 2 cents. ignore me at will...

I would think about using a different backend for testing than production. [http://stackoverflow.com/questions/2716847/sqlalchemy-sqlite-for-testing-and-postgresql-for-development-how-to-port look here].
If you want to support both then you should test on both. 
There are simple ways to scrape a few more minutes off the tests.  If you want real speed, then a multiprocess solution (with a database per core) would be sensible if a bit tricky.

"
876	1293188088000000	anonymous	"Thanks for your feedback, very useful.  

I don't really agree with the people in the linked discussion who say it's pointless testing against a different database from production.

The goal here is to make it easy enough for people to run as many tests as possible that they actually do so.  Even 15 minutes is too long in that case.  With sqlite we can get it in at under 5 minutes.  I would also like to identify the longest running tests (which I would characterise as ""functional"" or ""integration"" tests and make them run as a separate suite, and then encourage a culture of writing true unit tests before functional tests, so that running unit tests can happen in 1 minute and be part of the regular development cycle.

That's no replacement for also running *all* tests periodically, and also running tests under postgres, which we can continue to do on the continuous integration server.  

Longer term I agree that it would be better to run local tests against postgres too, but that will I think involve refactoring many of the tests."
876	1293218714000000	anonymous	"I agree with all your points about testing apart form using sqlite, especially splitting out the functional tests and continuous integration.

> Longer term I agree that it would be better to run local tests against postgres too, but that will I think involve refactoring many of the tests. 

Well there are two options

 1. refactor the tests
 2. refactor the code to use sqlite and postress

It is a value judgment as to which is more complicated. I personally think 2 is more complicated but may be wrong on that. The real danger with 2 is that you are needlessly adding complication to production code, with 1 you are only changing the tests.

Upgrading to sqlalchemy 0.5+ should happen first regardless.  You will need upto date documentation. 

There is another option too.  Put the postgres data directory on tempfs/ramfs and turn off durability [http://www.postgresql.org/docs/9.0/static/non-durability.html here].  We would need a way to db init before the tests where run (or) at boot). This may be the best of both worlds.

Anyway Happy xmas!!



 
"
876	1294753889000000	dread	Seb and David have completed this I believe. I've merged the changes into core CKAN in cset:68d63fda4814.
877	1297680579000000	rgrp	Basic pass on an implementation (no permissions yet etc): https://bitbucket.org/okfn/ckanext-upload/changeset/9ae543f0645f
877	1298624165000000	rgrp	"Various tidying in https://bitbucket.org/okfn/ckanext-upload/changeset/0fad7aa7aa97 (success messages, permissions on uploaded file - public-read) and completed permissions in https://bitbucket.org/okfn/ckanext-upload/changeset/a83ce00a1266.

Still need to integrate into general workflow (e.g. create a Resource on successful upload) but that is a separate item so this ticket is now done."
878	1314404621000000	rgrp	A working version of this in ckanjs as of 2 weeks ago. Need to integrate into main CKAN.
878	1315820838000000	rgrp	This is now done in feature-1294-ux-improvements-dataset. see e.g. cset:c6f7f5018b4f
879	1294604066000000	wwaites	first cut: https://bitbucket.org/ww/ckanext-storage/src
880	1292945137000000	dread	Fixed in ckanclient cset:e7c0af586367 and ckanext cset:82d974ab6860 with test in dgu cset:c0b2c5fd95ea
881	1294410574000000	thejimmyg	"Hello fccoelho,

Could you please post the output you get from running pip?

Thanks,

James
"
881	1296335072000000	rgrp	Closing due to lack of clarification.
883	1300196622000000	thejimmyg	Now complete.
884	1293319984000000	wwaites	"Implemented in feature-884-rmsource branch at https://bitbucket.org/ww/ckan/changeset/50cbfc5a6bee
"
884	1294247654000000	thejimmyg	Related to ticket #665, reopening so that I can close it once I've got it working with Drupal too.
884	1294253563000000	wwaites	see feature-884-rmsource in the main ckan repo deleting my own repo
884	1296592140000000	thejimmyg	OK, I've implemented an API call for this too now and all is merged into default.
885	1293278564000000	wwaites	Friedrich had some mixed experiences with owslib and some German CSW endpoints: http://pudo.okfnpad.org/geodaten
885	1293314219000000	wwaites	"See: https://bitbucket.org/ww/ckanext-ows

impossible as of yet to test against live server from the OS "
885	1294253497000000	wwaites	done with feature-885-owslib
886	1294916538000000	dread	Being done as part of DGU ticket: https://trac.dataco.coi.gov.uk/projects/datagov/ticket/757
887	1300196600000000	thejimmyg	"This is done. See https://bitbucket.org/okfn/ckanext-harvest

At the moment we are not adding migrations to remove the harvesting tables. We are designing a harvesting refactor and will write migrations once the refactor is complete so that instances that use harvesting get upgraded, and those that don't get their harvesting tables removed.

Also, see this #1030 for the moving harvesting out of the REST API.

"
888	1294830297000000	Stiivi	"Chages to Data Proxy:
* tests added with configurable list of known URLs

* use brewery for transformations (included reference to brewery framework in a new vendor directory)
* side effect: code to make google find external packages in vendor directory (from now on, all external packages should go there and be referenced from .hgsub if they are mercurial repositories)

* changed response contents: moved from 'headers' to root, renamed 'response' to 'data', added field list as 'fields'
* changed way of registering transformers (now class object is used instead of name)
* added 'encoding' and 'dialect' parameters for CSV
* added optional data audit (parameter 'audit')

Changes: https://bitbucket.org/Stiivi/dataproxy/changeset/fccbdd275be5

Data information: http://databrewery.org/doc/data_quality.html#brewery.dq.FieldStatistics

"
888	1307352537000000	thejimmyg	I don't think any progress has been made on this for a bit so I'm assigning it to me.
888	1311773103000000	johnglover	"Dataproxy / Dataapi now deprecated in favour of the combination of new QA archive / process commands and the webstore.

Changes in relation to Dataproxy / Dataapi:
* Currently only supports CSV files, but plans to add support for excel and google docs spreadsheets soon.
* Uses David Raznick's CSV parser instead of Brewery for parsing, handles messy CSV data better.

Changes in relation to old QA functionality:
* decoupled archiving (downloading) and QA process
* added a new 'process' command which parses downloaded files and adds them to a local webstore

Closing for now, any improvements/feature requests should be in tickets relating to either the QA functionality or the webstore."
889	1293715109000000	rgrp	Done in cset:cdbb2e6128b3 (had added item to template earlier pulling from 'g' object but had not tied that up to config as yet). Also added test and also '''removed existing google analytics code''' -- so need to explicitly set this in config from now on.
890	1318529648000000	rgrp	May want to close as invalid as obsoleted by more recent queue work.
890	1318599247000000	kindly	Invalid due to #1397, We will be using celery instead.
891	1318602128000000	rgrp	May only do link-checker and not do full storage in this sprint.
891	1320143424000000	johnglover	"Almost finished (see http://github.com/okfn/ckanext-archiver).

Still to address:
- check headers to see if hash / cache / max-age / expires indicates that the resource does not need to be downloaded.
- add cache url to resource"
891	1320149841000000	johnglover	"Added cache_url and cache_last_updated to resources after archiving.

Not checking for hash value in headers. This process will generally only run when a new resource is added or someone updates a URL, so we don't expect to be regularly downloading the same resource. 

We will need something along these lines if this is running as a regular cron job, but in that case the logic will be added to the cron job itself (probably a paster command)."
892	1324314636000000	rgrp	Moved to v1.6.
892	1324402480000000	johnglover	"https://github.com/okfn/ckan/compare/bff538b%5E...d700680

Merged with master and deployed on test.ckan.org"
893	1298293527000000	thejimmyg	We don't understand the use case for this requirement. Closing for now until a use case can be demonstrated.
894	1300196388000000	thejimmyg	All test CSWs have been successfully harvested from. CSW harvesting is disabled on that source so we can't harvest from it. I don't think we need a ticket for this now do we?
896	1300217375000000	thejimmyg	"Actually, I think this should be implemented instead by considering a different CKAN instance as a potential harvest source and then harvesting from it. By thinking of it this way in the first instance, we effectively get a read-only copy of other data in CKAN but one which will be kept up to date.

Marking as duplicate. Discussion can now carry on via #987 Common harvesting framework."
897	1294914333000000	dread	Same as #870
898	1294659537000000	dread	From David Raznick
898	1294662408000000	dread	Merged in cset:89bf917f9b46
899	1294662417000000	dread	Merged in cset:89bf917f9b46
900	1294662424000000	dread	Merged in cset:89bf917f9b46
901	1294662466000000	dread	Merged in cset:b8a649f51cab from Seb's changes.
902	1296638257000000	rgrp	"Also confirmed in FF. David (R) and I have both had a go and fixing this and it seems to be a bit tricky (very odd css behaviour!).

Rather than directly fix this I'm thinking of doing a bit of rework of that set of menu tabs as they could be much nicer anyway and hence re-titling of this ticket."
902	1297078885000000	rgrp	Fixed in cset:42102bf7f922 and cset:42102bf7f922 by switching to a new 'tabs' look that has none of these issues. (See branch feature-902-submenu).
903	1295265645000000	pudo	This is now partially solved by filtering for deleted packages. As two further measures, we should also add a package deletion method to the Solr backend and skip deleted packages when indexing. 
903	1296588070000000	pudo	fixed in https://bitbucket.org/okfn/ckanext-solr/changeset/be4cffa9b987
904	1299840539000000	rgrp	We're already now into improving the docs and ticket:927 is now reasonably detailed.
905	1328638536000000	dread	"This works with the current SOLR search.

e.g. http://thedatahub.org/dataset?q=gr%C3%B6%C3%9Ften"
906	1324299793000000	rgrp	Do we need to change in core code or just configure solr?
906	1328639465000000	dread	"This was done in #1701 but only in a custom SOLR schema in the ecportal extension: https://github.com/okfn/ckanext-ecportal/commit/6682926d8895f146cdf1e52ab4fbead9b065af77

Can the ASCIIFoldingFilterFactory be added to core CKAN's SOLR schema for all CKAN users to benefit from?"
906	1328782087000000	amercader	Yes, I don't think there will be any problem, and we won't need to create a new version of the schema as the change is backwards compatible.
907	1296335337000000	rgrp	"Basic implementation done and deployed. However plenty to improve, e.g.

 * Support more formats (use external systems for preview?)
  * json (!)
  * html (trivial!)
  * sparql
  * ...
 * Do not display preview if no preview
"
907	1297072303000000	rgrp	Closing this now and improvements can go in a new ticket.
908	1296403695000000	wwaites	"see also from http://knowledgeforge.net/okfn/tasks/ticket/485

{{{
(pyenv)okfn@eu7:~/var/srvc/ckan.net$ sudo uwsgi -C -iH /home/okfn/var/srvc/ckan.net/pyenv --paste config:ckan.net.ini --uid www-data -s 10.48.162.201:9001
*** Starting uWSGI 0.9.6.6 (32bit) on [Sun Jan 30 16:00:13 2011] ***
compiled with version: 4.4.3
Python version: 2.6.5 (r265:79063, Apr 16 2010, 13:28:26)
[GCC 4.4.3]
uWSGI running as root, you can use --uid/--gid/--chroot options
setuid() to 33
 *** WARNING: you are running uWSGI without its master process manager ***
your memory page size is 4096 bytes
allocated 412 bytes (0 KB) for 1 request's buffer.
Setting PythonHome to /home/okfn/var/srvc/ckan.net/pyenv...
binding on TCP port: 9001
your server socket listen backlog is limited to 64 connections
initializing hooks...done.
Loading paste environment: config:ckan.net.ini
Traceback (most recent call last):
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/paste/deploy/__init__.py"", line 3, in <module>
    from loadwsgi import *
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/paste/deploy/loadwsgi.py"", line 8, in <module>
    import pkg_resources
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 2691, in <module>
    add_activation_listener(lambda dist: dist.activate())
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 668, in subscribe
    callback(dist)
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 2691, in <lambda>
    add_activation_listener(lambda dist: dist.activate())
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 2195, in activate
    map(declare_namespace, self._get_metadata('namespace_packages.txt'))
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 1790, in declare_namespace
    _handle_ns(packageName, path_item)
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pkg_resources.py"", line 1761, in _handle_ns
    loader.load_module(packageName); module.__path__ = path
  File ""/usr/lib/python2.6/pkgutil.py"", line 238, in load_module
    mod = imp.load_module(fullname, self.file, self.filename, self.etc)
  File ""/home/okfn/var/srvc/ckan.net/pyenv/src/ckanext-dataapi/ckanext/dataapi/__init__.py"", line 36, in <module>    from pylons import config
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pylons/__init__.py"", line 4, in <module>
    from pylons.config import config
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pylons/config.py"", line 2, in <module>
    from pylons.configuration import *
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pylons/configuration.py"", line 25, in <module>
    import pylons.legacy
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pylons/legacy.py"", line 11, in <module>
    from pylons.util import deprecated, func_move
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/pylons/util.py"", line 18, in <module>
    from paste.script.appinstall import Installer
  File ""/home/okfn/var/srvc/ckan.net/pyenv/lib/python2.6/site-packages/paste/script/appinstall.py"", line 23, in <module>
    from paste.deploy import appconfig
ImportError: cannot import name appconfig
}}}"
908	1296659056000000	pudo	fixed in https://bitbucket.org/okfn/ckan/changeset/08c0e1a819e4 and https://bitbucket.org/okfn/ckanext-stats/changeset/6e86c071db99
908	1296660052000000	wwaites	"Not fixed. Try running with:

{{{
uwsgi -C -iH /path/to/your/pyenv --paste config:ckan.net.ini -s 127.0.0.1:9000
}}}

Still get giant traceback relating to a circular import centered on an arbitrary plugin"
908	1296730578000000	pudo	I've moved the uswgi/nginx part to #952, closing this issue since the problem it describes has been fixed. 
909	1346669602000000	ross	Backlog until funded.
910	1310128544000000	thejimmyg	Not enough information and over 6 months old so closing.
911	1296467375000000	pudo	Done. 
912	1306774876000000	pudo	moving to ckan 
913	1299841413000000	rgrp	If at all possible this should uris from the OKF licenses registry at http://licenses.opendefinition.org/
913	1306774962000000	pudo	moving to CKAN, still need a resolver
915	1296467518000000	pudo	Live and running :-) 
916	1297066902000000	rgrp	Moved to https://bitbucket.org/okfn/vdm/issue/4/port-new-vdm-to-mongodb
917	1295280232000000	dread	Fixed in cset:f2865f43d8ee
918	1315911507000000	dread	Preview feature is now deprecated
919	1303202627000000	dread	Simple to fix this in the process of fixing #108. Fix went in cset:304d30d85816 for release 1.3.4.
920	1295355318000000	hellmann@informatik.uni-leipzig.de	my first email address was wrong... 
920	1300217199000000	thejimmyg	@David Should we implement this as a change to the way tags work or via a tidy up cron job?
920	1300319140000000	kindly	"The only issue here is that we are listing tags that relate to 'inactive' packages. We are already not listing tags that relate to NO packages.

I have fixed this. 

cset:cd0347eed69f

The tag in the example is related to a deleted package so should not be deleted.  With this patch it no longer gets displayed."
921	1300197629000000	thejimmyg	Seb started this, I completed it and the code is now live. Further refactoring will be done first in #1037 and then in #987.
922	1310128789000000	thejimmyg	"See also #358 which I'm closing because it gets merged into this ticket.

The reason we were blockd on #358 was to do with issues around authorization."
922	1320664187000000	rgrp	Duplicate of #1032 (I think)
925	1323168588000000	thejimmyg	This is fixed in CKAN 1.5
926	1296637927000000	rgrp	"Comments from RP - http://lists.okfn.org/pipermail/ckan-dev/2011-January/000181.html

Libraries I have used: FormEncode, FormAlchemy (what we are currently
using, before that formencode).

Neither seemed perfect but I think the form issue is a 'hard' problem
(perhaps with no perfect answer) [1]. FormAlchemy, in retrospect, was
probably a mistake as it merges too much model/validation/form
generation into one thing.

At least 3 functions involved:

 1. Generating (or just filling) a form template with 'form data' (and errors)
 2. Converting model data to form data (also happens for APIs in fact) -- let's call this 'dict-ization'
 3. Converting form data to model data (and validating) (inverse of
previous step)

I think one can and should separate 1 from 2+3 (and one of problems
with formalchemy is it doesn't -- the attraction being you don't
repeat yourself as forms get generated from model but I think this is
actually a false economy in medium-term).

I'm not specifically recommending the following as I haven't used them
but I've looked through docs, they are active and reasonably mature:

1. Flatland: http://discorporate.us/projects/flatland/docs/tip/
  * Only does 2+3 which is a good thing IMO

2. WTForms: http://wtforms.simplecodes.com/
  * Used in standard flask docs: <http://flask.pocoo.org/docs/patterns/wtforms/>"
926	1298489517000000	rgrp	@Seb: I believe this is now decided following discussion last week. Please could you detail results and close :)
926	1298541597000000	anonymous	"Goals: 

We want the interface for updating an object to be loosely coupled to
 the method for updating it.

We might update a Package from:

 - HTML forms
 - a REST API (using JSON)
 - a CLI (potentially using command line arguments, YaML, XML or ini files)

Right now, data is validated using a form framework, even if we're not
using forms.  Data is written to the object as part of the forms
framework (using the ""sync()"" method), making the process hard to
customise and hard to discover.

Instead, there should be a standard chain for:

 - deserialising untyped data (such as that received from an HTTP POST
   or parsed from a YaML file) into valid data
 - returning structured errors suitable for displaying to the user
 - saving the validated, deserialised data

Ideally, it would look something like:

  schema = MySchemaDefinition()
  raw_data = open(""raw.csv"", ""r"").read()
  structured_data = to_python(raw_data, schema)
  try:
     validated = validate(python_data)
     myobject.update_from_dict(validated)
     return ""Updated OK""
  except ValidationError, e:
     return ""Error: %s"" % e.to_dict()

The inverse would be something like:
 
  structured_data = myobject.render_to_dict()
  raw_data.write(to_csv(structured_data, schema)
  print ""Wrote CSV %s"" % to_logformat(serialized_data, schema)

The question of how to generate and display forms should be completely
decoupled from this.  It should be easy to write forms by hand, which
means it should be simple to flatten the serialized data to key, value
pairs, and match up any validation errors to each key.

Optionally, a form widget generation framework is a nice-to-have, but
not essential, as it is expected that, given enough time, the majority
of forms will require manual coding to accomodate edge conditions.

A form widget generation framework should be reasonably complete if
it's worth trying at all, which means it should support things like:

 - nested fields (at least repeating, multi-value fieldsets)
 - widgets for dates and file uploads
 - internationalisation

...but note I'd settle for *no* widget generation

Components of a serialisation / validation framework:

 - a simple, obvious way to define a schema
 - a lightweight validation implementation
   - simple interface for validators
   - easy to match validation errors to data structure items

Overall, I'd like to see:

 - loose coupling, no framework dependencies
 - maximal test coverage
 - extensive documentation with readily available examples

## Findings

I looked at flatland, formencode, FormAlchemy, formish, WTForms, Django, web2py, deform/colander, formconvert and web.py

 - **web2py** just helps build HTML from python, so isn't what I'm after at all 
 - **web.py** has rudimentary validation which is only aimed at HTML forms and is hence tightly coupled with them. 
 - **Django**'s forms are again tightly coupled to HTML forms (and their generation)
 - **FormAlchemy** similarly couples validation to forms, and is focussed on inferring a schema from a data model SQLAlchemy.  
 - **WTForms** again focuses on Form generation and don't make itx easy to deserialise arbitrary data

This leaves us with Flatland, Formencode, Formish, Colander/Peppercorn/Deform, and FormConvert.

Having reviewed all of these, I rejected Formencode on the basis of its patchy documentation and relatively low unit test coverage.  I also found it mixed concerns a bit much for my taste.

Formish felt similarly sparsely documented.

Of the remainder, I'd be happy using any of them, but opted for Colander in the end as it has the most exhaustive documentation and unit tests and has been used in production for a long time.  FormConvert has a nice design but is a bit of a moving target at the moment -- worth revisiting in the future.
"
927	1299841206000000	rgrp	Major update including notes of what has been done (where not a separate ticket) and addition of a few items.
927	1300105638000000	rgrp	Closing this ticket as #841 is minor. More work on docs can go in new tickets.
928	1297115097000000	rgrp	Fixed in cset::540e8e548d84
928	1297115136000000	rgrp	Forgot to say moved contributors material to http://ckan.org/wiki/Contributors for the time being.
929	1297686088000000	thejimmyg	The licenses service was down, it is back up now. We should be able to cope with this situation better though. Renaming the ticket.
929	1299840884000000	rgrp	I'm closing this ticket as a) most systems should install the licenses package (and hence have the licenses locally) and b) licenses service has now moved to s3 so should be very robust (see ticket:973 and http://knowledgeforge.net/okfn/tasks/ticket/605)
930	1296062391000000	wwaites	"This is for HMG to prove to them that requests are being serviced in a timely manner

 * move this functionality to a plugin
 * make it use rrdtool instead of lots of itty bitty files
"
930	1296070197000000	wwaites	"actually, this is a configuration variable ckan.enable_call_timing

cleaned up the code a bit, make sure this variable unset or set to
false or no and there should be no millions of files

as it is unclear if this is actually used or necessary, not doing
the rrdtool part just yet. if there is call for it, make a new 
ticket for this."
930	1297066292000000	rgrp	Just want to agree with wwaites assessment here. dubious this code is currently useful as a) not used b) (more importantly) probably better ways to achieve this functionality.
931	1298379187000000	dread	This was completed in ckanclient in cset:1bfefd7596d3
932	1296159225000000	dread	"Initial work done on branch: enh_932_sql_migrate_upgrade 

Not working yet - hopefully kindly will be able to help tomorrow."
932	1296496416000000	dread	Completed on branch and merged into default in cset:25c94cdbd283
933	1297348975000000	dread	Done on enh_933_get_rid_self_in_cls_meth and merged into default cset:5750c77e580d ready for ckan 1.4.
934	1323171047000000	thejimmyg	We have other ways of solving this problem now rather than a key value store for plugins. Marking as invalid.
936	1298283172000000	thejimmyg	"Hi Wayne,

I'm assigning this to you but it isn't a priority yet. We'll put it in a sprint when it is time to do it.

Cheers,

James
"
936	1303117147000000	thejimmyg	How is this coming on John?
936	1303838713000000	rgrp	Completed it seems :-) see https://bitbucket.org/okfn/ckanext-follower
937	1296385042000000	sebbacon	"Could consider using third-party analytics tracking here, which will also give referrer etc data for free?

Would probably be bes provided in the form of optional piwik or google analytics integration.  Being able to say in the UI how many downloads there have been would need piwik.
"
937	1297689781000000	sebbacon	"I did a very quick hacky thing at the end of last week on top of the ""insert google analytics code"" extension we discussed, to work out ""most popular packages"" based off data harvested from the Google Analytics API.  Needs making generic, tests etc but could be a starting point:
https://bitbucket.org/sebbacon/ckanext-googleanalytics/src"
937	1297689859000000	sebbacon	(and it would also need some proper caching as the GA API is very slow)
937	1298892547000000	sebbacon	"The current implementation I referenced above will be a good starting point.

Work that remains:

 * Add download click tracking to individual download links (currently we just record page views for packages, not downloads)
 * Somehow cache the download stats against each package (the Google API is very slow); package reddis or sqlite or similar as a local storage for the extension
 * Expose download information in the relevant places in the UI (all users? package owners? where?)

This is about 2 days' work.  Unlikely to get it done in this sprint."
937	1302513831000000	sebbacon	Completed; software at https://bitbucket.org/okfn/ckanext-googleanalytics/src
938	1296753055000000	pudo	fixed in https://bitbucket.org/okfn/ckan/changeset/064d74a1ead8
939	1323171158000000	thejimmyg	"This is now implemented, the notification links to the about page. We might want to update that page with better information, but that would be a different ticket.

"
940	1296656433000000	pudo	"It seems like even with openid.realm set we could only create two ""zones"": *.ckan.net and ckan.net. We do not want *.ckan.net because it interferes with ccCKANs. 

My vote for the moment would be to 303 www.ckan.net to ckan.net. "
940	1296807699000000	rgrp	"I agree with pudo (though it would not be the end of the world if these were treated as the same realm!). I've now created a permanent redirect for www.ckan.net to ckan.net. 

{{{
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www\.ckan\.net$ [NC]
    RewriteRule ^(.*)$ http://ckan.net$1 [R=301,L]
}}}"
940	1297071748000000	rgrp	"Listing as wontfix now since:

 1. Have workaround
 2. Better for most sites to converge on a single domain anyway (for SEO etc) -- via std redirect approach or otherwise
 3. Seems problematic to fix this via openid realm"
941	1297246005000000	thejimmyg	This will be implemented in http://bitbucket.org/okfn/ckanext-community by Wayne.
941	1297689750000000	thejimmyg	"The system will need some way of plugging in the model. See ticket #989 for progress on this.

Other ideas:

* The apps will need an image upload
* We might like a voting system for apps and ideas, potentially that could be re-used later. 

Let's discuss the above ideas after the basic functionality is in place."
941	1298886391000000	wwitzel3	"Continued work on the community plugin. I am still learning the layout of templates and how they work within ckan and getting figuring out Genshi templates so this is where most of the delay has been. I've been able to determine a pretty good plugin layout for extensions that create models.

I am currently focusing on getting the rest of the UI in place and trying to determine the best way to get colander to do the desired validation beyond ensuring the form has all the elements. After todays work, I will push what I've done and I would like to walk through the design with someone at some point."
941	1300295545000000	wwitzel3	"https://bitbucket.org/okfn/ckanext-community/changeset/c26cc663fa00

I need to update the README to explain how to enable Edit and Delete now that I've integrated it with authorization in CKAN."
941	1301909446000000	thejimmyg	See also discussion on #1069 about stub datasets.
941	1310134339000000	thejimmyg	This is now implemented by pudo in publicdata.eu. For the portal case, apps and ideas will come from Drupal so we no longer need this ticket.
942	1296499160000000	pudo	fixed in cset:81a0f5538a5b
943	1297076498000000	rgrp	Done see http://wiki.ckan.net/
944	1298571917000000	pudo	Won't work on this for now - IATI is now running against plain CKAN but this is not deployed. We will continue work on this once IATI requests more functionality and shelf it for now. 
944	1306774766000000	pudo	done at iati.ckan.net
945	1301909147000000	dread	Moving super ticket to 1.4 milestone
945	1325259350000000	rgrp	Closing as all subcomponents now done. (parts of this duplicate the other super ticket #1032). Also move to ckan-v1.6 as that is when last parts were done.
946	1296833368000000	dread	Fixed in cset:a30c31b9009d
947	1314031310000000	dread	This was done in #1025 through configuration. Happily you can setup config in an extension, so covers this ticket's aims too.
948	1300271009000000	sebbacon	"I would propose a ""trash can"" model: a ""deleted items"" area where only deleted items can be viewed / searched.  Deleted items should not appear anywhere else, but we could include a ""also search deleted items"" option in the search for admins.  (In which case, deleted items should have a ""div class='deleted'"" or similar so they can be highlighted with CSS)."
948	1300271100000000	dread	This sounds like a good solution to me. This should include not just packages, but groups and all other stateful objects.
948	1300271268000000	dread	"There's also the API to consider. 

One edge case to consider too - currently we don't allow reuse of the name of a deleted package, which is confusing. The deleted package should be moved aside (renamed), unless the deleted package is entirely the same as the new or renamed package."
948	1300385979000000	sebbacon	Emptying the trashcan (which would amount to purging deleted objects) would probably be a function of the administrative dashboard #833
948	1300728602000000	dread	"We have a use case now for DGU where if a user requests a deleted package, he is 302 redirected to another package (specified in the deleted package's extras). This is for the API, but could also be done in the Web UI if deleted packages are hidden away in a trashcan. But this suggests we need a trashcan in the API too. 

i.e we should keep the data model really synchronised between the Web UI and API, (even if they are becoming divorced from the ORM Model - or maybe we should have a trashcan in the ORM model too?)

Ideas:
 * GET api/rest/package - lists active packages
 * GET api/rest/package/traffic_data - active package
 * GET api/rest/trash/package - lists deleted packages
 * GET api/rest/trash/traffic_data_old - deleted package
"
948	1314112642000000	dread	Note: Packages will now be excluded from the search view (see #1283). Also there is now no redirect requirement from DGU any more.
948	1323172859000000	thejimmyg	Re-assigning to me temporarily to investigate now that Seb has left. 
949	1296730355000000	pudo	"Fixed in: 

 * https://bitbucket.org/okfn/ckan/changeset/8017a6686838
 * https://bitbucket.org/okfn/ckan/changeset/5e6634aab275"
949	1297074827000000	rgrp	Hocus pocus so set owner after being fixed!
950	1296732042000000	dread	"Done in:
 * ckan cset:e68d0704e57b
 * ckanext cset:0d7d223e4302
 * dgu cset:c633d2608c29
Importer controller now in new repo ckanext-importer (mothballed)"
950	1297076647000000	rgrp	Reopen to set an owenr.
951	1314031006000000	dread	Specific problem explained by having two users with the same name - one was authorized and one wasn't. See: http://lists.okfn.org/pipermail/ckan-dev/2011-April/000550.html
953	1296809834000000	rgrp	Done in cset:3275d2fc9e43
954	1300217106000000	thejimmyg	I'll look at this for a v3 API with kindly as part of the dictization. It also addresses some potential XSS issues in the API we've discovered. 
954	1300447466000000	thejimmyg	"What would also be really nice is a `help` key in the response which was always returned unless a query parameter of `?help=False` was sent.

The help text could explain what the response meant but more importantly would show examples of other calls you can make with the IDs returned such that the whole API is discoverable without anyone ever needing to read any docs! It also means the API documentation is more likely to be up to date since it will be obvious to developers when it isn't.

With help=False, the JSON can have all whitespace stripped too for production use.

I also think there should be no distinction between GET and POST so that people can easily link to API calls if they want to."
954	1303118513000000	thejimmyg	David Raznick has implemented JSON errors for the v1 and v2 API, we'll look at this over the next few weeks.
954	1310134531000000	thejimmyg	"See also this proposal about ""inlining"" extras fields #972.

David Raznick and I have also agreed that for API 3, each call to the logic layer will return an object (basically a dictionary) rather than using Exceptions. This means the return values from the logic layer can exactly mirror the JSON data strucutres returned via the API. 

The help values can come from the docstrings of the logic layer functions."
954	1315948855000000	rgrp	@kindly: can you update here. My impression is that lots was done but the current ticket description bears little relation to what was done. Suggest we move current content to a new ticket and update this with a short description of what *was* done and then close -- does this sound sensible?
954	1320142744000000	kindly	"This is basically the complete now with documentation.  The child tickets no longer seem to fit and are not essential for completion.

"
955	1296833234000000	dread	Fixed in cset:9a45a07ad95e
955	1297342534000000	dread	Fixed on cset:b65b9830571c and merged into default in time for 1.3 release.
956	1299489084000000	kindly	cset:1305b9192d49
957	1300216958000000	thejimmyg	Let's come back to this later. There are larger UKLP refactors going on. Sorry to mess you around.
957	1314218701000000	rgrp	I'm closing this as wontfix as we now have arbitrary metadata for resources so probably won't need a specific field. That said we probably will want a schema but that is not yet finalized and would be a separate and wider ticket. For current proposal of the attributes generally wanted for resources see http://wiki.ckan.net/Domain_Model/Resource (recently updated).
958	1297430414000000	dread	Sorry I didn't see this and created #78. Closing this one as #978 is fuller.
958	1297430602000000	dread	Apologies, #978 is subtly different - reopening.
958	1320664462000000	rgrp	This was done as part of dataset resource editing in #1294 (duplicate)
960	1297080672000000	pudo	Test this with a dedicated test using a unicode user name. 
960	1297169056000000	pudo	fixed in cset:8cb94dcdecb2
961	1297073658000000	dread	"So you also need:
 4. Converting form data to dict
 5. Converting dict to model

i.e. the dict is not the same as the serialized form data or model data."
961	1308230058000000	rgrp	@kindly: can we close this ticket now. All the meat is done and the remaining related tickets are either low priority or possibly wontfix.
961	1310126100000000	shevski	The main parts of this ticket are now done. The remaining parts can be dealt with separately as their own tickets.
962	1297678925000000	rgrp	In progress but not yet completed so moving to next sprint. Estimate remaining time at: 2h.
962	1298889078000000	rgrp	Nearly done.
962	1301364987000000	rgrp	"Closing as have now reworked to:

 * Support plain text previews for many formats (including xml based formats)
 * Try to handle everything else as html with an iframe ...
 * Do not show preview button where not useful
 * Normalize formats for better recognition (e.g. text/csv, application/xls)

See: https://bitbucket.org/okfn/ckanext-datapreview/changeset/c1d672a6c368 and previous.

Also re-updated the dataproxy so it works again (had got out of sync when mistakenly reverted the dataproxy a couple of weeks ago).

Could still do api/sparql (using sparql js wrapper) and handle json (as plain text ...?) but these can be new tickets."
963	1297850773000000	thejimmyg	We will also remove all the different pip files as part of this fixing #982 at the same time.
963	1298284252000000	thejimmyg	"You can now get CKAN from the repository http://apt-alpha.ckan.org/debian
"
964	1297211237000000	rgrp	Done in cset:fd0e2edf03b1
965	1297682632000000	kindly	added with cset:553421d05ce8
971	1299245064000000	sebbacon	folded into #1013
972	1300219509000000	thejimmyg	I don't really agree with this. In fact I'd rather move further away from auto-magic key value pairs stored in JsonTypes. Can we discuss on Skype please?
972	1310134129000000	thejimmyg	Having thought about this more David Raznick and I have decided to stick with separate extras for the timebeing. Mainly because of internationalisation issues.
973	1297678851000000	rgrp	"Done. See http://licenses.opendefinition.org/ the new licenses release (0.6) http://pypi.python.org/pypi/licenses/0.6 and cset:b8e54186faee

Actual cost: 4-6h (as i refactored the licenses package heavily)"
974	1297342599000000	dread	Fixed in cset:9dc20731d0fd and cset:5149f503e741 for 1.3 release.
975	1297344448000000	rgrp	Fixed in cset:a4caf6b8ce3d.
976	1297346954000000	dread	Done in cset:1566d08d529f for release 1.3
977	1297420742000000	dread	Fixed in cset:8809fbefaf8c for 1.3 and merged to default.
978	1314404858000000	rgrp	Suggest we either a) get rid of columnar layout or b) (preferable) get a dedicated page for resource. That way summary on package page just shows main attributes.
978	1325259266000000	rgrp	Think this should be part of a larger refactor of resource editing now that #1445 (resource page in WUI) is done
978	1328530459000000	rgrp	"We already have basic editing in the Resource section of dataset edit. However, need to extend this to additional fields such as webstore_url and ""extras""."
978	1330547181000000	zephod	"This was not trivial to implement. The backend supports arbitrary key/value pairings on resources, and the frontend can now handle this. Add, edit and delete resource extras according to the form state. 

I had to make a modification to the backend: When saving a resource, you have to submit the complete set of extras. Unsubmitted extras are assumed to be deleted. (This matches the behaviour of the package form).

https://github.com/okfn/ckan/commit/a41cd0c9b04c757f5fa37acaba6be71e345a9c1f#L0R39"
979	1314404905000000	rgrp	Change from Edit Resource extras in the API to Edit Resource extras in the WUI as believe we already have API editing and reference to #978 implies this is about the WUI.
979	1315221162000000	dread	"Changed the title back - it was accurate. The comment was because with formalchemy, WUI and API ran off the same 'form' code.

This functionality may already be there with the new stuff, but certainly needs tests."
979	1315222244000000	rgrp	Is this already done? Is it under test?
980	1297501755000000	rgrp	No owner :) -- also what about the issue that when trying to edit a package for which you did not have permission you got a 500 ...
980	1297503120000000	pudo	"Re package editing issue, that was a ""double error"" fixed by the first two changesets mentioned. "
981	1297682773000000	kindly	fixed see cset:3d1f720a2e5b
982	1297518386000000	anonymous	Well we could transfer all the dependencies and version numbers to a config file for the fabfile, but we don't achieve much.
982	1297525477000000	rgrp	"I don't think i understand why this has been closed (and it would surely be wontfix rather than invalid ...).

Let me explain in more detail: we would move to having one and only one pip-requirements.txt in the repo at any given revision and it would simply have the correct info for whatever branch/revision it was on. At the moment we are having extra pip-requirements-....txt for labelling branch pip-requirements when we could just the branching facility of mercurial.

You'd do

{{{
wget http://bitbucket.org/okfn/ckan/src/metastable/pip-requirements.txt
}}}

rather than

{{{
wget http://bitbucket.org/okfn/ckan/src/default/pip-requirements-metastable.txt
}}}"
982	1297850732000000	anonymous	"This is now rolled into #963. Marking as duplicate.

People can get the pip from a branch over HTTP like this:

https://bitbucket.org/okfn/ckan/src/<branch-name>/path/to/file/you/want"
982	1298482394000000	dread	Need to do this for older branches which isn't subject to #963.
982	1298887980000000	dread	Buildbot scripts now fixed.
983	1297773407000000	dread	"Error was tracked down to cset:214a8f9fc1c2 (26-9-2010): 
upgrade_db called validate_authorization_setup() which calls setup_default_user_roles(System())

Fixed in cset:9f51a1c8ac83 for 1.3 branch and merged to default."
984	1297628554000000	kindly	"These are the errors listed in severity order.

 * group revision tables joins wrong in many ways. 
 * changemask table not added. 
 * licence_id wrong type. 
 * package_revision.download_url and changset.status not dropped.
 * package.name and tag.name unique constraint not added.
 * update cascaded defined wrongly.

Attached are the fixes that will need to be run in ckan_migration_fixes.sql"
984	1297682116000000	kindly	fixed see https://bitbucket.org/okfn/ckan/changeset/d56ea86d4303
985	1298571248000000	pudo	digitialiser.dk has been assigned to Stefan Marsirske to get him into this Framework, everything else is delayed. 
985	1303118298000000	thejimmyg	We'd like CKAN to CKAN harvesting this week if possible.
985	1306407617000000	amercader	Moving this to the PDEU (publicdata.eu) project
985	1306408134000000	amercader	Duplicate of #1155 and #1156
986	1297812401000000	wwitzel3	https://bitbucket.org/okfn/ckanext-qa/src/be57e20c60ef/
987	1311177705000000	thejimmyg	This has largely been implemented now for publicdata.eu. There is a CREP #1134 outstanding to take the harvesting to the next level so marking this one as duplicate for now.
989	1297700363000000	kindly	"It would be nice to know some use cases.   I think that plugins should control their own storage, or share a storage that is designed to be flexible (mongo, redis ...).   

We do not seem to be able to keep our current migrate repository in sync let alone add plugins to the mix."
989	1297700818000000	pudo	"Kindly, I agree - it would be much preferable to have independent storage for plugins and this would be easy to do if we were using another type of storage already. As it stands, however, our storage mechanism is SQL. I think we should use it for what it is as much as possible and do the weird, vertical stuff (k,v tables, swapping to redis) only if we really need it. For everything else: lets use SQL as it was intended. 

Examples: 

 * We want to develop an apps catalogue as a CKAN plugin. While we could certainly put this in Redis, there is no reason why we can't have the following table: application (id, name, title, description, author, project_url, site_url, code_url, image).
 * A watchlist plugin could essentially work on UUIDs alone. What you'd end up with is something like this: watch (id, user, scope_id). 

Re migrations you're right, but my first intention would be to handle that seperatly for each plugin (i.e. they need to have their own migration repositories that they keep track of, e.g. via an apps_migrate_version table)"
989	1297706620000000	kindly	"I do not think we need to 'extend the model' if you intend to make the migrations separate. If the schema is decoupled, then there are no problems.  So each plugin can have its own model and use sqlalchemy independently i.e have their own metadata, classes and mappers.  They do not have to even use sqlalchemy.

What I mean is that there is no need to do anything apart from.

 * Agree on a naming convention of the plugin tables (including their own migrate table each)
 * Agree to the rule that no plugin can add a column to an existing table.
 * Agree that no table can have a (database level) foreign key constraint between the core tables and itself in either direction.  They *can* have implied sqlalchemy level joins.
 * Maybe have a hook that on db upgrade all plugins are upgraded.

Each plugin will have to redefine the tables, classes and mappers they need to join onto the core tables themselves. reusing/extending the core model will not be worth the trouble.

This seems to cover your use cases and this way everything is nicely decoupled. Best of all there is very little work to do... "
990	1311180850000000	thejimmyg	This now works.
991	1298037717000000	dread	Fixed in cset:56cccbbb9d1a in time for ckan 1.3 release. This did not affect previous releases.
992	1298060474000000	rgrp	Fixed in cset:08548ef8f0e9
993	1298373114000000	dread	Fixed on 1.3 cset:7708c8b521ed and merged to default. Deployed to ckan.net.
994	1298912830000000	kindly	see cset:93188d42fc12
995	1300364316000000	thejimmyg	"Also, update the docs:

Documentation article on caching / improving performance. (To complement configuration docs.)

    * Different sorts of cache - beaker style, etags, package_dict in search results(?)
    * How each one affects performance
    * How to turn them on/off and configure them
    * Is it possible to bypass each of them in the browser or with wget/curl? 

Therefore closing #841."
995	1311175353000000	thejimmyg	The caching still isn't brilliant but there is less urgent need to refactor it. In the future our caching methodology should be to cache at the logic layer so we don't need to refactor the existing caching at this stage.
995	1311179009000000	thejimmyg	"See also previous tickets:

 * #537 Caching and Performance improvement
 * #543 Investigate partial page caching and edge-side includes"
996	1300364398000000	thejimmyg	This is now fixed, the outcome will be used to inform #995 for the caching.
998	1298369862000000	dread	'paster db create' (or init) should do exactly what we ask. Surely we should simply tell people to use 'paster db upgrade' instead?
998	1298371191000000	anonymous	I am happy to get rid of paster db create altogether as a compromise?  Or add a depreciation warning to it?
998	1298372171000000	dread	Yes I agree - either of those sounds good. I think I've always used 'db init' in preference anyway.
999	1300707328000000	rgrp	Done. See https://bitbucket.org/okfn/ckan-ckan.net and updated ckan.net.ini.
1000	1298912726000000	kindly	fixed cset:630513f550d5
1001	1300367555000000	thejimmyg	Yes, I think the two should be consolidated, but as was noted elsewhere (I think) we don't want the API to ever be authenticated via a cookie, otherwise we open ourselves to CSRF attacks. Instead we could support the API key as a query parameter as an alternative to via the HTTP header if it is hard to set an HTTP header in JS libraries?
1001	1300625888000000	pudo	"My vote on this would be to enable ""httpbasic"" auth via repoze.who and to add an API key challenger to ckan/lib/authenticator.py that accepts API keys, from within repoze.who. This way we won't have to work around the framework at all and can retain compatibility to the existing mechanisms."
1001	1300703779000000	rgrp	First work in cset:6b8cbe465b61
1001	1300704249000000	pudo	Wrote a WDMMG version of this yesterday: https://bitbucket.org/okfn/wdmmg/changeset/398ce0eb3901#chg-wdmmg/lib/authenticator.py
1001	1301229082000000	rgrp	Completed and merged into default in cset:cb200f339dbb. At the moment have done the very simple option but pudo's approach seems better and we could refactor towards that going forward.
1001	1301307814000000	dread	You mentioned writing tests? Also the CSRF question from James hasn't been addressed.
1001	1301310351000000	rgrp	This ticket did not include CSRF matters - please raise in a separate ticket if you wish. I looked in some detail at the testing options and nothing seemed simple to do that didn't duplicate code we already have (since no way to access the base controller halfway through a request). This can be tested as necessary as part of the development of the new js work.
1002	1311173185000000	thejimmyg	I've done this in my branch and it will get merged in.
1002	1311675754000000	dread	"Can you also delete the ""paster changes"" in ckan/lib/cli with this removal?"
1002	1311676199000000	dread	Reopening this, since it has not been pushed or merged in afaict.
1002	1322515684000000	dread	I've redone these changes in cset:91258a6296db71d78a on master, aiming for 1.5.2.
1003	1298490126000000	rgrp	Work so far in http://bitbucket.org/rgrp/ckanjs
1003	1298889293000000	rgrp	Have now started refactor to use backbone and have basic inline editing working and started on Add dataset view.
1003	1300100411000000	rgrp	Converted completely to backbone and now have fully-operational add dataset functionality. I'm closing this ticket now - further improvements can be in there own tickets.
1004	1311173560000000	thejimmyg	"At the moment it says ""Create a new group"" and clicking it takes you to the login page. We want it to do the same thing but if you aren't logged in the label should say ""Log in to create a group""."
1004	1323171375000000	thejimmyg	The yellow box on the right is now back and you don't get taken to the login page. We'll write more detailed instructions once the group refactor is done.
1004	1323172489000000	dread	"There is a description of groups, but that is not the subject of this ticket. In fact if you're not logged in you do get taken to the login page (which is quite correct). I agree with your earlier comment that the text of the link needs changing. 

Sorry to be reopening this, but I think the previous comment misses the point. Doing this ticket would be a valuable quick fix. Putting on backlog."
1004	1323174597000000	thejimmyg	"I don't understand. We just had a team meeting about this, all discussed it and agreed to close it. Yes, you get taken to the login page, but that is the correct behaviour. 

The problem in the past was that the link was in the yellow box and there was no explanation as to why you had to login. This time you click from the header bar and there is a clear message saying ""Unauthorized to create a group"" - exactly as a user would expect. Even if the exact text of the ticket description isn't fully implemented in the current release, the UX isn't broken anymore. Yes, it might be even nicer to have a message warning them in advanced but these improvements will be taken forward in the UX work - maybe there is an even better solution than a message?

Since you are unhappy about closing it I'm marking it as ""Duplicate"" of #1521. As agreed earlier with the entire team, we'll take this forward as part of the groups refactor.

See #1521 for more information.
"
1004	1323177994000000	dread	"My suggested fix:
{{{

diff --git a/ckan/templates/group/index.html b/ckan/templates/group/index.html
index 8502df9..064e066 100644
--- a/ckan/templates/group/index.html
+++ b/ckan/templates/group/index.html
@@ -9,7 +9,15 @@
   <py:match path=""primarysidebar"">
     <li class=""widget-container boxed widget_text"">
       <h3>What Are Groups?</h3>
-      <span i18n:msg="""">Whilst tags are great at collecting datasets together, 
+      <p><span i18n:msg="""">Whilst tags are great at collecting datasets togethe
+      <p>
+      <span i18n:msg="""" class=""ckan-logged-in"" style=""display: none;"">
+         <a href=""${h.url_for(controller='group',action='new', id=None)}"">Creat
+      </span>
+      <span i18n:msg="""" class=""ckan-logged-out"">
+         To create a new group, please first <a href=""${h.url_for(controller='u
+      </span>
+      </p>
     </li>
   </py:match>
 
diff --git a/ckan/templates/group/layout.html b/ckan/templates/group/layout.html
index 64153aa..a3f732b 100644
--- a/ckan/templates/group/layout.html
+++ b/ckan/templates/group/layout.html
@@ -25,9 +25,12 @@
       <li py:attrs=""{'class':'current-tab'} if c.action=='index' else {}"">
         ${h.subnav_link(c, h.icon('group') + _('List Groups'), controller='grou
       </li>
-      <li py:attrs=""{'class':'current-tab'} if c.action=='new' else {}"">
+      <li py:attrs=""{'class':'current-tab'} if c.action=='new' else {}"" class=""
         ${h.subnav_link(c, h.icon('group_add') + _('Add a Group'), controller='
       </li>
+      <li py:attrs=""{'class':'current-tab'} if c.action=='new' else {}"" class=""
+        ${h.subnav_link(c, h.icon('group_add') + _('Log-in to add a Group'), co
+      </li>
     </ul>
   </py:match>
}}}
BUT this fix doesn't completely work. When you log-in and create a group, at this point the nav bar changes from the (correct) ""Add a group"" to (incorrect) ""Log-in to add a group""."
1004	1323187352000000	dread	"Here is the unclipped version:
{{{
      <p>
      <span i18n:msg="""" class=""ckan-logged-in"" style=""display: none;"">
	  <a href=""${h.url_for(controller='group',action='new', id=None)}"">Create a new group</a>
      </span>
      <span i18n:msg="""" class=""ckan-logged-out"">
	  To create a new group, please first <a href=""${h.url_for(controller='user',action='login', id=None)}"">log-in</a>.
      </span>
      </p>
}}}
{{{
      <li py:attrs=""{'class':'current-tab'} if c.action=='new' else {}"" class=""ckan-logged-in"" style=""display: none;"">
        ${h.subnav_link(c, h.icon('group_add') + _('Add a Group'), controller='group', action='new')}
      </li>
      <li py:attrs=""{'class':'current-tab'} if c.action=='new' else {}"" class=""ckan-logged-out"">
        ${h.subnav_link(c, h.icon('group_add') + _('Log-in to add a Group'), controller='group', action='new')}
      </li>
}}}"
1004	1323194016000000	zephod	"Dread, that fix wouldn't work because the class attribute was being defined in Genshi and again in HTML, with slighly undefined behaviour (in this case Genshi overwrites HTML). 
I have performed a very very simple fix which modifies the navbar text when you're not logged in. 
https://github.com/okfn/ckan/commit/a89a48731ba548170045a60ac2930e0019c299c7

I don't think the link should be restored in the sidebar, it was explicitly removed as part of a site-wide sweep to make the sidebar a passive, helpful element rather than an active element with action links.

Site looks great to me, I'm closing this ticket."
1004	1323195485000000	dread	"Great stuff zeph! Diff looks really good and cheers for the explanation. 

On master, cset:a89a48731ba548170045a60ac2930e0019c299c7 and I've cherry picked this for release 1.5.1. too."
1005	1300100085000000	dread	Moved to dgu trac ticket 869
1006	1298631145000000	dread	"This command is slightly different to your branch policy as of two weeks ago:
{{{
stable: stable code
metastable: (will soon be deprecated) for code preparing to be stable
default: development HEAD
}}}
which I prefer. 

My ideal would be to get rid of the confusing name 'metastable' and unneeded 'stable' and start a new branch called 'released', which will act the same as 'master' in this diagram but with a more intuitive name:
http://nvie.com/posts/a-successful-git-branching-model

Then for each ckan instance we can either use the most recent release (from 'released') or choose a specific one (e.g. 'ckan-1.3' or even 'default' or 'enh-865' for getting latest features). This gives a good degree of flexibility, is more understandable to newbies and probably a more widely understood branching model."
1006	1300098217000000	dread	Reassigning to rgrp for response
1006	1300105927000000	rgrp	"Not sure when i described that other process but I'm definitely of the opinion that we should:

* Deprecate and remove stable branch
* Deprecate and remove metastable branch (going forward we can use release branches for what we did with metastable in the past)

May want to update BranchingPolicy to reflect this (also should probably have some statement about closing release branches and tagging)

Reassigning to David Raznick as he is our release guru now."
1006	1300372286000000	thejimmyg	I'm updating the branching policy now. David has closed stable and closed metastable. Marking as fixed.
1008	1298821826000000	rgrp	I've removed the eval in cset:1b8fedeb7ab0 - the more general question about caching should go in a separate ticket.
1009	1298638447000000	pudo	"Some more ideas: 
 
 * /user should list users, sorted by number of packages contributed/editied
 * /user/{name}/packages shows a list of packages to which users have contributed

"
1010	1298733856000000	rgrp	Complete see branch feature-1010-list-users and closing changeset cset:feature-1010-list-users.
1010	1298740889000000	rgrp	Meant this cset:d2651db566ef
1011	1298820235000000	sebbacon	On reflection, may as well make a Plugin interface called IAuthorizer, which allows customisation of get_authorization_groups, get_roles, and is_authorized....
1011	1298821699000000	rgrp	I agree that IAuthorizer is useful but not sure how it addresses the requirement of the ticket. AuthorizationGroups are already editable via the web interface at /authorizationgroup
1011	1298824649000000	sebbacon	"The ""external source"" is an Oauth service.  We need to lookup user groups from that service."
1011	1298825600000000	sebbacon	Proposed implementation at https://bitbucket.org/okfn/ckan/changeset/187e65afb35f
1011	1299245206000000	sebbacon	Merged to default https://bitbucket.org/okfn/ckan/changeset/e8217c317a8e
1012	1300217601000000	thejimmyg	"See also #103 which says:

As a user I want to view a package at a given revision:

    * When I visit /package/read/xyz?rev=yyy I should be shown package at revision yyy
    * package history page should provide links to these pages 

Could you please investigate how doable this would be given the current package read.html page. I expect it could be very easy once the revision API is in place because we could build a c.pkg object from the revision data instead of the model data.

Perhaps another case where we could try introducing the dictization?"
1012	1300352334000000	kindly	"This is entirely not trivial at the moment.  Hopefully after the dictization it will become more so.
Simply putting in the package revision object in place of the package does not work.
It will obviously work for changes to the package object itself. However, there are no  mappers on that object for getting out the related package_tags, resources and extras at that revision.  You will have to construct a fake pkg object with some messy and painful queries using dates."
1012	1300362584000000	kindly	"cset:5649d6e761fc

The basic revision history is merged. I will keep this ticket open if it is not sufficient.

All it does is give a list with the most recent first of revision_ids, authors and timestamps.

i.e

{{{
[{""timestamp"": ""2011-03-16T15:55:19.941961"", 
  ""author"": ""southampton-ac-uk"", 
  ""revision"": ""202e9eb8-afaa-4bc9-b8a1-a317561547ea""},
 {""timestamp"": ""2011-03-15T17:59:16.430804"",
 ""author"": ""southampton-ac-uk"",
 ""revision"": ""8235bd0a-d39a-49e0-887a-b0f231be8a92""}]
}}}
"
1012	1300364620000000	thejimmyg	The API part is now done. Bumping the view history part to 1.5
1012	1300368449000000	dread	As I understand it, the whole point to vdm is to make it easy to get old versions of not only the package, but its related objects (like tags, extras). David take a look at this function: Package.get_as_of(revision)
1012	1301909937000000	thejimmyg	No-one really seems to have requested this part.
1012	1301943096000000	dread	Changing this to 'Fixed' and #103 to 'Wont fix' to ensure this feature is noted.
1013	1299245157000000	sebbacon	"This is now resolved, but depends on core CKAN behaviour (specifically pluggable middleware and unicode-aware error pages) to function:

  https://bitbucket.org/okfn/ckan/changeset/c846794c1799
"
1014	1299245293000000	sebbacon	Run out of time for decoupling, but tests and README.txt written (including pointers about how to customise for anyone who needs to decouple in the future)
1015	1298902753000000	kindly	The migration fixes should sort this out, but I will keep the ticket open to check.
1015	1299788821000000	rgrp	Today kindly applied the sql fixes and I can confirm this is now fixed. Well done kindly for all the great work here.
1017	1299668555000000	pudo	fixed in cset:86d49a775fd3
1018	1299073340000000	dread	Done in cset:e4167f8b3f80 on default
1019	1299166930000000	pudo	fixed in https://bitbucket.org/okfn/ckanext-webhooks/changeset/034647931921
1020	1300196215000000	thejimmyg	This is now on DGU live.
1021	1299518828000000	pudo	fixed in cset:9f1b38add19f
1022	1299512991000000	pudo	"We're now using fileConfig to configure the logger API from the worker config file and this enables us to use SMTPHandler to send out error messages on queue processing failures. 

Marking as fixed. "
1023	1299514847000000	pudo	"Tried implementing this with AMQPs msg.requeue() and channel.basic_recover() but RabbitMQ yield a NOT_IMPLEMENTED error. 

Bit clueless on how to proceed. "
1024	1299668648000000	pudo	re-created this (#1027)
1025	1299598708000000	dread	Done in enh-1025-config-default-authz and goes into release 1.3.2.
1025	1299750097000000	rgrp	(Link to changeset). Could you briefly clarify why this was needed in config -- we already have a process for putting things into a more restricted mode (see ticket:833) and have been working on creating a WUI to be able to do this automatically (see that ticket).
1025	1299751045000000	dread	"Thanks for pointing this out. Although changing the definition of 'editor' to not allow edit (as you admit) is a bit hacky, and I think prone to confusion. James and I weren't aware there was a precedent for doing it this way, but if we had, we may well have followed it.

I mentioned the branch for this cset, in preference to the csets."
1026	1299605128000000	dread	Done in cset:2dde3bd563fd for branch 1.3.2
1027	1299666326000000	pudo	"
1. home controller -> __before__ (check ""site-read"" on model.System)
2. user -> each individually (repoze-who pseudo action must not be blocked)
  * user-read (index/read/update pages for users)
  * user-create (register)
3. revision -> __before__ (check ""site-read"" on model.System)
4. tag -> site-read (__before__)

functional/test_authz.py
  * denies site-read ...
  * checks for visitor / logged in user ..
  * checks you can still visit login
"
1027	1299682082000000	pudo	fixed in cset:532c3ad2743b
1028	1299760360000000	dread	Fixed in cset 4d860a53fbad on 1.3.2 and merged to default.
1029	1301311643000000	thejimmyg	This was fixed by kindly as part of the 1.3.2 release.
1030	1300103984000000	amercader	"This includes:

 * Take out all references to harvestsource, harvestingjob and harvesteddocument in the  rest API
 * Move the harvesting bits of ckan/lib/cli.py into ckanext-harvest.
 * Move ckan/controller/harvesting.py and cknan/model/harvesting.py to ckanext-harvest  as well
 * Update ckanext-csw to be able to find the code it needs in the new place."
1030	1300209975000000	thejimmyg	"Also:

 * Delete harvest sources
 * Implement a Genshi template filter so that if there is an INSPIRE package_extra set to True, you can link to the XML and HTML generation API calls in ckanext-csw
 * Write tests in ckanext-dgu for all the API calls that Drupal is making
"
1030	1303117978000000	amercader	All the points described in this ticket have been completed. Harvesting work is being done mainly under #1037
1031	1299863222000000	rgrp	Done, see cset:78d96b520679
1032	1300380606000000	rgrp	This is urgent for me as without upload does not really function.
1032	1303117292000000	thejimmyg	Rufus, I think this is potentially quite a big change and needs to be done as part of the entity refactor rather than as a quick hack. I'd like David Raznick to work on timeseries this week so I'd like to understand a bit more about this ticket. Could you flesh it out please or let's discuss in the catch up?
1032	1303118226000000	thejimmyg	See related ticket #922
1032	1304094162000000	rgrp	Agreed to defer this. Resource editing, to the extent it happens can be kept very simple and part of package editing.
1032	1330348463000000	zephod	Streamlining supertickets. #1506 is the new parent of #978; all tasks remaining in this ticket are complete.
1033	1308310446000000	dread	Fixed in 5c7caca30737 for v1.4.1
1034	1320174353000000	dread	Same problem as #1321 I believe
1035	1323172908000000	thejimmyg	Re-assigning to me temporarily to investigate now that Seb has left. It may be that this should be deleted given that it is over 6 month's old.
1035	1338206251000000	ross	Removing until we can come up with a case for implementing
1037	1303117000000000	thejimmyg	"We spent last week integrating the new harvesting architecture and testing the code but there are still some areas that need looking at

* The source type and label should be part of the plugin, not named in DGU.
* Need warnings if a document changes but its date doesn't -> do we have these?
* I noticed there are some tests in DGU, should these perhaps be in ckanext-harvest?
* If active is False, the job should not be put on the queue
* Log if the wrong type of URL is entered as an error the user can see
* Deny if the source is already registered
* Overwrite all extras, not just merge new ones.
* During the import stage use iswms.py to add an extra during import if it is a WMS so that we can add a link to the WMS later https://gist.github.com/900878
* Can errors/warnings be logged in the import stage? Do all fetched documents get passed to import in one go?
"
1037	1304937601000000	thejimmyg	Closing this now, any outstanding small issues will be logged in new tickets.
1038	1300212841000000	dread	Done in cset:0373737f0866 for release 1.3.2
1039	1300212856000000	dread	Done in cset:97d563bbf01d for release 1.3.2
1040	1300213922000000	dread	Fixed by James in 904f1f36a672 for 1.3.2
1040	1328805778000000	dread	"The problem arises when you do two things together:

1. Have code like this in a CKAN extension's plugin.py:
{{{
        config['extra_public_paths'] = ','.join([our_public_dir,
                config.get('extra_public_paths', '')])
}}}
which will have a trailing blank value (unless you set extra_public_paths in the config file) 
{{{
extra_public_paths=['/some/path/', '']
}}}

2. Run CKAN with this code:
{{{
        extra_public_paths = config.get('extra_public_paths')
        if extra_public_paths:
            static_parsers = [StaticURLParser(public_path) \
                              for public_path in \
                              extra_public_paths.split(',')] + static_parsers
}}}
Introduced in #340 https://github.com/okfn/ckan/commit/0593c3e5050882a9dbf54fb6c263f4a2f1de2097#ckan/config/middleware.py in CKAN 1.0.2
This was made safer in https://github.com/okfn/ckan/commit/e0d5f02168116a18a7aeb7b058e4160bbd402a02#ckan/config/middleware.py for CKAN 1.3.2 (it ignores blank paths)
"
1040	1328806824000000	dread	"Here are all the CKAN instances potentially involved in this issue:

== ckan.net / DGU ==
These suffered this problem briefly and were fixed 15/3/11

== opengov_es  http://opengov.es/ 1.2 ==
This does not have a theme extension. Is not serving files from root.

== nosdonnees_fr  http://www.nosdonnees.fr/ 1.3.1a ==
This does have a theme extension but does not seem to have a trailing blank public path since it is not serving files from root.
"
1041	1300284809000000	thejimmyg	Also, this means moving documentation out of the current CKAN dev wiki at trac.ckan.org and into the community wiki. Core developer docs should remain in the Sphinx-based .rst format in CKAN. Much-needed new tutorials go on the community wiki.
1041	1310135309000000	thejimmyg	Child ticket of #1142
1041	1312372367000000	rgrp	James says this is not priority and he does not plan to do docs for debs until he has got that system functioning.
1042	1300969265000000	dread	Done in ckanext cset:7610512277bd and ckanext-importlib cset:7737716e0d7b.
1042	1300969865000000	dread	"Remaining parts of ckanext are:
 * blackbox (rgrp, pudo, dread)
 * hammer (ww)
 * link_checker (ww)
 * solr configuration (pudo) & indexer (pudo)
 * amqp listener command (ww)
 * geo form field (rgrp)
 * GData Loaders: 
    * aidprojdata (johnbywater)
    * norwaygovdata (johnbywater)
    * ordsurv (johnbywater)
    * Gemini2 (iso19139) (johnbywater, ww)"
1043	1300321033000000	kindly	"cset:c894f92c5b9a

Sesion.remove() needed to be run before configure as we want the original session made not to be used over the newly configured ones."
1044	1300359562000000	rgrp	Think this would be resolved by refactoring implied in ticket:1001 (specifically checks for api key and remote user should lead to availability of same set of identification information).
1044	1300382367000000	dread	"I agree with leaving #1001 solving this issue. Centralising this is good. This ticket can instead focus on:
 * returning the correct 403 error (rather than the 302 currently)
 * creating some tests
 * documenting
 * consider renaming the SITE_READ variable and rethinking purpose"
1044	1300449905000000	dread	"I've added in tests for SITE_READ and corrected the 403 response - see branch bug-1044-site-read.

The tests have uncovered some inconsistencies in the use of SITE_READ between reading/editing a package in the Web interface vs the REST API. Friedrich, do you want to take a look at ckan/tests/functional/test_authz.py:TestSiteRead.test_pkggroupadmin_read for details and have a think about how this should best work. How about making SITE_READ more widespread in the WUI, to protect read/editing/searching things, in addition to the READ and EDIT RoleActions.

Once that is decided, it should be pretty easy to refer to the tests and document SITE_READ."
1044	1300627007000000	pudo	"David, thanks for writing those tests - perhaps we should combine them with the ones below (""TestLockedDownUsage"") which attempt to basically do the same. 

As for the inconsistency introduced by the global check in the REST API you're right: Of course it is strange that WUI access checks are more granular than the API checks. The alternative is that we either move authz checks into all relevant REST places (a major refactoring I would be suspicious of) or that we introduce duplicate checks on the WUI actions (I actually have performance concerns about that, authz is incredibly slow - and it introduces another level of special authz that I think we really should not have). Given the choice I'd opt for the REST refactor - there is no good reason to make SITE_READ a duplicate check where authz already applies. 

On the other hand, this is a function we really don't want to enable or even have and that was only added to satisfy some very specific user demands. Given that these are fulfilled, I'm actually OK keeping the inconsistency for now - nobody will see it in normal operations and in a locked-down environment, users will need to have API keys anyway. 

Regarding the naming, I'm pretty opionion-less: SITE_READ was proposed by rgrp and I think its pretty fitting, while OTHER_READ would just confuse me. PUBLIC_READ might work, though. "
1044	1300712223000000	dread	"I'm happy to leave the inconsistencies in SITE_READ for now, since this will be resolved when authz is centralised between WUI and API in the dictization refactor.

I'm also happy to leave both TestSiteRead and TestLockedDownUsage as they complement each other nicely actually.

So I think all that remains for this ticket is to add a paragraph to the authz documentation about SITE_READ. Pudo would you mind doing this? It's well worth noting where it applies and where it doesn't."
1044	1301304871000000	dread	I think all that remains for this ticket is to add a paragraph to the authz documentation about SITE_READ. Pudo would you mind doing this? It's well worth noting where it applies and where it doesn't.
1044	1302096155000000	dread	I've added in the docs for this in cset:013da53052d1 ready for release 1.3.3.
1045	1300457708000000	dread	Fixed in cset:98eb8b8d063e on default, scheduled for CKAN version 1.4.
1045	1300787161000000	dread	Want to identify groups by ID also in the Web interface.
1045	1300793261000000	dread	Fixed in cset:71621df50983 on default ready for ckan 1.4
1046	1302777668000000	kindly	cset:35ba6ad033ae
1048	1300702752000000	dread	Done in changeset 9d7bfa124757 on default and expect it to go into 1.4 release.
1049	1323169424000000	thejimmyg	This is over 6 months old. In accordance with wiki policy, closing.
1050	1300452200000000	johnlawrenceaspden	there's already a file ckan/tests/test_authz.py, which looks like the appropriate place for new tests.
1050	1300458454000000	dread	"I may misunderstand how you intend to build the WUI Admin interface, but I think most of the stuff in authztool is just marshalling command line parameters anyway. The bits which do anything are factored out. 

For example, to list rights you just loop over obj_classes to call {{{model.Session.query(obj_class).all()}}} and then display the values: {{{type(subj).__name__, subj.name, role, type(obj).__name__, obj.name}}}. 

To change a right you simply call {{{model.add_user_to_role(subj, role, obj)}}} or {{{model.add_authorization_group_to_role(subj, role, obj)}}}.

But of course if there is useful stuff to factor out then be my guest!"
1050	1303118188000000	thejimmyg	This should also feed into #1075 which will be being worked on this week.
1050	1315394117000000	dread	There's been no objections to my comment 6 months ago saying this is invalid, so marking it invalid. Feel free to reopen if there is indeed a case here.
1051	1301305079000000	sebbacon	This has been completed in https://bitbucket.org/okfn/ckan/changeset/64a949990e0b
1052	1300895410000000	dread	Fixed in branch feature-DGU#889-authorization-in-lockdown and merged to default at cset:e6643cf1324c. Only remaining issue is listing in Web interface of package relationships, which shows links to packages even to ones you can't read.
1053	1310125444000000	thejimmyg	This is now fixed as part of the API refactor and revisioning updates David Raznick has done.
1053	1310126546000000	dread	"Looks to me like DELETE always changed the state to Deleted, so an invalid ticket.

We can deal with purging in another ticket if needed."
1054	1300989764000000	dread	I've added some tests in the branch: defect-1054-resource-order
1054	1300992195000000	dread	I've put in a potential fix for this into the branch - do take a look and see what you think.
1054	1301002995000000	kindly	"Looks great.  Had a look and changed a minor thing because I was not confident with the handling of the null values.  I made a fake resource and did an asdict on that to make the identity.

Part of my patch I reverted as I mucked up my version of the vdm, so it was not needed.

"
1054	1301305615000000	dread	This branch is now merged.
1055	1300987241000000	dread	This amounted to 14 tests. Fixed in cset:5bbd0005c57e ready for ckan release 1.4.
1056	1302626373000000	dread	Fixed in cset:a025b5b3293c on default.
1056	1302882616000000	dread	This was broken in cset:b681bbedfa62a68b71260ef48a0da6063109734 which was released in 1.3.2
1057	1329150236000000	toby	fixed in commit 3d7cbf0
1058	1301303221000000	dread	Fixed in cset:8e1817ab8d1c on default, ready for 1.4 release.
1059	1301312516000000	dread	Fixed in ckanext-importlib cset:f6d19129ac43.
1060	1301312487000000	dread	Fixed in ckan-importlib cset:bc52bba86d71 and ckan cset:2751f76fb17a in time for ckan 1.4
1061	1301397271000000	dread	Fixed in cset:fc3bc103db8c ready for release 1.3.3
1061	1301922325000000	dread	Actually there was a link at the bottom of the package edit form that my grep didn't pick up: h.url_for(str('/license')). So it is not orphaned at all.
1061	1301922350000000	dread	Backed out original change fc3bc103db8c here: 7ae9aff8bc68
1062	1311178145000000	thejimmyg	"Hi John,

Can you please check that the new webstore+preview works correctly with this one please?

Cheers,

James"
1062	1311773731000000	johnglover	The file is in Turtle format (serialisation format for RDF, which we currently don't archive and have no preview code for. The new preview code will not even create a preview button for this file type. Moving to the backlog for now, support for RDF and related formats should be added along with support for excel docs and google spreadsheets.
1063	1301522483000000	rgrp	"This sounds absolutely sensible and suggest we even have a helper method such as lib.helpers.group_link(group) (as we do for user_link).

(@Seb: apologies for misunderstanding your query on the list -- I was talking about the group listing table at /group)"
1063	1302514033000000	sebbacon	Fixed in https://bitbucket.org/okfn/ckan/changeset/145eaae3168a
1064	1323169787000000	thejimmyg	Marking as duplicate because #1464 will take it on.
1065	1301914004000000	sebbacon	"To reflect further conversations:

 * We are parking this ticket until dictization is complete
 * We would prefer to see roles as asserted globally by default, with packages just storing exceptions.  E.g. If I am a ""reader"" globally, then I have ""read-package"" permission on all packages new and existing, unless otherwise asserted locally on a package.
 * Also w.r.t. algorithm above, consider repoze.what's model; ""possible"" is analagous to ""has_permission"".  See http://what.repoze.org/docs/1.0/Manual/Predicates/Builtin.html"
1065	1302033244000000	dread	"Wow, lots of solutions here, and not enough evidence of the problems encountered / difficult use cases.

I have tried here to extract what John and Seb might be suggesting is difficult with our current http://en.wikipedia.org/wiki/Role-based_access_control system.

1. (Seb) It seems crazy to change the User-Object-Roles for every single package to 'lockdown' a CKAN instance. Instead of using Roles 'reader' & 'editor' we start using Roles 'logged_in_user' and 'anon_user'. Then, with only changing a couple of lines of the Role-Action table for these Roles, you can give or remove permissions to edit / create packages, groups etc.

2. (John) Actions are being added all the time by migrations and extensions. I'm not sure what the problem is here - can someone explain? The separation of Users and the new Actions by adding the Role 'join' means the migration/extension can add existing Users with the new Actions. For example when we added the 'Group' protection object, logged in users could previously create groups, so it is natural to add this action to the 'editor' role. If you get rid of Roles, as John suggests, then you end up having to add as many Rights objects as users. And you might end up trying to infer new Rights on the basis of old Rights, rather than a role, which would be more natural. (Is the only reason to denormalise the UOR and RA tables the sake of ease of understanding? I would think we can explain the concept better now...!)

3. (John) This Group Hierarchy description sounds a bit like earlier incarnations of the DGU requirements. ""or any of his groups group-children (but not user-children)"" I'm not sure I understand the user-children bit, and I'm wary of any difficult-to-grasp concept. This modelling seems to take the UserGroup/User hierarchy model and use that as a hard-coded interpretation of the Authorized permission. In contrast, in DGU Evan split the Organisation Hierarchy model from the Authorization model. Each User has explicit permissions for each Organisation he is allowed to add/edit packages for. This helps for these two use cases we have to contend with: when a user is an admin for unrelated branches of the Organisation hierarchy, and when an Organisation is actually in two branches of the Organisation hierarchy. It also seems more generally flexible.
"
1065	1302075994000000	sebbacon	"Re the point against my name, yes -- I think the fundamental principles of the current system are fine, but the implementation means asserting things for every single object, whereas we should be able to optimise it for the general cases -- something along the lines you suggest.

I would be very happy to write up a full, detailed proposal for the system before we implement anything, if only as a proper straw man to have debates around."
1065	1302081747000000	dread	Great stuff Seb, cheers for that.
1065	1303118756000000	thejimmyg	This is now more urgent and I think we have enough consensus to go ahead. See #1094 too.
1065	1311174208000000	thejimmyg	Merging with #1094 so see the discussion there too.
1065	1318528721000000	rgrp	Reassigning to zephod as he is looking at this. I think most of this is wontfix or will become obsolete with other stuff but worth looking at. Also moving to v1.6 at the same time.
1065	1324550041000000	dread	"All subtickets are done now, apart from #1198 which I've moved into superticket #1477 Group refactor

 Change name of AuthzGroup? to UserGroup? to reflect what it is for
I think this is completely covered off in #1477 Group refactor

 Get rid of Roles, and replace them with direct assignment of actions, even though there are many actions, and extensions can add arbitrary ones.
 Debatable whether we should cut the number of actions to correspond to the three roles defined by the base system.
This is not clear - please raise a ticket for this if still promising.
 Have a method of finding roles (or, in future, actions) relevant to a given protection object (e.g. FILE-UPLOAD(ER) not relevant to Packages)
These three points I've moved into a new ticket #1596 as it was getting lost rather in this one.

 Change UserGroups? so that they can have a hierarchical structure,
I think this is completely covered off in #1477 Group refactor

Conclusion: closing this ticket as all points are covered or moved into tickets elsewhere"
1066	1301904246000000	dread	Need a new role 'ANON_EDITOR' which is the default role for Visitor, which can create packages, but not groups.
1066	1301930311000000	dread	"Migrations:
 * Default (open) CKAN instances will have visitor as a reader on the system, and will have to upgrade them to anon_editor.
 * DGU & DataGM instances have visitor as a reader on system and must stay like that.
 * Pudo's specially locked instance, where editor has been changed to only read can now use the 'reader' role (assuming he's happy for them to create users)

Migration script (37) is designed to cope with the default (open) setup, and the other special cases must be dealt with using CLI at the time of upgrade:

DGU & DataGM must run:
{{{
paster rights remove visitor anon_editor system:
paster rights make visitor reader system:
}}}"
1066	1301932136000000	dread	Done on branch defect-1066-reader-too-permissive and merged into release-1.3.3
1067	1302186503000000	dread	Done in cset:d75ab5fc3311 for release 1.3.3
1068	1302109505000000	dread	"The problem was the use of mktime which is localised. Also spotted a problem with the use of localised time stored in the datestamp created in migration script 29, when initialising the repo.

Fixed in a2094932e5e4 in release 1.3.3 branch."
1069	1301909423000000	thejimmyg	"This is what the new ""Ideas"" section in the ckanext-community extension is for. Marking as duplicate of #941, can we have discussion there please."
1069	1302510609000000	rgrp	Mistakenly assigned to this sprint.
1069	1310133794000000	thejimmyg	Yes, and this will be more important in thedatahub.org
1069	1340632215000000	icmurray	Assigned to @tobes as he's looking at publication workflows.
1070	1310117129000000	rgrp	Added link to http://wiki.ckan.net/Domain_Model and closing as work mostly done (and nothing clear remaining to be done -- agreement perhaps!)
1071	1301943180000000	dread	Done in cset:db9e2c4f65bb for release-v1.3.3
1072	1302106474000000	dread	Done in cset:2a97d2d9ba4a for release 1.3.3.
1073	1302185825000000	dread	Done in cset:9dfc60db90ed on default branch.
1074	1314278296000000	rgrp	johnlawrenceaspden did quite a bit on this in feature-1074-refactor-authz-wui branch (including implementing for package and group). However, did not implement for authzgroup and also repeated code a lot. Reassigning to me for completion.
1074	1314283492000000	rgrp	"Also work on branch feature-1074-authz-wui (that is primary one in fact)
"
1074	1314303581000000	rgrp	Closed in cset:18a5b48bbee6. Note the templating isn't completely reused but rather uses common methods from _util.html. Likely that a bit more refactoring could be done to share common code but not worth it at present.
1075	1303227982000000	johnlawrenceaspden	"closing ticket 
see http://wiki.ckan.net/Authorization 
and https://bitbucket.org/okfn/ckanext-admin"
1076	1302515674000000	sebbacon	See also http://trac.ckan.org/ticket/948
1076	1302731255000000	rgrp	All main work done as of cset:556efcb91f19 in branch feature-1076-improve-purge-system (+ associated work in ckanext-admin trash bin management). All that remains is to add some tests.
1076	1303236302000000	rgrp	Test of trash functionality in ckanext-admin in https://bitbucket.org/okfn/ckanext-admin/changeset/e86c102a3c60 so now closing (could do with some functional tests in the main interface but can leave for later -- were none before so situation no worse ;0 ).
1077	1319797284000000	dread	I guess this is not a priority now.
1078	1305828965000000	kindly	complete: cset:843b78bae016
1079	1302777496000000	kindly	Complete see cset:35ba6ad033ae
1081	1303332388000000	johnlawrenceaspden	Actually it seems to be worse than that. If I add a user to an authz group then I get added too, and then there's no way to remove me.
1081	1303489474000000	johnlawrenceaspden	"Fixed as part of feature-854-tests-for-authz-groups branch.

Original behaviour was that creating/modifying user is explicitly added to the users in the authz group.
"
1082	1315317825000000	dread	"The flash message 'Language set to: English' was always in the previous language, not the new one. Pudo fixed this in cset:eaf342823caf and I have transplanted this into release-1.4.3.

I've also added/corrected translations for all languages for 'Language set to: English' so that it makes sense!

""Set language back to English causes server error:""
I can't reproduce this. The exception looks like a problem with the forwarding, which improvements were made in #1126."
1082	1315917217000000	dread	Language switch problem has been around since it was introduced in the 1.3.1 release.
1083	1304975681000000	johnlawrenceaspden	"Current behaviour:

from the web interface, russianfan can be added as an admin on warandpeace twice.
and you can then delete the two roles separately.
desired behaviour is that you can only add him once.

from the command line, you can only add him once, but if he's in there twice, you can't remove him because the command line bombs
desired behaviour is that he can be removed

from the shell, you can add him twice but can't remove him if he's been added twice.
if you try, it bombs.

The desired behaviour in all cases is that adding and removing are effective and idempotent in all three cases."
1083	1305051061000000	johnlawrenceaspden	It appears to be possible to get into a state where you can't add or remove roles from the command line. Investigating.
1083	1305058621000000	johnlawrenceaspden	"Fixed the problem where you can't delete a role if it's been added twice, but had to leave the add function as it was since putting a commit in it breaks many tests.

It appears that the WUI doesn't call these functions anyway. Left that as it is since we're planning to replace it.

The cli rights command doesn't appear to add the roles that it says it adds. Possibly because it's not doing the required commit? Reported this as a different bug."
1084	1303894555000000	dread	ww you did this didn't you? Perhaps you could update us with the branch/changeset it was in and close this ticket please.
1085	1302621951000000	rgrp	"I don't think this is very useful output :) Most of this is test/demo/rdf and therefore not relevant.

Also have you checked your ckan.site_url in your development.ini -- which configures where what is used as based for all external urls in the templates?

IMO there is nothing to fix here."
1085	1302624602000000	dread	As discussed on IRC, the default ckan.site_url should be blank, rather than ckan.net.
1085	1302625314000000	dread	Fixed in cset:01b3de5d4e31 on default.
1086	1303381200000000	johnlawrenceaspden	There is no (obvious) way to delete an authzgroup.
1086	1323346552000000	dread	Authorization groups are deprecated with the incoming Groups Refactor #1477
1087	1310134714000000	thejimmyg	Child ticket of #954
1087	1320866159000000	dread	"Implemented in cset:0b7e2b0bed44 as status_show logic action, heading for 1.5.1 release.

Took 0.5h"
1088	1302630624000000	wwaites	"you use the negotiate function in autoneg.py with a cfg dictionary like this,

{{{
cfg = {
    ""mime_types"": [
        (""application/xhtml+xml"", [""html""]),
        (""text/html"", [""html""],
        (""application/rdf+xml"", [""rdf"", ""owl""]),
        (""application/turtle"", [""ttl""]),
        (""text/plain"", [""nt""]),
        (""text/x-graphviz"", [""dot""]),
        ]

for content_type, exts in negotiate(cfg, accept_header):
    if ""html"" in exts: 
        render page normally
    else:
        redirect to semantic.ckan.net
}

}}}"
1088	1303035487000000	wwaites	"fixed in 5c091fc08474 (bug-1088-autoneg-is-wonky) tip
"
1089	1302631733000000	dread	Done in cset:6d41ecc431e3 on default.
1090	1302635699000000	dread	Fixed in cset:e0af88edf0f0 on default.
1091	1303746408000000	rgrp	"This is a well known issue (see some discussoin in #142). There is nothing directly we can do about it (this is what google gives us) but we could make usernames editable (this has been discussed but not ticketed I believe). Given our general ""downer"" on openids I'm not sure this is a big priority."
1091	1323102767000000	rgrp	wontfix plus we now requires usernames see #1386
1092	1305570822000000	kindly	completed cset: ca1ac4112ea2
1093	1302865470000000	dread	Fixed by this API call use the existing license cache. Done in cset:a95888ea39be on release-v1.3.4
1094	1303129670000000	rgrp	"See also comments on the mailing list.

Item 1 seems fine (what is difference from current extension mechanism?)

Item 2: concerns here. What about list views? What about editing 'permissions'? I also think getting rid of System object isn't really a benefit (if anything may be a cost).

Item 3: feel this may be better as part of big domain model change (also gives us time to really dig into this -- this is an important requirement/conceptual issue).

Item 4: No objections but seems very minor gain for fairly significant migration work.
"
1094	1304354036000000	johnlawrenceaspden	"UserGroup/PackageGroup might also be confusing.

A PackageGroup is *just* a group of packages.

A UserGroup is both a group of users, and a thing affecting authorizations.

Perhaps PackageGroup and UserAuthorizationGroup? Or PackageGroup and AuthorizedUserGroup?

I was quite confused by all this at first.

I think I understand how the whole thing works pretty well now, and I still can't think of good names for the two concepts, although I can already feel the normal English meanings of the words changing to what I now know they are for.

We should be a little wary of this. Things that are even slightly difficult to understand end up being understood by very few people. Would any of us be prepared to sit an exam on exactly how UNIX file permissions work, even though we all use them?
"
1094	1311173649000000	thejimmyg	Merging with #1065 and closing.
1096	1307444626000000	nils.toedtmann	See also http://ckan.okfnpad.org/multisite
1096	1310125173000000	thejimmyg	"Renaming to CKAN Hosted because whether we introduce a site domain object for subdomain tenants or not is an implementation detail.

As far as progress on CKAN hosted goes, we now have:

* A build tool to package ckanext-dgu, ckanext-std etc into .deb files
* The ability to apt-get install CKAN
* A script that can set up multiple non-conflicting CKAN instances on the same machine

What we need next is the ability to generate a ckanext-xxx repository for each new instance we want to host. At that point most of the underlying techniques for hosting multiple CKAN instances concurrently will be in place. Once we have that working and know what clients want, we can look at going further and speccing up a multisite solution off a single DB, rather than the multi-instance solution proposed here.
"
1096	1311182262000000	thejimmyg	Milestone ckan-v-future deleted
1097	1303293476000000	dread	Done in cset:5dec7eb609ab on branch release-v1.3.4.
1098	1303387896000000	dread	Fixed in b2b37e39de4d in release-1.3.4. Was only broken on this branch a few days before.
1098	1303406017000000	dread	Also found problem with some tests using delete_all. Fixed in cset:f9764dd43a0a release_1.3.4.
1099	1324057106000000	dread	Authorization groups deprecated with the Group refactor #1477
1100	1303406103000000	dread	Done in release_1.3.4 cset:580e2b11b4ef and release 1.3.3 cset:cac55b8a0bd9
1101	1330082908000000	dread	Stats already in site nav - adjusting title to just mention google analytics.
1102	1303744552000000	rgrp	(Same ticket created 3 times by accident I think -- see #1104).
1103	1303744575000000	rgrp	(Same ticket created 3 times by accident I think -- see #1104).
1104	1303744486000000	rgrp	"You haven't done paster search-index rebuild I think.

If you haven't the search index will not have been built (Create Test Data code creates data without indexing it). This could be considered a bug of Create Test Data but I'm not sure -- if you think so re-open this ticket and change description."
1104	1303920492000000	dread	I agree this should be fixed.
1104	1303920791000000	dread	Fixed on default cset:52a3fb230074 - create-test-data now indexes the package it creates.
1106	1303834069000000	rgrp	fixed in branch:defect-1106-bugs-with-routing.
1107	1310134646000000	thejimmyg	Child ticket of #954
1107	1320321170000000	dread	"Notes to complete this:
 * ckan/logic/action/get.py:'def package_autocomplete' exists and is the one that should be used
 * need to ensure all places in the templates and public/scripts use this action directly, not dataset/autocomplete (or its alias package/autocomplete)
 * ckan/controllers/package.py:'def autocomplete' should be removed.
 * ckan/config/routes.py dataset/autocomplete should be removed."
1107	1340632612000000	icmurray	autocomplete action has been deprecated in favour of /api/2/util/dataset/autocomplete : https://github.com/okfn/ckan/blob/master/ckan/controllers/package.py#L655
1108	1310128678000000	thejimmyg	Now that we are using ckan.net as thedatahub.org we should go full steam ahead and create a brand new UI to reflect thedatahub.org's new role. See http://ckan.org/2011/07/08/ckan-vision-update/
1108	1311180204000000	thejimmyg	See also comment on #1200 about using the pdeu theme.
1108	1314878772000000	zephod	"First, here is a repo with the new DataHub theme:
https://bitbucket.org/okfn/ckanext-datahub-theme

We plan to integrate this into ckan-core, thereby replacing the current theme. "
1108	1315140879000000	rgrp	Completed in https://bitbucket.org/okfn/ckan/changeset/9be1ae232ec3 cset:9be1ae232ec3
1109	1303862352000000	kindly	It is fixed now in 1.3.4.1.
1109	1303916487000000	dread	Close ticket?
1109	1304698621000000	dread	Did we decide that this facility for storing non-strings via the API is a new feature, rather than a bug?
1109	1305123852000000	dread	What's the status?
1109	1305124697000000	kindly	I am happy this is fixed in cset:445fc04333dd. 
1111	1304935139000000	lucychambers	"CKAN FAQ now complete (Sections 1,2,5,6 - needs uploading onto site): http://ckan.okfnpad.org/FAQ

At CKAN Community Meetup it was decided that Sections 3 and 4 would form a separate contributor's manual. "
1112	1304358643000000	dread	This is complete in the branch feature-1112-allow-search-all for release 1.3.5
1113	1304024611000000	kindly	cset: 52a3fb230074
1114	1304085484000000	dread	Done in cset:d7bd4b0f89de on default.
1115	1324054704000000	dread	Authorization groups deprecated with the Group refactor #1477
1116	1304358664000000	dread	This is complete in branch defect-1116-boolean-search-options for release-1.3.5
1117	1304277240000000	nils.toedtmann	"Oh, it *does* depend against python-pastescript. Ignore.

For some reason it was not (completely/correctly) installed with ckanext-datanl on us4, but is a different issue then. Might be due to missing locale ""en_GB.utf8"" and dpkg-configrue failing."
1118	1311174062000000	thejimmyg	"We haven't ever come across this. Perhaps if you could provide an example we can re-open it.

Cheers,

James
"
1119	1304104689000000	rgrp	" * Merged ckanext-upload into ckanext-storage
 * Got existing API systemin in ckanext-storage fully working (e.g. api section was broken -- maybe due to changed boto ...)
 * API now supports GET requests and JSONP where appropriate
 * Added auth form to API (could be useful for ajax form stuff going forward)
 * Improved UI of upload including having ckan based file links (using redirects)
  * Set uploaded-by field on uploaded files 
 * Checked on AWS And GS

Also did:
 * Improved ofs in various ways including change to standard metadata handling and improved testing (see e.g. https://bitbucket.org/okfn/ofs/changeset/36fac29b7775)
 * Tracked down [https://github.com/okfn/boto/commit/0d9635c8a9785c9b20b44ee93a0679c002961592 bug with boto and metadata updating on GS] and provided patch."
1121	1307358426000000	dread	We don't need to support JSON extras at the moment.
1122	1304368075000000	dread	@pudo I notice you tackling solr indexing of lists/tuples in ckanext-solr cset:ecc2d69df991 so have updated to use this on ckan.net and reindexed, but #1122 still seems an issue - any chance you can take a look?
1122	1305718009000000	dread	This user is now storing his list as a string so is happy. But I'll leave this ticket open, for pudo to decide whether there is an issue with SOLR indexing tuples/lists, as per the previous comment.
1122	1306662099000000	pudo	I don't think there's really a nice way to do this with the current solr indexing library, but I've commented out the list handling code which should really make handling this cleaner. 
1122	1306747706000000	dread	"Changing this to ""won't fix"" just to be clear"
1123	1307374691000000	dread	"I'll change the architecture to ""all"" as per this article:
http://linuxreviews.org/man/deb-control/"
1123	1307790563000000	thejimmyg	"This isn't necessarily a trivial thing. Let's get the build system for the packages stable before we start changing it all to support alternative architectures. Once the packaging is working well it would be trivial to switch those servers to amd64.

I'm sorry, but this isn't worth the investment in manpower at the moment."
1123	1307795508000000	rgrp	You can't get small amazon instances as 64 bit and many people's own machines are 32 bit. How costly is packaging no-arch exactly (it must be more than a simple 'switch' in the build if you are saying this is costly :-) )
1123	1311863798000000	nils.toedtmann	"Looks like the packages on apt.okfn.org are now architecture ""all"" - great. 

To avoid future confusion, i change this ticket's solution to ""fixed""."
1124	1304601771000000	nils.toedtmann	I installed the python-ckanext-solr package rom http://apt-alpha.ckan.org/datanl-dev onto us10/DataGM too, and it seems to work just fine, see http://datagm.test.ckan.net/package?q=manchester
1124	1323168132000000	thejimmyg	"Solr is now properly supported in the ckan-1.5 repository.

"
1124	1323168156000000	thejimmyg	Re-open this if it still affects DataGM.
1126	1304587078000000	dread	Fixed in cset:61bb142a6b7c for ckan v1.3.5.
1127	1304602084000000	wwaites	"The proposal is not comparable to PEP and DEP because the projects have vastly different requirements. The API stability needs of a programming language or an operating system (e.g. fundamental building blocks that you don't expect to change often or radically) are very different from a web application. The plone one is comparable.

The idea itself is a double-edged sword. It will promote stability which is good but can also tend towards rigidity and stagnation which is bad. Each added bit of bureaucracy and process means fewer people will be willing to collaborate or participate in improving the software.

Overall, -1.
"
1127	1304606094000000	dread	Fixed links
1127	1305128000000000	thejimmyg	This is great idea and it has taken on well. +1 from me. We can update/create new CREP policies as needed.
1127	1305458020000000	rgrp	"I'm obviously a strong +1 but feel we should stick with the CEP name (we have PEP and DEP and CREP really does sound weird compared to CEP).

Also I think we may need to do a bit more to clarify when you just do a good ticket and when one does a CEP (looking at what has occurred already). I think this may be one reason to keep CEPs separate in drafting from trac as will clearly distinguish CEPs from standard tickets. "
1127	1305458489000000	rgrp	one other thing: i think the plan is for CEPs to be in restructured text (for easy transfer to docs). This should be mentioned and the template in the wiki should be in ReST.
1128	1310567803000000	dread	"Loader in ckanext/bin/loadscotland.py.
Done upload to ckan.net:

{{{
(pyenv-ckanext)dread@dread-laptop:~/hgroot/ckanext$ scotland_loader -k xyz -H http://ckan.net/api /home/dread/ckan-local/data/scotland-2010-10-18.csv
/home/dread/hgroot/pyenv-ckanext/lib/python2.6/site-packages/pylons/templating.py:610: UserWarning: Unbuilt egg for setuptools [unknown version] (/usr/lib/python2.6/dist-packages)
  Engine = entry_point.load()
No handlers could be found for logger ""vdm""
2011-07-13 15:29:17,983 INFO  [ckanext.importlib.loader] Loading scottish_neighbourhood_statistics
2011-07-13 15:29:20,109 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:22,089 INFO  [ckanext.importlib.loader] Loading traveline_scotland
2011-07-13 15:29:24,579 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:27,045 INFO  [ckanext.importlib.loader] Loading sqa_qualifications
2011-07-13 15:29:30,869 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:32,561 INFO  [ckanext.importlib.loader] Loading scotxed
2011-07-13 15:29:34,017 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:35,286 INFO  [ckanext.importlib.loader] Loading iscjis_vocabularies
2011-07-13 15:29:36,592 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:37,782 INFO  [ckanext.importlib.loader] Loading ecare_multi-agency_store_data_model_and_vocabulary
2011-07-13 15:29:39,043 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:40,267 INFO  [ckanext.importlib.loader] Loading digital_archive_scottish_archive_network
2011-07-13 15:29:41,690 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:43,727 INFO  [ckanext.importlib.loader] Loading the_scottish_register_of_tartans
2011-07-13 15:29:45,159 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:46,816 INFO  [ckanext.importlib.loader] Loading scotlands_images
2011-07-13 15:29:48,563 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:49,983 INFO  [ckanext.importlib.loader] Loading national_library_of_scotland
2011-07-13 15:29:51,709 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:53,122 INFO  [ckanext.importlib.loader] Loading scottish_government_statistics
2011-07-13 15:29:55,857 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:29:57,118 INFO  [ckanext.importlib.loader] Loading scotbis
2011-07-13 15:29:58,883 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:00,264 INFO  [ckanext.importlib.loader] Loading historic_scotland
2011-07-13 15:30:02,086 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:03,609 INFO  [ckanext.importlib.loader] Loading scheduled_monuments_in_scotland
2011-07-13 15:30:05,057 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:06,987 INFO  [ckanext.importlib.loader] Loading scotlands_house_prices_service_consumer_information
2011-07-13 15:30:08,687 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:09,932 INFO  [ckanext.importlib.loader] Loading air_quality_in_scotland
2011-07-13 15:30:11,278 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:12,637 INFO  [ckanext.importlib.loader] Loading river_and_coastal_flooding_updates_for_scotland
2011-07-13 15:30:13,940 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:15,637 INFO  [ckanext.importlib.loader] Loading public_contracts_scotland
2011-07-13 15:30:17,280 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:18,666 INFO  [ckanext.importlib.loader] Loading scottish_government_consultations
2011-07-13 15:30:20,673 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:22,234 INFO  [ckanext.importlib.loader] Loading scottish_public_health_observatory
2011-07-13 15:30:24,025 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:26,297 INFO  [ckanext.importlib.loader] Loading scotlands_information_landscape
2011-07-13 15:30:28,308 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:29,758 INFO  [ckanext.importlib.loader] Loading isd_scotland
2011-07-13 15:30:31,847 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:33,074 INFO  [ckanext.importlib.loader] Loading scotlandspeople
2011-07-13 15:30:34,541 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:35,754 INFO  [ckanext.importlib.loader] Loading general_register_office_for_scotland_statistics
2011-07-13 15:30:37,273 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:39,330 INFO  [ckanext.importlib.loader] Loading baseline_scotland_-_groundwater_chemistry_data
2011-07-13 15:30:40,716 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:41,919 INFO  [ckanext.importlib.loader] Loading the_centre_for_the_study_of_retailing_in_scotland_data_sets
2011-07-13 15:30:43,275 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:44,515 INFO  [ckanext.importlib.loader] Loading growing_up_in_scotland
2011-07-13 15:30:46,215 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:47,582 INFO  [ckanext.importlib.loader] Loading scottish_parliament_msp_allowances
2011-07-13 15:30:49,580 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:51,272 INFO  [ckanext.importlib.loader] Loading scottish_government_ministerial_hospitality
2011-07-13 15:30:53,764 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:55,642 INFO  [ckanext.importlib.loader] Loading scottish_government_expenditure_over_25000
2011-07-13 15:30:58,012 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:30:59,674 INFO  [ckanext.importlib.loader] Loading scottish_local_government_financial_statistics
2011-07-13 15:31:01,869 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:03,382 INFO  [ckanext.importlib.loader] Loading scottish_government_disclosure_of_high_earners
2011-07-13 15:31:07,086 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:11,493 INFO  [ckanext.importlib.loader] Loading scotlands_places
2011-07-13 15:31:14,452 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:31,743 INFO  [ckanext.importlib.loader] Loading scottish_national_heritage_facts
2011-07-13 15:31:36,223 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:37,830 INFO  [ckanext.importlib.loader] Loading scottish_natural_spaces
2011-07-13 15:31:40,245 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:41,764 INFO  [ckanext.importlib.loader] Loading scotland_national_address_gazetteer
2011-07-13 15:31:43,810 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:45,069 INFO  [ckanext.importlib.loader] Loading scottish_environment_protection_agency
2011-07-13 15:31:47,975 INFO  [ckanext.importlib.loader] ...creating package
2011-07-13 15:31:49,525 INFO  [ckanext.importlib.loader] Loading traffic_scotland
2011-07-13 15:31:52,396 INFO  [ckanext.importlib.loader] ...creating package
}}}"
1128	1310568028000000	dread	Note, I added a title column and made one or two minor corrections that I spotted - see attached CSV for the result.
1129	1305116419000000	thejimmyg	"Great proposal, here's my thinking:

 * The current VDM model (where we have things like a single package table which logs changes to a package_revision table) is very well tested and works well and we should only consider a radical change with good reason
 * Although we are making a move from *model objects* being the central components to the *logic layer functions* being the central components, there is no need yet to have the database structures we store (for revisioning or otherwise) start to look like the dictized representation. The logic layer itself is designed to do that mapping.
 * Since we do have this logic layer though, there is less need for ""magic"" SQLAlchemy objects to support dicts and lists (eg the stateful objects used to make a list of tags on a package behave like a list), a few simple (and easily debuggable) queries in the logic layer would work better.

In the longer term we may want to look at serialising more dictized-looking objects and that may lend itself to a more dictized changeset model or even a more dictized storage system (eg no-SQL) but for the time being we are not at that point.

I recommend the following:

 * We continue to use the current default branch of VDM (not the changeset branch)
 * We continue to treat the package table (and other non-revision tables) as the most recent revision (even though the *active* revision displayed in CKAN might well be in the revision tables because more recent changes haven't been moderated yet)
 * We slowly stop using stateful lists and dicts in CKAN because we have move control with explicit queries in the logic layer

Sound good?
"
1129	1305139980000000	rgrp	"It seems like this ticket is getting a bit confused with ticket:1076 (changes re vdm) :-)

Some general conclusions relevant to both:

 * General feeling is not to change to changeset model
  * I'm personally +0 on changeset model
  * I would note main benefit is simplicity and orthogonality of changesets to core system. I also think cost of change is small.
  * That said we can simplify current model as well.
 * There seems some misunderstanding: change to have logic layer has almost nothing to do with being able to remove main stateful stuff in vdm. To be able to remove most of stateful stuff in vdm requires us to make some other changes (re foreign keys from revision objects to continuity)
 * There are other simplifications we should make to vdm before embarking on this (e.g. move to SessionExtension from MapperExtension). This is easy as that work has been done in changeset branch and can be backported.

What I don't see in this CEP as yet is any discussion of the complexities around pending stuff (e.g. do we allow multiple pending, do new edits get shown current or latest pending). I'll try and comment more on this but a lot of this was in original vdm discussion last summer."
1129	1305209601000000	rgrp	"Replying to [comment:2 rgrp]:
> It seems like this ticket is getting a bit confused with ticket:1076 (changes re vdm) :-)

I of course ;0 meant ticket:1077"
1129	1305212467000000	kindly	">  * There seems some misunderstanding: change to have logic layer has almost nothing to do with being able to remove main stateful stuff in vdm. To be able to remove most of stateful stuff in vdm requires us to make some other changes (re foreign keys from revision objects to continuity)

The logic layer does not automatically help out, however it makes our life easier if we want to handle state ourselves.  For example take package tags, if we remove the stateful_m2m properties and just use normal sqlalchemy relations. We will still want statefullness (i.e active, pending, deleted) on the package_tags table. We should update those on the table ourselves in the  logic layer.

>  * There are other simplifications we should make to vdm before embarking on this (e.g. move to SessionExtension from MapperExtension). This is easy as that work has been done in changeset branch and can be backported.
I agree but event thought the MapperExtension way is not great, it is very well field tested."
1129	1325268100000000	rgrp	More UI work remains in #1141
1130	1340633514000000	icmurray	Unassign for triage.
1131	1305537897000000	dread	Fixed on branch release-v1.3.5 cset:3461ed6bab0c
1132	1307352675000000	dread	"Yes, these are apparently search-related and so are skipped when testing under sqlite. See README.rst for more info.

Compare with this:
{{{
$ nosetests --ckan --with-pylons=test-core.ini ckan/tests/functional/test_authz.py

............................................
----------------------------------------------------------------------
Ran 44 tests in 69.287s

OK
}}}"
1133	1324057072000000	dread	"Works for me - change occurs successfully.
{{{
(pyenv-ckan)dread@dread-laptop:~/gitroot/ckan$ paster rights add russianfan admin warandpeace
/home/dread/gitroot/pyenv-ckan/lib/python2.6/site-packages/pylons/templating.py:610: UserWarning: Unbuilt egg for setuptools [unknown version] (/usr/lib/python2.6/dist-packages)
  Engine = entry_point.load()
User russianfan -> is admin on -> Package warandpeace
(pyenv-ckan)dread@dread-laptop:~/gitroot/ckan$ paster rights
/home/dread/gitroot/pyenv-ckan/lib/python2.6/site-packages/pylons/templating.py:610: UserWarning: Unbuilt egg for setuptools [unknown version] (/usr/lib/python2.6/dist-packages)
  Engine = entry_point.load()
22 results
User visitor -> is editor on -> Package annakarenina
User logged_in -> is editor on -> Package annakarenina
User testsysadmin -> is admin on -> System system
User logged_in -> is editor on -> System system
User visitor -> is reader on -> Group david
User annafan -> is admin on -> Package annakarenina
AuthorizationGroup anauthzgroup -> is reader on -> Package warandpeace
User visitor -> is editor on -> Package warandpeace
AuthorizationGroup anauthzgroup -> is editor on -> Group david
User logged_in -> is editor on -> Package warandpeace
User logged_in -> is reader on -> Group david
User visitor -> is reader on -> Group roger
User logged_in -> is reader on -> Group roger
User russianfan -> is admin on -> Package warandpeace
User visitor -> is admin on -> Package warandpeace
AuthorizationGroup anotherauthzgroup -> is editor on -> AuthorizationGroup anauthzgroup
User russianfan -> is admin on -> Group roger
User russianfan -> is admin on -> Group david
AuthorizationGroup anauthzgroup -> is admin on -> AuthorizationGroup anotherauthzgroup
User visitor -> is anon_editor on -> System system
User visitor -> is admin on -> Group roger
AuthorizationGroup anauthzgroup -> is editor on -> System system
}}}
Tests would be nice, but it currently works, is only for admins and is therefore not as high priority as other other tests, such as front-end js."
1134	1305125228000000	thejimmyg	"Great stuff.

Yes, I agree with all this, but as initial thoughts I suggest that for phase 1, the info() method returns one more key called ""form_config_interface"" which takes a string representing a the type of interface for the config field on the form. If the key is missing it is treated as ""None"".

The two possible values are:

None - the field is not present and must always be stored as NULL
Text - a single text field will be provided on the interface

Whatever the interface, the value built will always be stored in the config column of the table.

We then also provide a ""get_schema()"" method that returns a schema cablable of parsing the data submitted by the form and storing it as a single key named ""config"". ckanext-inspire will then add other functions to the schema for URL etc so that regardless of what the harvest plugin does, the key fields ckanext-harvest are always there.

This then allows:
* Customiseable config interfaces
* Customisable valiation
* A consistent place to store config in the database

Sound good?"
1134	1305623531000000	sebbacon	"Agreed with James that we should consider *from the start* how to provide for a nice UI -- my worry is if we start out with people editing raw JSON we'll end up keeping that for years :)
"
1135	1305210134000000	rgrp	"Work on this is largely complete in changeset branch: https://bitbucket.org/okfn/vdm/src/changeset/

Overview docs: https://bitbucket.org/okfn/vdm/src/changeset/doc/changeset.rst"
1135	1340632267000000	icmurray	Re-assigned to kindly
1136	1305210925000000	rgrp	"Most of this change has been implemented in the changeset branch [1] but could be backported reasonably easily to main.

[1]: https://bitbucket.org/okfn/vdm/src/changeset/"
1136	1305216218000000	kindly	This would be nice but it is not necessary.  The current mapper implementation may be nice but not is battle tested..
1136	1305217553000000	kindly	"Replying to [comment:2 kindly]:
> This would be nice but it is not necessary.  The current mapper implementation may be nice but not is battle tested..

I meant the mapper extension ""IS"" battle tested. "
1136	1340632980000000	icmurray	Re-assigned to @kindly.
1137	1305211672000000	rgrp	"Most of this change has been implemented in the changeset branch [1] but could be backported reasonably easily to main.

[1]:  https://bitbucket.org/okfn/vdm/src/changeset/"
1137	1305217449000000	kindly	"I am not sure this needs to be done.  I think we should keep the continuity object always in the table, even if it is deleted.  The querying should be done through the logic layer so the deleted state should not be an issue.

The clients should be entirely state aware.

The only thing that needs to be done is to remove all statefullness of relations.  These are the only things that are complicated.

This would make vdm just a simple copy on write mechanism, with the client controlling the state."
1138	1316965357000000	rgrp	Cannot see this issue any more on default (as deployed on e.g. test).
1140	1312491320000000	kindly	"fixed cset:987da68ea4f6

The package group table needed to trigger a reindex of the package.

"
1140	1312537257000000	dread	Broken since CKAN v1.1. I have added this fix to v1.4.2 and v1.4.3 releases.
1141	1308828928000000	dread	"I've merged this into default in preparation for release 1.4.2, but there may be a couple of useful additions that could be done on this or another branch/ticket.

Getting a package at a specified revision is really useful. This can be used:
* links in the package history (#103) (while in there, the 'moderated' flag should be shown in the package history too if not already)
* should also be added to the package API (as a replacement for the AJAX call?)

The history_ajax call looks like an almost duplicate of the Package Revision API. Can these be merged and put just in the API?
"
1141	1318862183000000	dread	What's the status of this now? The ckanext-moderatededits README still says you need a branch of ckan. Can you say which version of CKAN is required instead? I say we close this if ajax call is now in a better place in the API. (I expect it is now, with the logic layer).
1141	1318862773000000	johnglover	Well, it runs on datacatalogs.org with the current default so CKAN 1.5, but it needs quite a bit of updating to work with all of the new 1.5 UI changes, and as it has been a low priority for quite a while I haven't scheduled time to work on it. Really I would need to spend a few days on it to tidy it up for standard 1.5.
1141	1325352507000000	dread	Closing, with remaining tidy up work for newer CKAN versions split off into new ticket: #1604
1142	1305880901000000	sebbacon	"The guys at Wikimedia also produced this spreadsheet including notable
users and features of other software. Could be useful.:
https://spreadsheets2.google.com/ccc?authkey=CLWu1cgP&hl=en&key=tYiwc9kUVLLlALOQEzFqujw&hl=en&authkey=CLWu1cgP#gid=0
"
1142	1305881244000000	lucychambers	"Replying to [ticket:1142 rgrp]:
> Previous super ticket (from 3m ago): http://trac.ckan.org/ticket/927
> 
>  * CKAN 1-page overview (for enterprise and for data hackers)
>  * Administrator's Guide (including install)
>  * Extensions Guide
>  * Separate CKAN.net info from Software Documentation (?)
> 
> == Minor Items ==
> 
* Include guide on  how to configure  local filesystem storage, instead of Google storage. (http://lists.okfn.org/pipermail/ckan-discuss/2011-May/001235.html)
"
1142	1308326118000000	annapowellsmith	"List of new docs tasks agreed by APS and RGRP:

 * Tutorial on the wiki (long-term): Integration with Wordpress and Drupal and Javascript
 * Overview of domain model both for average users and for devs
 * 2-page glossy brochure
 * Vision for CKAN http://notebook.okfn.org/2011/04/27/data-hubs-data-management-systems-and-ckan/
 * Comparison : use http://wiki.ckan.net/Related_Software as starting point - build on wiki - Socrata and OGDI
 * Renaming: separation between ckan.org and ckan.net
 * More documentation in the code ...
 * Config options generated from code or move this to WUI ...

See also proposed overhaul at  http://wiki.ckan.net/Documentation_Plans"
1142	1313775665000000	rgrp	This was completed 4 weeks ago and can now be marked as complete. See http://docs.ckan.org/ and http://wiki.ckan.net/ and http://ckan.org/
1143	1307024681000000	dread	"All done in ckanext-stats cset:bc54790cacd4 (apart from ""fix x axis to start at first revision"" which was not a problem after all)"
1148	1305969925000000	kindly	complete cset:96a43c9d8bd7
1149	1305971672000000	kindly	cset:b1634d405066
1149	1306090663000000	kindly	"Failed dgu tests due to as_dict not working on deleted objects.

fixed by cset:c9b9cf513e44"
1150	1311178163000000	thejimmyg	"Hi John,

Can you please check that the new webstore+preview works correctly with this one too please?

Cheers,

James"
1150	1311774141000000	johnglover	Unicode data should be fine in the new datapreview code, for example: http://test.ckan.net/package/afghanistan-election-data
1151	1330908188000000	rgrp	Not sure we will be able to fix this easily as we need a dataproxy for general case. Think it better to focus on the case where data in DataStore and we use Recline. As such closing as wontfix for the present.
1152	1307352165000000	amercader	Bumping to ckan-v1.5-sprint-3 and updating the CC email addresses so people actually get any updates.
1154	1314120497000000	johnglover	Fixed in core (branch feature-1275-solr-search).
1154	1314177477000000	dread	"Looking at the changeset, it now does a connection check at start-up of CKAN. If it fails then CKAN runs but doesn't show any packages, apart from via the Tags interface, and the search page and widget on the front-page are removed. (BTW Is this a useful thing to do? Without search, perhaps CKAN should simply not start?)

I believe the problem pudo is referring to is temporary periods when the SOLR server is slow/overloaded/down. During this time pudo and I get exception emails saying connection failed for request. e.g.
{{{
Module ckan.controllers.home:29 in index
<<          query = query_for(model.Package)
               query.run(query='*:*', facet_by=g.facets,
                         limit=0, offset=0, username=c.user)
               c.facets = query.facets
               c.fields = []
>>  limit=0, offset=0, username=c.user)
Module ckan.lib.search.common:115 in run
<<          self.query = QueryParser(query, terms, fields)
               self.query.validate()
               self._run()
               self._format_results()
               return {'results': self.results, 'count': self.count}
>>  self._run()
Module ckanext.solr.backend:63 in _run
<<              # this wrapping will be caught further up in the WUI.
                   log.exception(e)
                   raise SearchError(e)
               finally:
                   conn.close()
>>  raise SearchError(e)
SearchError: [Errno 111] Connection refused
}}} (recently from nl.ckan.net)"
1154	1314178325000000	johnglover	"> Looking at the changeset, it now does a connection check at start-up of CKAN. If it fails then CKAN runs but doesn't show any
> packages, apart from via the Tags interface, and the search page and widget on the front-page are removed. (BTW Is this a 
> useful thing to do? Without search, perhaps CKAN should simply not start?)

When discussing the ticket we agreed that we should allow ckan to start without search. It is possible that people simply want to list/view information without searching for it and we decided not to prevent them from doing so.

> I believe the problem pudo is referring to is temporary periods when the SOLR server is slow/overloaded/down. During this 
> time pudo and I get exception emails saying connection failed for request.

Ok, other options then:

 * if an error occurs during search, return 0 results
 * if an error occurs during search, redirect to a generic 'search is unavailable' page
 * if an error occurs during search, retry the query a certain number of times before giving up and doing one of the above.

What do you suggest?"
1154	1314179290000000	dread	"Search requests - option one seems like a bad user experience, and option three seems too complicated. I should do option 2, explain it may well be a temporary problem, and let the user press reload, as per any normal web request.

A more difficult problem though is what to do about a failed search indexing. Because of the try/except catch we've had until the patch yesterday, we get no exception emails for this, but I'm worried that this has caused packages to not be indexed, and hence are essentially lost in CKAN (unless someone realises there is a problem and does a reindex at some point).

BTW I added paster command 'search-index check' for looking at this problem, but I don't think it was ever added to solr. Is it easy to add get_all_entity_ids for the purpose of checking for this problem?"
1154	1314191496000000	johnglover	"Ok I'll implement option 2 for search query issues.

Yes it is easy to get a list of IDs from Solr so I'll have a look at that command and make sure that it works. I think a case could be made for not allowing a package to be added if it cannot be indexed however, and making the user simply retry the request."
1154	1314192324000000	dread	Yes, forcing a retry may be possible, although I guess on these occasions you'd be looking at rolling back the creation of the package object too, which is not really in the spirit of the notifications system at present. This is why we had the queue for solr for occasions like this - is it here no longer?
1154	1314192753000000	johnglover	Not in core, there is a queue feature in the extension still which I could add to core. I think though it was a case of using either the queue or synchronous search, I don't think it would automatically fall back to the queue if there was an indexing problem, but we could look at that. Was there not talk of changing the queue system recently though? There are also no tests for the Solr queue so that would take a bit of work as well.
1154	1314193633000000	johnglover	RE search queries failing: Just having a look through the controller code and the package search controller and the search api  both perform option 2 already, so I'll just update the home controller.
1154	1314195684000000	dread	"Ok, I chatted to David about this and we feel it should go like this: notification to search indexer fails and raises an exception, this gets passed through the notification system back up to the code that creates the package, and you do a roll back. Does this tally with what you mentioned in the last comment or is what's there better?

Thanks for the info on the queue and ckanext-solr. It sounds like this isn't deployed successfully anywhere (or does pudo know if it is?). In this case we should be clear that it is not what it says it is: ""This extension adds support for package search using Apache Solr to CKAN"" and maybe simply mark it as deprecated. Pudo what do you think?"
1154	1314196683000000	johnglover	"> Ok, I chatted to David about this and we feel it should go like this: notification to search indexer fails and raises an exception, 
> this gets passed through the notification system back up to the code that creates the package, and you do a roll back. Does this 
> tally with what you mentioned in the last comment or is what's there better?

This sounds good to me, definitely better than what is currently there.

> Thanks for the info on the queue and ckanext-solr. It sounds like this isn't deployed successfully anywhere (or does pudo
> know if it is?).

I'm not actually sure if the queue works or not, but if it does I'll have to write some tests for it before we could add it to core. A working queue system would be useful generally however, as there are other things that it would be useful for (such as QA), but yes, going forward the Solr extension should really be deprecated."
1154	1314287519000000	johnglover	"All attempts to index packages should now throw a SearchIndexError if Solr is unavailable and the create/update will be rolled back. These errors are caught in the main package controller (redirecting to an error page) and the API controller. I have added tests for both controllers.

Also updated the paster 'search-index check' command to work with solr."
1155	1306773174000000	pudo	"Now implemented based on CSV export available on the catalogue page: 

 * http://data.london.gov.uk/catalogue"
1156	1306855111000000	pudo	Both are now implemented but may need further work to adhere to developing conventions wrt to location etc. 
1159	1307615133000000	pudo	Rudimentary RDFa has been added with seeAlso to API. 
1161	1306408026000000	amercader	Duplicate of #1157
1164	1308647224000000	amercader	Done. See it in action here: http://publicdata.eu/map
1165	1306413953000000	nils.toedtmann	this is similar, but not equal to #1096
1165	1307444733000000	nils.toedtmann	See also http://ckan.okfnpad.org/multisite
1166	1306847326000000	thejimmyg	Also, rather than INSPIRE=true we should probably have information about the harvesting mechanism and the harvest object type? This also relates to our use of the kind field on the resource.
1166	1317381932000000	amercader	Fixed on d5bee3de9957
1167	1306856992000000	sebbacon	"Yes to all the above.

Further question: which extensions should be installed as standard?  I would argue:

 * ckanext-stats
 * ckanext-googleanalytics
 * ckanext-disqus
 * ckanext-solr (implies installing a running solr, too...)
 * ckanext-follower
 * ckanext-admin

Note that googleanalytics and disqus both require user accounts set up at the corresponding service.  Not sure how we would handle this in the instance setup.
"
1167	1306857142000000	sebbacon	Another thing to consider: how do we ensure we keep a single, up-to-date version available?  (I'm thinking wrt developer / sysadmin workflow)
1167	1306857750000000	thejimmyg	"Creating the AMI is really just the icing on the cake. The hard bit is getting the packaging right so that's where we need to concentrate first. Once the packaging works we just make sure apt-get upgrade is run regularly.

+1 to the list above.

I also agree we should install solr by default. Who has actually done a CKAN solr install? I haven't but together with whoever has I can try to package it up.

Wrt to usernames and passwords, I'll look into how dpkg manages those blue pop-up screens for entering configuration options."
1167	1307358318000000	dread	"debconf seems the preferred way to question the user post-install and run setup scripts. It seems a bit of a faff. 

The person that is able to spin up an EC2 instance is no doubt technically able enough to follow a couple of instructions in README.txt saying edit /etc/ckan/<instancename>/<instancename>.ini and add your Google Analytics credentials. So I don't think this ticket is the driver for a debconf setup."
1167	1311178516000000	thejimmyg	"I've now written a 20 page guide on using CKAN on Amazon EC2. I haven't explicitly created an AMI, but I don't think we should do that anyway for a few reasons:

 * it is fiddly
 * there is no advantage to the user as CKAN installation is so easy and so well documented
 * we don't want to have to maintain the image going forward
 * we might not want to promote a non-open approach

The guide will form part of Anna PS's work on the overall documentation but you can also see the original version here:

https://bitbucket.org/okfn/ckan-debs-public/src/489a5ecf369f/ec2/"
1168	1310134901000000	thejimmyg	This is now working on dgu-buildbot.okfn.org. The code that manages it is partly the repo.py script from http://hg.3aims.com/public/BuildKit/ and partly the fab code in https://bitbucket.org/okfn/buildbot-scripts
1168	1310396585000000	dread	This might run manually on the us7, but the buildbot is not running these automatically or any sort of testing, which is what this ticket is about.
1168	1325866142000000	thejimmyg	"Quick update... we now have:

 * An automated way to build the deb packages
 * An automated way to install them into a fresh virtual machine

We don't currently run them via buildbot or have smoke tests.
"
1169	1306754833000000	dread	Done on default. Will appear on ckan.net next time it is branched and updated.
1170	1306864422000000	dread	Done in cset:4d2d0857281f on default
1171	1347358705000000	ross	"I have implemented this on the datahub, but this change likely needs to be made to CKAN core. Probably as part of 2.0.

The format on tdh is currently:

${TITLE}. ${AUTHOR}.
Retrieved ${UTC time}.
${DATASET LINK}

Best discuss and agree on what format should be supported. Mark, I've assigned this to you as it is tagged academia ;)

"
1172	1312991332000000	dread	I've started this on branch defect-1172-exceptions
1172	1314118281000000	dread	"Is in cset:47225f03e2af and merged to default for 1.4.4.

It now barfs instead of failing silently:

* if the ckan config file has any errors
* search indexing error

There are some other ""except Exception"" statements "
1172	1314118883000000	dread	"I took out ""raise"" by mistake in ckan/lib/search/worker.py:26 but John has added it in in the corresponding place in ckan/lib/search/__init__.py on branch feature-1275-solr-search anyway."
1173	1307000249000000	pudo	"I propose we do a bit of frameworkiness here: set up a two-part content type registry and refactor the API controller to use it. 

The idea would be to do the following things: 

1. Create a registry mapping format extensions to mime types: RepresentationRegistry.add_format('json', 'application/json')
2. Create a registry of (mime types, entity types) -> converter functions that yield an appropriate representation of the entity. 
3. Hook this into the _finish method of the API controller based on Accept: handling
4. Add support for /api/rest/ENTITY/NAME.{format} and /ENTITY/NAME.{format} to routing, use registry from (1) to rewrite accept headers. 
5. Register converters in load_environment or via IConfigurable plugins
6. Document

What do you think? 
"
1173	1307615271000000	pudo	Now available in ckanext-rdf and linked to from WUI. 
1174	1307615200000000	pudo	"wontfix as thejimmyg wants to turn REST API into RPC API and this doesn't fit in. 

Not an excellent plan in my idea but this is to be discussed elsewhere. "
1175	1307350866000000	dread	Flavio, can you post here the exception that you get?
1175	1307372833000000	fccoelho	Thats the thing, I don't get any error message, no even in the logs. But I can't even load a page.
1175	1314030683000000	dread	Hi Flavio, is this still a concern? I'd like to close this ticket unless you can provide details of the error from your logs or exception email.
1175	1325355170000000	dread	This error (which will be in the apache or ckan log) must be unrelated. Stats extension runs fine elsewhere.
1176	1310557852000000	dread	This is occurring several times a day now - James can you suggest what's happening?
1176	1314273012000000	dread	"This occurs when you browse {{{/error/document}}} directly, rather than being directed there on error. In this case there is no 'original_response'.

Fixed in cset:c67d5934fb0b for ckan 1.4.3 and merged to default."
1177	1307360643000000	rgrp	What revision of the CKAN code are you using (do hg id to get revision if installing from source). Have you modified the package template in any way? Have you restarted apache after upgrading?
1177	1307361157000000	fccoelho	"to upgrade I used the method describeb on bitbucket, after upgrading pip-requirements:

pip -E pyenv install -r pip-requirements.txt

after that I did a 

paster --plugin ckan db upgrade --config ckan.emap.fgv.br.ini

the revision id on my pyenv/src/ckan is:
5730c79db461+ tip

yes, I have restarted apached after upgrading"
1177	1307365496000000	rgrp	"The issue here is that the line should never be reached because g.has_commenting should be False: https://bitbucket.org/okfn/ckan/src/5730c79db461/ckan/lib/app_globals.py

@Flavio: have you modded your code in any way? is self.has_commenting False in your app_globals.py

A quick fix would be to remove the template lines calling to remove the lines in the template:

{{{
${h.subnav_link(c, h.icon('comments') + _('Comments &amp; Questions'), controller='package', action='comments', id=c.pkg.name)}
}}}"
1177	1307366621000000	fccoelho	"I have not modded the code in any way... 

I'll look for those lines in the template.which template is it? read.html does not have a line such as this."
1177	1307367354000000	fccoelho	OK I did an fgrep on all package template and found the line on layout.html, I'll comment the block and test.
1177	1307367923000000	fccoelho	"Ok it fixed it! 

thanks a lot!!

Is there any side effects to the removal of this line, I should know of?"
1177	1307374897000000	dread	"I think rgrp was suggesting you have mistakenly set has_commenting to ""True"" in app_globals or elsewhere. But either way, this should have no side-effects."
1178	1308045351000000	rgrp	Fixed. This was due to incorrect config of bucket option.
1180	1307544223000000	dread	"Both issues solved using a whitelist on anchor tags. 

Second issue was a link with unicode expression of the quote. e.g. <a href=\u201dsomelink\u201d>somelink</a>"
1181	1307532816000000	dread	Fixed in ckan default in cset:72f7d48d7f31. Have left Package url and Resource url links though, as these are the key links we want google to see. So we need to check these carefully for spam.
1183	1311181719000000	thejimmyg	"Hi John,

Can you have a look at this one too please?

Cheers,

James
"
1183	1311771069000000	johnglover	Fixed in new datapreview code (currently running on the test.ckan.net), which now gets the preview data from a webstore instead of the dataproxy API. It also only now shows a preview button for resources that were successfully archived and saved in the webstore.
1186	1310556519000000	dread	This was done by pudo in branch feature-1198-mailer and went into default, lined up for release 1.4.2.
1187	1308143605000000	dread	"Also stopped creating revision for user edits.

Done in cset:795ccd6405ba for 1.4.1 release"
1189	1323173227000000	thejimmyg	Closing this ticket in line with ticketing policy since it is over 6 months old. If someone would like to develop an extension that uses spideroak as a back end we can look at it again.
1190	1320143592000000	rgrp	A very substantial portion of this got done as part of 0.5 including the webstore #1208 and the majority of automated conversion #1398. #1432 is currently deferred so we're going to close this ticket on basis that item (3) is now out of scope.
1191	1308650930000000	dread	Done in cset:c3822feffb38 for 1.4.1 release
1192	1308337652000000	dread	"I really think forms are a key asset of CKAN, and keeping the docs about customising and integrating them is important - i.e. forms.rst and forms-integration.rst. There are ideas being suggested for replacing bits of front-end, but forms hard to do, and David's new system is a significant offering on top of the CKAN back-end, so it seems crazy to me to abandon it.

forms.rst has been updated by David Raznick in the release_v1.4.1 branch.

i18n.rst - include here the creation of the pot file, deploying a translation, transifex admin

load-testing.rst - I think performance should be mentioned in the glossy guide (some sort of basic metrics of speed profile, to return web pages, run searches and API operations, for 100 or 1000 packages, on a given spec machine) and have it based on a report showing how we measured it. The report would look a bit like this file, and it might do as a stub, but it seems pretty lacking.

distributed.rst - agreed, remove.

design.rst - agreed, delete.

loaders.rst / loader_scripts.rst - yes move to wiki

feeds.rst - this should be split into a tutorial for the wiki and the reference page left in sphinx

importer.rst - this should be moved to ckanext-importer/doc

admin.html - this has already gone in 1.4.1

authorization.rst - This is a bit jumbled. We're talking about changes to the code, so maybe not worth working hard to make this good, so I suggest leaving it, but delete the boring section ""Requirements and Use Cases"".

deb.rst - this is an administrator task, so should stay why move this to the wiki?

buildbot.rst - ok to stay here?

vm.rst - I assume there's no problem with this"
1192	1310135468000000	thejimmyg	This is now a child ticket of #1142
1192	1312191462000000	rgrp	Marking this as closed as Anna has completed and this is now deployed at http://docs.ckan.org/.
1193	1309768960000000	kindly	fixed cset:87d6140e06ad
1194	1317043212000000	dread	"Suggest changing this to ""Welcome, Rob"" rather than ""Welcome back, Rob"", avoiding the problem."
1194	1317053674000000	dread	Done in cset:49e2c05e69ea
1194	1317053688000000	dread	Will go into ckan 1.5.
1195	1311332049000000	dread	Also this one: http://ckan.net/storage/f/file/
1195	1311841763000000	rgrp	Fixed in https://bitbucket.org/okfn/ckanext-storage/changeset/49734285f1ef
1196	1308743857000000	dread	"Reason here:

http://www.freewisdom.org/projects/python-markdown/Tickets/000018

Using the suggested workaround. Fixed on default for 1.4.2 in cset:715212cd220c"
1197	1340010256000000	toby	"personally I'm against these for 4 reasons

a) The site should be self explanatory and if it is not this is a failure of design

b) a cookie would be needed to prevent these happening all the time - cookies are bad as they interfere with caching proxies.

c) I find stuff like this patronising/annoying for the user

d) They are a maintenance burden for ckan as we do not have a single instance

Therefore I'd suggest closing this as a won't fix - I agree this is just a personal view point and therefore am not going to actually close the ticket but just record my opinion."
1197	1340018903000000	seanh	"Hi Toby, yes I think I agree with you, it reminds me of when I install new Android apps on my phone, some of them start off by bothering me with some sort of guided tour or long instructional text, I hate this and always skip through without reading it, expecting to be able to figure out the interface for myself.

The one thing that something like this could be useful is, rather than showing someone how to use the site, showing them what the site is capable of so they can assess whether it meets their needs/is something they're interested in. However, we already have a good guided tour of this type on ckan.org/features, those pages are really pretty good.

Close this as wontfix?"
1197	1340019675000000	toby	"Thinking horrible thoughts, there was a rumour of a ckan tour, for something like that this would be useful.

Not sure where that plan is at?  if there is a ticket for it maybe link to this one and close?"
1197	1340020357000000	seanh	"AFAIK there isn't a ticket for that, it was something originally requested as part of the demo site, but since the devs think it's a horrible idea I don't think it's going to happen, easiest way to make a CKAN tour would be a series of static pages like the one we already have on ckan.org, I think that combined with a real functioning demo site probably meets the requirement.

Anyway, closing this as wontfix"
1198	1308821489000000	pudo	"This ticket is essential I think. I would propose we should be a bit more radical here, though: 

 * Introduce an ""Agent"" SQLAlchemy object and derive both publishers and users via single table inheritance. 
 * Make agent the central object of authorization, e.g. by introducing c.agencies including the user account, visitor, logged_in, etc. 
 * Abolish AuthorizationGroups in favor of publishers. Yes, they are different but the use case for what AuthzGroups do and Publishers don't is just nerdery. 
 * Restructure URLs to be /<agent>/<package_name> rather than /package/<package_name> and have /<agent> be a useful list of managed resources rather than a revision list (users current home page).
 * Make Agents a primary facet for all kinds of navigation. 

Of course this would be done incrementally but I think we should agree on some such scheme as a marching direction. "
1198	1308824870000000	dread	"I think it is a good idea to allow both users and publishers to be the object of authorization. The user_object_role table and all logic surrounding it would be simpler.

I deliberately didn't suggest any detail on the authz front because I know other related changes are afoot so it would be useful for David Raznick to contribute here.

I really like the url ideas - more like github. /<agent> having a list of packages and a search box, plus a link to the latest revisions would be great. /package/<package_name> would usefully redirect to /<agent>/<package_name>. I do think this should be split off into a separate ticket though. What do you think?"
1199	1308822557000000	rgrp	Not sure we need exposure this via the API (at least at this point) as things like auto mass emailing could be in done in separate component (that talks to CKAN).
1199	1308922389000000	pudo	merged to default with password reset forms 
1199	1310555589000000	dread	"This was done in branch feature-1198-mailer. No tests - ticketed here: #1222.

Additional feature in this branch 'password reset' was ticket #1186."
1200	1311180218000000	thejimmyg	This is a duplicate of #1108. Let's have the discussion there please.
1202	1314030352000000	dread	"The CKAN package page links to datapkg at: http://blog.okfn.org/2010/02/23/introducing-datapkg/ (it has always been this link).

I think Rolf is referring to the three links to knowledgeforge.net in the blog post itself. These need to be edited by Rufus. Note datapkg has moved again to github."
1202	1315821804000000	rgrp	This now irrelevant and relevant content has gone from thedatahub theme.
1204	1311179980000000	thejimmyg	"Sorry, is this a CKAN issue or a datacatalogs.org one? If it is datacatalogs.org do you mean a catalog rather than a package? If so, can you give an example of the sort of change you've made?

Marking as invalid until we get more information."
1205	1309768720000000	kindly	"fixed in default cset:5e2070688e54

The upgrade now works locally, so the upgrade should work now."
1205	1310568631000000	dread	This worked - cheers David.
1206	1309450216000000	dread	"Fixed with cset:149be76faabc on default branch, aiming for ckan 1.4.2.

Thanks for help from Eric Lemoine."
1207	1311325343000000	dread	This has been fixed.
1208	1310124599000000	thejimmyg	Rufus and Friedrich are working on this at the moment so putting into the current sprint. I'm considering this as preliminary investigation to inform the wider project that David Raznick is leading on.
1208	1311525306000000	rgrp	Propose this ticket can be closed as webstore is now functional and being used. Can open new tickets for specific improvements / adaptations as the need arises.
1208	1312191646000000	pudo	"This should be closed: 

 * https://github.com/okfn/webstore - See README for details
 * Python client lib: https://github.com/okfn/webstore-client
 * http://webstore.thedatahub.org/ - Demo install
 * http://wiki.ckan.net/Webstore - Overview
"
1209	1310571715000000	dread	Was fixed in cset:d959a70a19ea. Bug was introduced and fixed before a release took place.
1210	1309974781000000	dread	Fix in ckan for AssertionError in cset:8f6ba8ef63f3 lined up for CKAN release 1.4.2.
1211	1315910650000000	dread	I've listed what was checked into this branch 6 weeks ago and is going into release 1.4.3. Is this ticket ready to close now or are there future plans?
1211	1315948703000000	rgrp	Let's close and re-open (or open a new ticket) for future work.
1214	1309982828000000	dread	"I'm working through these on branch defect-1214-api-improvements.

""Server returns text/html for errors"" - now fixed in cset:0a533a8da3df"
1214	1310041083000000	dread	"Aron, 
I've fixed the second item (on my branch), so you can DELETE a package without Content-Length. But I'm not sure what you mean here: ""Should be 405 Method Not Allowed?"" DELETE should be allowed. Or is that a response you're getting?
David"
1214	1310041605000000	dread	"""Tag returned as a JSON object when updating but as a string when requesting.""
I'm not sure what you mean.

http://test.ckan.net/api/2/rest/package/reference-example
gives tags: {{{""tags"": [""country-uk"", ""example-package""],}}}

Is it this - returning package names, rather than ids? Here is certainly a bug I'll fix.
http://test.ckan.net/api/2/rest/tag/country-uk"
1214	1310042268000000	dread	"Fixed tag entity returning package names for apiv2 - it now gives IDs.

The problem mentioned about ""Extras"" content - I'm not sure what's meant here. Package extras are just strings. You might choose to store a package name in an extra, but there is no magic to convert it to a package id should you retrieve the package via apiv2. Is this just a misunderstanding or have I missed your point?"
1214	1310044531000000	dread	"Deleting an extra using 'null' works for me:
{{{
$ curl -d '{""name"":""dtest2"", ""extras"":{""1"":""1"", ""2"":""2"", ""3"":""3""}}' http://test.ckan.net/api/rest/package -H ""Authorization: tester"" 
...
$ curl -d '{""name"":""dtest2"", ""extras"":{""1"":""1"", ""2"":""2"", ""3"":null}}' http://test.ckan.net/api/rest/package -H ""Authorization: tester"" 
{""maintainer"": null, ""name"": ""dtest2"", ""relationships_as_subject"": [], ""author"": null, ""url"": null, ""relationships_as_object"": [], ""notes"": null, ""title"": ""dtest2"", ""maintainer_email"": null, ""revision_timestamp"": ""2011-07-07T12:57:18.454890"", ""author_email"": null, ""state"": ""active"", ""version"": null, ""groups"": [], ""license_id"": null, ""revision_id"": ""f0ff31c0-027b-49ce-9daf-94a73d96a913"", ""tags"": [], ""id"": ""fdeeb287-2783-4aac-9fc7-a6717e54e22f"", ""resources"": [], ""extras"": [{""state"": ""active"", ""value"": ""\""1\"""", ""revision_timestamp"": ""2011-07-07T12:57:18.454890"", ""package_id"": ""fdeeb287-2783-4aac-9fc7-a6717e54e22f"", ""key"": ""1"", ""revision_id"": ""f0ff31c0-027b-49ce-9daf-94a73d96a913"", ""id"": ""d1937073-7bfc-48c5-b6ff-b00d90b451ae""}, {""state"": ""active"", ""value"": ""\""2\"""", ""revision_timestamp"": ""2011-07-07T12:57:18.454890"", ""package_id"": ""fdeeb287-2783-4aac-9fc7-a6717e54e22f"", ""key"": ""2"", ""revision_id"": ""f0ff31c0-027b-49ce-9daf-94a73d96a913"", ""id"": ""8147886f-9769-440c-8c35-b7d6a2f46de7""}]}
}}}
"
1214	1310045026000000	dread	"Ok I see the problem with extras. When you create a package you get back 'simple' extras:
{{{
$ curl -d '{""name"":""dtest3"", ""extras"":{""1"":""1""}, ""tags"":[""australia"", ""barbeque""]}' http://test.ckan.net/api/rest/package -H ""Authorization: tester"" --trace log
{""maintainer"": null, ""maintainer_email"": null, ""id"": ""33d75910-ae5e-45b0-a154-d00022555a43"", ""metadata_created"": ""2007-04-10T21:19:38"", ""relationships"": [], ""metadata_modified"": ""2011-07-07T13:06:06.228718"", ""author"": null, ""author_email"": null, ""state"": ""active"", ""version"": null, ""license_id"": null, ""resources"": [], ""tags"": [""australia"", ""barbeque""], ""groups"": [], ""name"": ""dtest3"", ""license"": null, ""notes_rendered"": """", ""url"": null, ""ckan_url"": ""http://test.ckan.net/package/dtest3"", ""notes"": null, ""title"": ""dtest3"", ""ratings_average"": null, ""extras"": {""1"": ""1""}, ""ratings_count"": 0, ""revision_id"": ""31cb22d4-3452-4adc-b572-cd173aea7d
}}}
i.e. ""extras"": {""1"": ""1""}
and that's what you get if you GET the package:
{{{
$ curl http://test.ckan.net/api/rest/package/dtest3
{""maintainer"": null, ""maintainer_email"": null, ""id"": ""33d75910-ae5e-45b0-a154-d00022555a43"", ""metadata_created"": ""2007-04-10T21:19:38"", ""relationships"": [], ""metadata_modified"": ""2011-07-07T13:06:06.228718"", ""author"": null, ""author_email"": null, ""state"": ""active"", ""version"": null, ""license_id"": null, ""resources"": [], ""tags"": [""australia"", ""barbeque""], ""groups"": [], ""name"": ""dtest3"", ""license"": null, ""notes_rendered"": """", ""url"": null, ""ckan_url"": ""http://test.ckan.net/package/dtest3"", ""notes"": null, ""title"": ""dtest3"", ""ratings_average"": null, ""extras"": {""1"": ""1""}, ""ratings_count"": 0, ""revision_id"": ""31cb22d4-3452-4adc-b572-cd173aea7d11""}
}}}
but if you then edit it you get them expressed much more verbosely:
{{{
$ curl -d '{""name"":""dtest3"", ""extras"":{""1"":""2""}, ""tags"":[""australia"", ""barbeque""]}' http://test.ckan.net/api/rest/package/dtest3 -H ""Authorization: tester"" --trace log
{""maintainer"": null, ""name"": ""dtest3"", ""relationships_as_subject"": [], ""author"": null, ""url"": null, ""relationships_as_object"": [], ""notes"": null, ""title"": ""dtest3"", ""maintainer_email"": null, ""revision_timestamp"": ""2011-07-07T13:06:06.228718"", ""author_email"": null, ""state"": ""active"", ""version"": null, ""groups"": [], ""license_id"": null, ""revision_id"": ""31cb22d4-3452-4adc-b572-cd173aea7d11"", ""tags"": [{""revision_timestamp"": ""2011-07-07T13:06:06.228718"", ""state"": ""active"", ""id"": ""4aa0e776-ac2a-4a8b-82ba-d80237d35596"", ""name"": ""australia""}, {""revision_timestamp"": ""2011-07-07T13:06:06.228718"", ""state"": ""active"", ""id"": ""e890354d-e170-44c1-94b1-f0d8b38a49fc"", ""name"": ""barbeque""}], ""id"": ""33d75910-ae5e-45b0-a154-d00022555a43"", ""resources"": [], ""extras"": [{""state"": ""active"", ""value"": ""\""2\"""", ""revision_timestamp"": ""2011-07-07T13:21:02.220368"", ""package_id"": ""33d75910-ae5e-45b0-a154-d00022555a43"", ""key"": ""1"", ""revision_id"": ""61703821-a2f1-41f8-8f39-71130c5e6c1b"", ""id"": ""87d7d4fc-7eb7-4760-b199-e460ce505632""}]}
}}}
I'm going to ask David Raznick about what's best here. It would be good to make them uniform."
1214	1310053225000000	aron	"Replying to [comment:2 dread]:
> Aron, 
> I've fixed the second item (on my branch), so you can DELETE a package without Content-Length. But I'm not sure what you mean here: ""Should be 405 Method Not Allowed?"" DELETE should be allowed. Or is that a response you're getting?
> David

If I send a HEAD request to the server eg.

{{{
curl -i -XHEAD http://test.ckan.net:80/api/2/rest/package/ec9cb930-d15f-441f-a1e1-36f4d5df19bf
}}}

I get the following in the  Access-Control-Allow-Methods header

{{{
Access-Control-Allow-Methods: POST, PUT, GET, OPTIONS
}}}

I've just realised that the ""Access-Control"" headers are for cross origin browser requests so I think you can ignore my comments about the correct response being 405 Method Not Allowed but perhaps DELETE should be added to the Access-Control-Allow-Methods list?
"
1214	1310054305000000	aron	"Replying to [comment:3 dread]:
> ""Tag returned as a JSON object when updating but as a string when requesting.""
> I'm not sure what you mean.
> 
> http://test.ckan.net/api/2/rest/package/reference-example
> gives tags: {{{""tags"": [""country-uk"", ""example-package""],}}}

I'm getting back objects for each tag in the response body from a PUT request. For example ""country-uk"" would be something like.

{{{
{ 
        ""id"" : ""600dc72e-6127-4704-b801-bee00474ec0c"",
        ""name"" : ""country-uk"",
        ""revision_timestamp"" : ""2011-07-06T09:09:21.578034"",
        ""state"" : ""active""
}
}}}

Hopefully this gist <https://gist.github.com/97447d0b28bf52f3e06b> will illustrate the issue.

> Is it this - returning package names, rather than ids? Here is certainly a bug I'll fix.
> http://test.ckan.net/api/2/rest/tag/country-uk

That was the fifth point on the list.
"
1214	1310054863000000	aron	"Replying to [comment:5 dread]:
> Deleting an extra using 'null' works for me:
Hmm, it works for me too when there are other keys remaining in the ""extras"" object. However I can't seem to delete the last one. Take the following example.

{{{
curl -i -XPUT -d'{""extras"": {""Tester"": null}}' -H""X-CKAN-Type: application/json"" http://test.ckan.net:80/api/2/rest/package/ec9cb930-d15f-441f-a1e1-36f4d5df19bf
}}}

Gives:

{{{
{ ""author"" : """",
  ""author_email"" : """",
  ""extras"" : [ { ""id"" : ""88cc50ca-9e29-4499-a542-09d364f5f64f"",
        ""key"" : ""Tester"",
        ""package_id"" : ""ec9cb930-d15f-441f-a1e1-36f4d5df19bf"",
        ""revision_id"" : ""e5c3ca9c-1dae-4a86-837f-b8c19ac31964"",
        ""revision_timestamp"" : ""2011-07-07T16:01:05.696025"",
        ""state"" : ""active"",
        ""value"" : ""\""Test Value\""""
      } ],
  ""groups"" : [  ],
  ""id"" : ""ec9cb930-d15f-441f-a1e1-36f4d5df19bf"",
  ""license_id"" : """",
  ""maintainer"" : ""aron"",
  ""maintainer_email"" : """",
  ""name"" : ""my-test-package"",
  ""notes"" : ""Heading\r\n===\r\nThis _is_ some text"",
  ""relationships_as_object"" : [  ],
  ""relationships_as_subject"" : [  ],
  ""resources"" : [  ],
  ""revision_id"" : ""688d33fb-5629-4ab3-9f59-a649fc7caa00"",
  ""revision_timestamp"" : ""2011-07-06T10:37:50.182894"",
  ""state"" : ""active"",
  ""tags"" : [ { ""id"" : ""600dc72e-6127-4704-b801-bee00474ec0c"",
        ""name"" : ""test-tag"",
        ""revision_timestamp"" : ""2011-07-06T09:09:21.578034"",
        ""state"" : ""active""
      } ],
  ""title"" : ""My Test Package"",
  ""url"" : """",
  ""version"" : """"
}
}}}
"
1214	1310055169000000	aron	"Another edge case that popped up while verifying the above issues. A PUT request without a body throws a 500 Internal Sever Error

{{{
curl -i -XPUT  -H""X-CKAN-API-KEY: tester"" -H""Content-Type: application/json"" http://test.ckan.net:80/api/2/rest/package/ec9cb930-d15f-441f-a1e1-36f4d5df19bf
}}}
"
1214	1310057942000000	aron	"One more for today. Please do let me know if I should be filing these as separate tickets?

For some reason performing a search query for packages with an underscore ""_ "" as a query string key fails to return any results.

{{{
curl ""http://test.ckan.net/api/2/search/package?q=osm""
}}}

Gives me 4 results.

{{{
curl ""http://test.ckan.net/api/2/search/package?q=osm&_=1310056826904""
}}}

Gives me none.

The underscore is generally used by JavaScript libraries as a way of bypassing the browser cache when making JSONP calls. It's easily worked around but is odd none the less.
"
1214	1310062570000000	dread	"Fixes have gone into the branch for ""Tag returned as a JSON object when updating but as a string when requesting. Same with ""extras"" content."" and ""Doesn't return rendered_text property on package update."".

I've added DELETE to the Access-Control-Allow-Methods on the server, so you can try that now.

I've added a failing test for the problem of deleting the last extra. Am discussing with David Raznick how to fix that best.

I think the only other ones left to address are: 
 * Relationships use ""object"" key rather than id or package_id.
 * underscore in search parameters"
1214	1310062621000000	dread	"I believe ""A PUT request without a body throws a 500 Internal Sever Error"" was fixed yesterday in the code. (Not deployed to test.ckan.net yet though)"
1214	1310067327000000	dread	"  Relationships use ""object"" key rather than id or package_id.
I'm not totally clear on this one. The URLs for relationship editing can be package ids or names. When you GET a relationship packages are referred to in IDs for v2 API. When you create or update a relationship it returns package IDs for v2 API. Are you referring to the relationships listed in the response when you PUT a package? (If so that would be fixed by my previous fix.)"
1214	1310067831000000	dread	"  underscore in search parameters
I think its trying to filter search results by values of an extra field called ""_"", even though this probably doesn't occur. If it is not too ugly, I suggest using one of your other ideas for solving the cache issue. I suggest you bring it up with Rufus or the ckan-dev list to get opinions."
1214	1310072808000000	dread	I've put the fixes onto test.ckan.net - repoen the ticket if there are any issues.
1214	1310396399000000	aron	"The groups property in the package resource is always empty (or is for all packages I have viewed).

The following group lists one package.

{{{
http://test.ckan.net/api/2/rest/group/0ac963e7-ba29-49bc-83c8-98f8c1991649
}}}

But when viewing the package the groups array is empty.

{{{
http://test.ckan.net/api/2/rest/package/758c26d4-5949-4347-8b4d-023374146d94
}}}

"
1214	1314029628000000	dread	This appears to have been fixed by version 1.4.3.
1215	1310335541000000	kindly	"fixed cset: 8a317eadbb36

If you delete the last row then it just clears it instead of deleting the row."
1215	1310385485000000	dread	This is now deployed on ckan.net (requires Ctrl-R to reload js).
1217	1320663277000000	dread	I haven't seen this for a while - could have been due to database corruption which has been fixed.
1218	1310385419000000	dread	This has been done in cset:bd0f83a2e287 for release 1.4.2. Deployed to ckan.net.
1219	1310471415000000	dread	This is a known issue and of low importance.
1219	1310670324000000	erilem	"The issue is due to IE7 (and IE6) not supporting {{{inline-block}}}. [attachment:patch-1219-A0.diff] works around the issue.

I'm reopening this ticket in case you want to consider my patch.

But note that I won't be offended if you close it as wontfix again. I agree this is pretty minor, and that working around old browsers' limitations isn't always a good idea."
1219	1310740534000000	dread	Patch applied in cset:8c05d27db224 for 1.4.2 release.
1221	1310475683000000	dread	"Exception details:
{{{
Module ckan.controllers.user:194 in request_reset
<<                  h.flash_error(_('No such user: %s') % id)
                   try:
                       mailer.send_reset_link(user)
                       h.flash_success(_('Please check your inbox for a reset code.'))
                       redirect('/')
>>  mailer.send_reset_link(user)
Module ckan.lib.mailer:69 in send_reset_link
<<  def send_reset_link(user):
           user.reset_key = make_key()
           model.Session.add(user)
           model.Session.commit()
>>  user.reset_key = make_key()
AttributeError: 'NoneType' object has no attribute 'reset_key'
}}}"
1221	1310556607000000	dread	"Other edge cases and error conditions do not work properly either.

Fixed in cset:4737c86d1d81 for release 1.4.2."
1222	1310556618000000	dread	Fixed in cset:4737c86d1d81 for release 1.4.2.
1223	1310573893000000	dread	pudo did this in cset:1ab655b7b76a and cset:7a9c6b1060cf ready for release 1.4.2.
1225	1310642407000000	dread	Done in ckanext repo cset:70fb690a0769
1226	1314029434000000	dread	This appears to have gone away. No sign of it for two weeks on any OKF sites.
1228	1311086612000000	dread	Done in cset:88e47b68e42d for 1.4.3
1229	1312191530000000	amercader	Done, except for Revision related stuff, which probably overlaps with work being done by David Raznick.
1229	1319639472000000	dread	I found another direct use of the d.b. in the home controller.
1229	1319645778000000	dread	Replace code in home in cset:f19f9c5bec94 on default for release 1.5.1.
1230	1311154142000000	kindly	"The standard way to add tables in a plugin has converged upon putting the tables in the iconfigurable plugin.

This runs at the correct point for when the application runs normally. For testing however there are issues due to the tables potentially being dropped, especially for the sqlite case.   The fix is to make sure the iconfigurables are run at the start of each set of tests, hence adding it to the ckan_nose_plugin.   This is not pretty, but good enough.

cset:8531b9fc1ee2
"
1231	1315948921000000	rgrp	@kindly: Does this fit in with current plans? If not suggest we close as invalid/wontfix or put into the backlog (though given lack of content not sure that is very useful ...)
1231	1325474087000000	rgrp	Closing as wontfix (or duplicate). We now have stats in footer as of #1576. googleanalytics (e.g. http://thedatahub.org/analytics/dataset/top) would be nice to have but should be part of stats 
1231	1325474447000000	rgrp	See #1101 for other duplicate ...
1232	1315948536000000	rgrp	Removing from ckan-v1.5 as do not think any of this is top priority (correct me if I'm wrong!)
1233	1315948668000000	rgrp	Removing from v1.5 as not a priority atm.
1234	1311183328000000	dread	Fixed in cset:1ed3fde56a61 for 1.4.3.
1236	1311351476000000	dread	Working on it on branch enh-1236-view-package-revision
1236	1311699843000000	dread	This is merged to default (for rel 1.2.5) but isn't brilliant yet because of bug #1238.
1236	1311759816000000	dread	The bug is in fact in the way I work out what revision I'm displaying - it just looks at the PackageRevision.
1236	1323090508000000	dread	This feature is now released, but there is a remaining bug which I've put in this ticket: #1509
1236	1330019788000000	dread	Went into CKAN 1.4.3
1238	1311583876000000	kindly	"I cannot reproduce this, to me it looks like it does get the correct revision.  If you for example look at the package a millisecond before i.e
http://ckan.net/package/osm%402010-11-30%2000%3A21%3A49.627829
the tags are no longer there that were added in that revision."
1238	1311759784000000	dread	Apologies, I have a problem instead with the way I identify the revision in #1236.
1239	1311442163000000	rgrp	Fixed in cset:adf254b7c507 (see https://bitbucket.org/okfn/ckan/changeset/adf254b7c507)
1239	1312453156000000	dread	Fixed in 1.4.2 release. Broken in UI in 1.4.1 and API in 1.4 & 1.4.1.
1240	1314180488000000	dread	"I basically agree, but just thought I'd add a couple of comments into the mix.

> GET at root returns whole package set (a *bad* idea)

Sure it has a cost, but I don't see what the problem with this is if the list is cached. Forcing developers to paging through the list of packages is putting unnecessary obligations. I'd say that the top two RESTful operations are listing objects and getting a particular one, and you'd be taking away one of those.

> Unify on /api/v{version num}/... structure

Where is it not currently unified?"
1240	1316022145000000	rgrp	add autocomplete
1240	1324319119000000	rgrp	assigning to kindly for review
1240	1324320107000000	dread	"Although I'm generally in favour of Action API over RESTful, Action API does need some sorting out wrt listing methods, advertising what params are allowed and checking those that are passed. Using the Action API is so hard without reading the code!

The RESTful API is handy when you want to do something quickly in a browser. I'd not want to lose these two, for example:
 * to look at a package /api/rest/dataset/xyz
 * API version etc. at /api/util/status (coming with ckan 1.5.2)

It's also really handy in demos and to send as links to people on the list."
1240	1325473312000000	rgrp	IMO this is non-urgent and can move out of v1.6 as we have enough more important stuff to do.
1242	1323173292000000	thejimmyg	This text is no longer present on the login page.
1243	1328000405000000	rgrp	invalid as things have changed and this has been fixed or obsoleted.
1244	1323089995000000	dread	No progress yet
1245	1311864530000000	annapowellsmith	"Would be nice to list some extensions somewhere on this site (features page perhaps). 

Along the lines of: http://docs.ckan.org/extensions.html#finding-extensions

It wasn't until I wrote this list that I realised just how many extensions there were, and what it said about the CKAN community that there were so many... 

So I think it would be a good sales point. "
1245	1317422640000000	rgrp	Closing as now mostly done and not really a ticket item.
1246	1311863583000000	dread	"We have an unresolved issue with the display of the 'open data' icon that showed up when we upgraded ckan.net to the latest beta last week, but I didn't realise the search page http://ckan.net/package was showing all packages as open (the revision page and package pages seem fine).

Last week when I upgraded from 1.4.1 to 1.4.2beta, there was an exception thrown when loading the home page. The exception was in doing the isopen call. It was solved by making some code changes directly on the ckan.net server to make it an attribute query instead of function call. It was strange because this behaviour didn't occur on my machine and all the tests passed. Here are the manual patches on ckan.net (the application.js change is unrelated, by someone else):

{{{

diff -r adf254b7c507 ckan/public/scripts/application.js
--- a/ckan/public/scripts/application.js	Sat Jul 23 18:16:15 2011 +0100
+++ b/ckan/public/scripts/application.js	Thu Jul 28 14:10:23 2011 +0000
@@ -2,6 +2,7 @@
   $(document).ready(function () {
     CKAN.Utils.setupUserAutocomplete($('input.autocomplete-user'));
     CKAN.Utils.setupAuthzGroupAutocomplete($('input.autocomplete-authzgroup'));
+    // $('.resource-url').parent(
   });
 }(jQuery));
 
diff -r adf254b7c507 ckan/templates/_util.html
--- a/ckan/templates/_util.html	Sat Jul 23 18:16:15 2011 +0100
+++ b/ckan/templates/_util.html	Thu Jul 28 14:10:23 2011 +0000
@@ -43,7 +43,7 @@
         standard package listing -->
   <ul py:def=""package_list(packages)"" class=""packages"">
     <li py:for=""package in packages""
-        class=""${'fullyopen' if (package.isopen() and package.resources) else None}"">
+        class=""${'fullyopen' if (package.isopen and package.resources) else None}"">
         <div class=""header"">
 			<span class=""title"">
 				${h.link_to(package.title or package.name, h.url_for(controller='package', action='read', id=package.name))}
@@ -60,7 +60,7 @@
           </ul>
         </py:if>
         <ul class=""openness"">
-          <py:if test=""package.isopen()"">
+          <py:if test=""package.isopen"">
             <li>
               <a href=""http://opendefinition.org/okd/"" title=""This package satisfies the Open Definition."">
                   <img src=""http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png"" alt=""[Open Data]"" />
@@ -72,7 +72,7 @@
               </a>
             </li>
           </py:if>
-          <py:if test=""not package.isopen()"">
+          <py:if test=""not package.isopen"">
             <li>
               <span class=""closed"">
                 ${h.icon('lock')} Not Openly Licensed
diff -r adf254b7c507 ckan/templates/home/index.html
--- a/ckan/templates/home/index.html	Sat Jul 23 18:16:15 2011 +0100
+++ b/ckan/templates/home/index.html	Thu Jul 28 14:10:23 2011 +0000
@@ -64,6 +64,7 @@
     </py:if>
 
     <h4>Recently changed packages</h4>
+    <!-- ${c.latest_packages} -->
     ${package_list_from_dict(c.latest_packages)}
 
     <p><a href=""${h.url_for(controller='revision', action='index',
diff -r adf254b7c507 ckan/templates/layout_base.html
--- a/ckan/templates/layout_base.html	Sat Jul 23 18:16:15 2011 +0100
+++ b/ckan/templates/layout_base.html	Thu Jul 28 14:10:23 2011 +0000
@@ -101,6 +101,7 @@
     am_authorized_package_create = h.am_authorized(c, actions.PACKAGE_CREATE)
 ?>
           <li py:if=""am_authorized_package_create"">${h.nav_link(c, _('Add a package'), controller='package', action='new', id=None)}</li>
+          <li><a href=""/storage/upload"">Upload Data</a></li>
           <li>${h.nav_link(c, _('Tags'), controller='tag', action='index', id=None)}</li>
           <li>${h.nav_link(c, _('Groups'), controller='group', action='index', id=None, highlight_actions = 'new index')}</li>
           <li>${h.nav_link(c, _('About'), controller='home', action='about', id=None)}</li>
diff -r adf254b7c507 ckan/templates/package/read.html
--- a/ckan/templates/package/read.html	Sat Jul 23 18:16:15 2011 +0100
+++ b/ckan/templates/package/read.html	Thu Jul 28 14:10:23 2011 +0000
@@ -56,7 +56,7 @@
     </py:if>
     
     <li class=""widget-container widget_text"">
-    <py:if test=""c.pkg.isopen() and c.pkg.resources"">
+    <py:if test=""c.pkg.isopen and c.pkg.resources"">
       <h3>
         This Package is Open
       </h3>
@@ -80,7 +80,7 @@
       </p>
     </py:if>
 
-    <py:if test=""not(c.pkg.isopen() and c.pkg.resources)"">
+    <py:if test=""not(c.pkg.isopen and c.pkg.resources)"">
       <h3 i18n:msg="""">This package is Not Open</h3> 
       
       <p>Either because it is not openly licensed or is missing
}}}"
1246	1311885360000000	pudo	"I'm afraid to say I don't understand any of this: the faulty display of openness is triggered as removing the brackets turns the isopen() check into a check for the existence of the method. Reverting the changes on the server seems to work without generating exceptions. What exactly is the issue that was supposed to be fixed originally? 
"
1247	1311955176000000	rgrp	Done. See http://ckan.readthedocs.org/ and http://docs.ckan.org/ will propagate soon.
1248	1319797763000000	dread	"Fixed in cset:188d27a56c89c35f97f3a79fdd0a6460223f86cf on branch release-v1.4.3.

This was only seen in CKAN 1.4.3beta."
1249	1311959356000000	pudo	fixed in cset:0398243111d4
1250	1312370201000000	pudo	"The issue is caused after search returns from solr and tries to get objects from the database. These are by default ordered by name and we need to restore the original order after fetching them from the database. 

Fixed in module."
1251	1314406332000000	rgrp	Really non-urgent and can be done once #1252 is done (which is dependent on v1.5)
1251	1317315159000000	dread	rgrp did this last weekend.
1252	1314406271000000	rgrp	Move to v1.5 since this will coincide with release.
1252	1316876747000000	rgrp	Announced. thedatahub.org now running for 2+ months. Today did wiki.ckan.net redirect and hope to do thedatahub.org redirect.
1252	1317315135000000	dread	This is done now?
1252	1318160334000000	rgrp	This was done ~2 weeks ago.
1256	1312409296000000	kindly	This has also caused problems in authorization for deleted packages.
1256	1312813529000000	kindly	fixed cset:357cf9377b25
1256	1319812556000000	dread	It sounds like this became an issue with CKAN 1.4.3 and the fix goes into CKAN 1.5.
1258	1312813614000000	kindly	cset:e22d4e385fc8
1258	1319812452000000	dread	I believe this was broken with the introduction of moderated edits in CKAN 1.4.3 and this fix went into 1.5.
1262	1314029150000000	dread	"Pudo - I'm not sure what's meant here. Are you talking about moderation for new users? Or some other sort of enforcement? Is it spam you want to target?

The links you're concerned about - are they the spam ones in the User's 'about' field? If so, I think we *should* allow users to have links, although continue with applying them with 'nofollow' and attack spammers back in a concerted strategy across all editable fields - see ticket #1257."
1263	1314029279000000	dread	This was fixed in cset:8d293393a9f2 for release 1.4.3.
1264	1314406294000000	rgrp	Nothing urgent about this so moving to backlog.
1264	1318244619000000	zephod	Created #1377 to handle bugs revealed while doing this work.
1264	1318245716000000	zephod	Complete; cset:b216952644aa
1265	1312566052000000	dread	Fixed in cset:a1b8dd169f4e on 1.4.3 release and merged to default.
1266	1312797477000000	dread	Fixed in 987dc4fe078e on 1.4.3 branch and default.
1267	1312889130000000	dread	John thinks it is a problem with WebOb 1.0.6
1267	1312890962000000	dread	This error has been occurring on at.ckan.net which has webob 0.9.7.1-1
1267	1312894071000000	dread	Running tests with WebOb 0.9.7.1, we see the error! Am now trying to fix.
1267	1312897724000000	dread	"Fixed in cset:db5bf5b45b4f for ckan 1.4.3.

Later versions of webob add the charset header for unicode errors (webob/exc.py:generate_response):
{{{
        extra_kw = {}
        if isinstance(body, unicode):
            extra_kw.update(charset='utf-8')
        resp = Response(body,
            status=self.status,
            headerlist=headerlist,
            content_type=content_type,
            **extra_kw
        )
}}}
This was fixed in webob cset:25fc14d49623 which went into WebOb 1.0. 

This problem affects versions from CKAN 1.4.2 back to 1.3.1. We had been avoiding this in CKAN previously by only doing abort() with a plain string. "
1268	1317212499000000	kindly	fixed cset:eebbe6071741
1270	1312912188000000	dread	Fixed in cset:ca5295c9c8cf and released as ckanclient version 0.9
1271	1313753663000000	rgrp	Closed in cset:749cb3a087e3
1272	1313745867000000	rgrp	"Assume these are the 3 spatial fields listed on http://wiki.ckan.net/Geospatial_Capabilities. I'm a big +1 here. Starting point would be a bit more documentation on that wiki page. Questions:

 * Is this work going in ckanext-spatial?
 * What is being proposed here, I assume, is to automatically index those fields in our geospatial search.
 * Should we develop a simple display widget using google maps or similar (this is orthogonal to the WMS preview i think) which *just* uses the core fields. This is probably a separate ticket and possibly separate from ckanext-spatial extension."
1275	1314110016000000	johnglover	"Completed in branch feature-1275-solr-search. Up to date with current default but not yet merged into default.

John"
1275	1319812967000000	dread	Going into release 1.5.
1276	1314886010000000	johnglover	"Added to branch feature-1275-solr-search

Don't seem to be able to apply weighting to fields at index time using solrpy (see open issue: http://code.google.com/p/solrpy/issues/detail?id=6). So, switched to using the newer Solr edismax query parser and have applied weights to fields at search time.

Current weights are as follows:

name: 4
title: 4
group: 2
tag: 2
text (everything else): 1"
1276	1315948394000000	rgrp	Closing since done (though not yet in main!)
1277	1314868204000000	johnglover	Done in branch feature-1275-solr-search for all package searches (which use Solr). Resource and Tag searches still use the old ckan query parser.
1277	1315297186000000	rgrp	This just requires merging into main but has been deferred as once solr branch is merged solr is *required* to run CKAN at all (we are thinking of having basic support for sqlite/dbs out of the box ...)
1277	1315948417000000	rgrp	Closing since done (though still need to merge into default)
1279	1314303732000000	rgrp	Wow, that's a pretty big omission. authz groups are important and are used. I think we should discuss this in next planning meeting.
1279	1314304326000000	rgrp	In addition it appears that authz group was left out of the form refactoring so new and edit page use old formalchemy stuff. Should fix this.
1279	1338212028000000	ross	Duplicate of #2366
1280	1328786670000000	dread	David tells me that this was fixed in CKAN when we moved to SQLAlchemy 0.7 #1433 which went into CKAN 1.5.1.
1281	1314021919000000	dread	"Done by pudo in cset:eaf342823caf on default branch, so headed for release 1.4.4. 

""Work around the fact that locale changes do not affect
the running request and therefore led to an incorrect flashing
message. Now manually changing language."""
1282	1314404540000000	rgrp	"Done in cset:4b6838a820bb.

Have not done either of the optional items. JS testing for what we have is relatively hard and of dubious value.

Re CDN stuff requires work and of doubtful of immediate value since can just configure cache or main site to serve static stuff directly. (Likely more value from compressing js and css ...)."
1283	1326720891000000	dread	Since we switched completely to SOLR, this has been true. SOLR doesn't index deleted packages so you can't search them, but they can be read/edited by admins.
1283	1330083933000000	dread	This went into CKAN 1.6
1284	1315212258000000	dread	"Fixed by rgrp in cset:1952445d2802 on release-v1.4.3 and default. Comment: 

do not create revision for changes to users as they are not revisioned.

* This had already been removed in cset:8d6fde0e2196 (then in user controller) but Adria seems to have reinstated this when refactoring things into the logic layer. This 'bug' explains the huge number of empty revisions we have been seeing on ckan.net."
1284	1315212603000000	dread	I've added tests for this (to prevent yet another regression!) in cset:1b77ce8ce560. Closing.
1284	1315214358000000	rgrp	I'm not sure this is the sort of thing we need tests for (we can have too many tests!). Something worse discussing ...
1284	1315215626000000	dread	Really? How many times do you want to fix this bug again? For the sake of three lines of test...
1285	1314269414000000	dread	Another instance is when the database tables are not created and you want to both display a sensible error and have an email alert. #1290
1285	1323173125000000	thejimmyg	"I could write some middleware to handle this. Can we come up with a list of exceptions not to catch or should I create a base exception called ""NoEmailReportTriggeredException()"" which exceptions for this purpose have to be derived from or which code has to raise? "
1285	1323178678000000	dread	Isn't the point is we don't to raise an exception at all - we want to call a method to send the email and then return from the controller a normal html page. Don't we just need a method to get the error email address from the config and send an email.
1286	1342436420000000	dread	This can happen now, if it hasn't already.
1289	1317315211000000	dread	Discussions have not resolved this either way. Decided to leave it like it is for now.
1290	1314270894000000	dread	"Improved on option 2. For requests to Home controller, the first thing it does is check the user. I catch SQL errors that are to do with missing tables and that now produces a template-less error saying the site is off-line and then mentions database initialisation.

Done in cset:484e50c4f989 on default for ckan 1.4.4."
1291	1315948475000000	rgrp	@kindly: is this not done? (I know there is more work to be done here but though table creation was done ...). If not need to move to next milestone so we can close this one.
1292	1315999202000000	dread	<rgrp> i'm def +1 for removing API stuff entirely from i18n for the present
1292	1320145677000000	dread	"  Review process of releases and updating strings (pot) and translations (po) files
  c.f.  http://lists.okfn.org/pipermail/ckan-dev/2011-May/000718.html
http://wiki.ckan.net/Release_process updated with basic process

  Get language changing thing to get home page to mostly work - push to key strings translated (or don't advertise the translation?)
Welcome message is translated in all languages. Most language have upped their percentage translated significantly and Swedish and Polish added as well.

  Review long list of strings for improvement
  Consolidate any?
  Get rid of i18n for strings in api
About 50% of the strings are templates, 30% are in the logic layer and 20% are in the controllers. Removed a handful from ckan/lib/base.py that were only displayed in the api, but the logic layer ones are generally errors that can be displayed in the Web UI as well as the API, so not ideal to remove.

  Try and remove javascript
Tom did this.

  Add in extensions
This could be done. Have raised ticket #1292 for this, next release.

  #1374 Fix switching to en from other default language
Done

  #1417 Fix browser language detection
Done"
1292	1320145732000000	dread	These fixes all went into release 1.5.
1293	1314701675000000	johnglover	"== Changes ==

 * All templates
 * Routing: /package/ -> /dataset/ (including API)
 * Tests: h.url_for(controller='dataset') rather than package ...
  * One test to check redirect works?
 * Docs

== Leave ==

 * Stay with Package in code e.g. stay with 'PackageController'
  * also leave stuff like pkg = .... (gradual migration)
 * Leave extensions

== Notes ==

 * Package -> Dataset
 * Data Package -> Dataset
 * respect capitalization"
1293	1314905799000000	johnglover	"Branch: feature-1293-rename-package-to-dataset

Routing and test editing should be finished (all tests passings). Have not added test for redirect yet."
1293	1315214527000000	rgrp	Reassign for completion (templates and docs) as john is away.
1293	1315246628000000	zephod	"cset:https://bitbucket.org/okfn/ckan/changeset/4a98589af6c1
Fixed"
1294	1315948112000000	rgrp	Removing #1311 as that is not directly related to dataset edit / create.
1294	1315948257000000	rgrp	Done with merge into default in cset:8bb0720a2150 and deployment to http://thedatahub.org/
1295	1315820564000000	rgrp	This is mostly done but some final tweaks and name disabling to be done. See work in feature-1294-ux-improvements-dataset
1295	1315948009000000	rgrp	Completed with merge into default in cset:8bb0720a2150
1296	1315403275000000	zephod	No longer doing inline resource editing on dataset/view; instead use the edit form. 
1296	1315821293000000	rgrp	Have now done resource add pretty effectively and most of edit done (should complete today).
1296	1315948027000000	rgrp	Completed with merge into default in cset:8bb0720a2150
1297	1315403878000000	zephod	No longer doing inline editing on the view page.
1297	1315403974000000	zephod	Largely done in cset:8901e722b158
1297	1315404322000000	zephod	all done: cset:71096cd7b27d
1298	1321199769000000	seanh	I've been working on this in this branch: https://github.com/seanh/ckan/commits/feature-1298-activities-table
1298	1323106307000000	seanh	See the new super ticket and its branch: #1515
1298	1323710593000000	dread	Sean says: This is done on the activity stream branch. Just would like David Raznick to review it.
1298	1324384191000000	seanh	"David,

Ignore my link above to a branch on my ckan fork. Now that I have permissions I'm pushing my branches to the okfn ckan repo on github. My super branch for the activity streams feature is '''feature-1515-activity-streams''' on the okfn ckan repo on github. This page comparing my branch to master is particularly useful:

https://github.com/okfn/ckan/compare/master...feature-1515-activity-streams

(click on the Files Changed tab)

For reviewing this ticket, the relevant changes to review are:

 * ckan/lib/activity.py, all of it
 * ckan/model/activity.py, all of it
 * My changes to ckan/model/meta.py
 * My changes to ckan/model/package.py
 * My changes to ckan/model/resource.py
 * ckan/tests/models/test_activity.py, all of it

The other changes on my branch are for other activity streams tickets that follow this one. The super ticket #1515 has an overview of it all.
"
1299	1325866115000000	rgrp	No estimate as yet? (Or is it in super ticket? (Link?)). Also isn't this a duplicate of #1510 (or vice-versa)?
1300	1315906283000000	rgrp	page_heading and optional_footer done in #1108
1300	1315908961000000	rgrp	Move of js to optional_footer done in cset:dcb21f0d976f. As part of #1294 have done a lot of css adding. Not sure how much more to do here.
1300	1319794520000000	rgrp	Side bar menu is switchable (though not sure how -- zephod has done this!) CSS tidying and labelling of divs done in #1380. So closing!
1303	1314978842000000	dread	Adria fixed this in cset:7637d8694388 on default. I transplanted it to release-1.4.3 and have updated thedatahub.org.
1305	1314971164000000	nils.toedtmann	"Always use ""localhost"" as mail relay. On all servers, the local MTA should be configured correctly (e.g. in this case to relay via mail.fry-it.com), also to be able to send rootmail.

I fixed it on IATI (s049.okserver.org = ex eu23) and thedatahub.org (s055.okserver.org). Please verify that it's working now."
1305	1315317033000000	nils.toedtmann	[15:22:02] Adrià Mercader: Yes it looks like it works on both thedatahub.org and iatiregistry.org
1306	1319797204000000	dread	These are expressed as functional API tests - see tests/functional/api/test_action.py. There's not a lot of difference (apart from Paste coming in there) so no real need to duplicate API and logic layer tests, or to switch them to talk directly to the logic layer.
1307	1315246706000000	zephod	cset:2c31fe24e1c9
1307	1315247298000000	zephod	"Replying to [comment:2 zephod]:
Oops:
cset:cbd6677ec41e
"
1309	1315586335000000	dread	Duplicate of #1318
1310	1315820419000000	dread	This was fixed cset:e49781cb74fd for 1.4.3.
1312	1315327743000000	dread	"The default Content-Type is ""application/x-www-form-urlencoded"" (that is what curl sends, and what CKAN defaults to). Therefore these characters need url encoding (""=&;"" -> ""%3D%26%3B""). Here is an example of it working:

{{{
(pyenv-ckan)dread@dread-laptop:~/hgroot/ckan$ curl -i http://localhost:5000/api/rest/package -d '{""name"": ""test7"", ""title"": ""Test2 %3D%26%3B""}' -H ""Authorization:tester""
HTTP/1.0 201 Created
Server: PasteWSGIServer/0.5 Python/2.6.5
Date: Tue, 06 Sep 2011 16:36:32 GMT
Pragma: no-cache
Cache-Control: no-cache
Location: http://localhost:5000/api/rest/package/5866a0f5-905a-44ff-91c3-c1489374a73e
Content-Type: application/json;charset=utf-8
Content-Length: 571

{""maintainer"": null, ""maintainer_email"": null, ""id"": ""5866a0f5-905a-44ff-91c3-c1489374a73e"", ""metadata_created"": ""2011-09-06T14:06:40.735488"", ""relationships"": [], ""metadata_modified"": ""2011-09-06T16:36:32.543461"", ""author"": null, ""author_email"": null, ""state"": ""active"", ""version"": null, ""license_id"": null, ""resources"": [], ""tags"": [], ""groups"": [], ""name"": ""test7"", ""license"": null, ""notes_rendered"": """", ""url"": null, ""notes"": null, ""title"": ""Test2 =&;"", ""ratings_average"": null, ""extras"": {}, ""ratings_count"": 0, ""revision_id"": ""92ee0b2e-c5e4-47b9-b00c-b8e29662b950""}
}}}

Alternatively you can set the content type to ""application/json"" and you don't need to URL encode. e.g.:
{{{
curl -i http://localhost:5000/api/rest/package -d '{""name"": ""test5"", ""title"": ""Test &""}' -H ""Authorization:tester"" -H ""Content-Type: application/json;charset=utf-8""
}}}

To help work out these problems with encoding in the future, I've improved the error message to show the decoded JSON string. cset:55273629a552 which is headed for CKAN 1.5 release."
1313	1317076432000000	rgrp	"Error was due to maintenance. Need both config options for recaptcha to work so either one can be used to check config. Re docs see #1358 (auto generation of docs on config from the config source).

Given that only docs remain and that is part of #1358 am closing as duplicate."
1315	1315414218000000	dread	Pretty good start added in cset:7a0e7a486df3 on default, aiming for release 1.5. Just needs some loose ends tidying up.
1315	1320173768000000	dread	Tidied up in cset:39daf1afd64a for release 1.5.
1316	1338193724000000	kindly	now get_or_bust function handles this.
1317	1315416649000000	dread	"Ok, I think this example may be when searching for ""ira"". ""irina"" works me, but ""ira"" gives: 

{{{""ira"" matched several users}}}"
1317	1315822670000000	rgrp	This is very minor IMO. I would defer this as part of a more general user system ux refactor.
1317	1325473762000000	rgrp	Moving out v1.6 as minor.
1318	1315569362000000	dread	"Problem tracked down to Adria's cset:4f1ca1eb2630 on branch feature-1229-db-out-of-controllers that missed out repoze.who in the redirects after login, when refactoring the user registration. This code went into default on 2011-07-28 for release 1.4.3.

Fixed in cset:93731cd3b22e for release 1.4.3 and doesn't affect previous releases. Tests for user registration added too."
1319	1315476057000000	shevski	Ideally we should also verify people's email addresses. Do we think that's overkill?
1319	1315904592000000	dread	"No responses received about this on ckan-discuss, so I'm taking that as no objections to requiring email address on registration.

I think that verifying email address is not worth it in this case, because the value of supplying an email address is only for resetting a password. The chance of needing a password reset AND having inputted an incorrect email address is very low, so I don't think it justifies everyone having to do this extra step. If we used email address more then that may change."
1319	1318426807000000	rgrp	@dread: hope it is OK to re-assign to me but this is very similar to #1386 (and is a su bticket of #1343)
1319	1318527613000000	rgrp	Fixed in https://bitbucket.org/okfn/ckan/changeset/130cad62163c
1319	1324036947000000	dread	Goes into release 1.5.1
1320	1317391018000000	zephod	Extend misc.py to regex find http and https, surrounding it with <>. ALSO note that CKAN flavoured markdown will not currently recognise dataset:my_data links (still uses package).
1320	1317730999000000	zephod	"Slightly painful when links appear inside naughty HTML tags or in markdown tags. Restriction: Links are auto-linked if they appear at the start of a line or after whitespace.


cset:f9dfb0506594"
1320	1318164603000000	rgrp	Completed in https://bitbucket.org/okfn/ckan/changeset/f9dfb0506594
1321	1319558004000000	dread	"We should not cache if there are flash messages to show (otherwise they get queued up for the next non-cached page view).

Fixed in cset:945e2a6ce74f for release 1.5"
1323	1315594333000000	dread	"thedatahub has a couple of auth groups with no name. The form allows it!

Fixed in cset:bebd0a46ebc6
 * form requires the name field
 * existing auth groups without name can be viewed/edited if necessary (referring by ID)

This has probably been a problem since auth groups were added to CKAN."
1324	1315948336000000	rgrp	Done and merged into main at cset:8bb0720a2150 (and deployed!)
1325	1315587113000000	dread	Fixed in cset:0dd4d4457c97 for release 1.4.3. Previous Python 2.5 incompatible versions include 1.4.2 - 1.3.4.1 and maybe further.
1327	1320662446000000	rgrp	Duplicate of #1397
1328	1340191065000000	ross	Let's see if this is still an issue in 1.8
1329	1316624026000000	zephod	"I've tried to do this wherever I could as I looked through ckan.pot for broken pieces of string. Generally it triggers errors unless things are very neatly structured (no nested links or ${a.variable} accesses, it seems) but things are quite a lot tidier. 
cset:d5bf4c7ba293
Does that count as 'fixed', or is this a permenant issue?"
1329	1317118323000000	dread	I'll take a look to see if I can do any more and then will close it.
1329	1317404566000000	dread	"POT looks far better. I couldn't see any outstanding problems.

This has gone into ckan 1.5."
1330	1327060201000000	dread	"This is simply incorrect. test_authz.py (I assume you mean the one in ckan/tests/functional?) tests that authz works all across the Web UI and API in enough detail.

The 'total site lockdown' test - perhaps you mean the TestLockedDownViaRoles class which makes up a small part of test_authz? It was a test added due to an untested use case implemented in IATI, DataGM etc. These are currently active so still need testing.

Regarding refactoring the tests to be ""proper"" then please open a new ticket, providing references to why it is not ""proper"" to test by searching for text in a web response."
1331	1325355631000000	dread	This appears to be fixed in 1.5, 1.5.1 and 1.5.2a.
1332	1315999104000000	dread	"Fixed in cset:860b357a2aec for release 1.4.3 and updated no.ckan.net.

This problem was due to {{{[1:authorization group]}}} being translated as {{{[autoriseringsgruppe]}}} and I corrected it to {{{[1:autoriseringsgruppe]}}}. This word has a bold tag, hence the brackets and the number is used to identify which bracketed word is which (when you have more than one).

It is a shame that Transifex doesn't draw attention to this problem and Babel doesn't spot the error on compilation."
1334	1316086680000000	dread	cset:b01de680bf86 copes with the problem. Now to find out why revision.packages has some None values - very odd!
1334	1319798961000000	dread	I think this has been a problem since 1.3.3. Fixed in v1.5.
1335	1315910117000000	dread	"Done to a basic extent in branch feature-1211-drupal for release 1.4.3.

Further tickets:
 * #1322: Action API improvements
 * #1315: Document /api/action"
1338	1316951545000000	amercader	Reopening, because another change is needed to support custom schemas
1338	1317117738000000	amercader	Fixed in eca1edce3a0f
1339	1316010607000000	kindly	"I have fixed the isodata and made a slightly modified int_converter for this case.  In the correct place and raises invalids on not being an int.  cset:a4af115116bb

The thinking was that the input of these fields would be through the api so the empty string case did not arise.  These should clearly be converted to None (Null).

What issues in general?
Having done this lots of times before you always end up needing to write your own little validators as the standard ones never do what you want.  Thats the point of them. Look in ckan/lib/validators if you need examples.

So what you did was correct..."
1340	1315991534000000	dread	Fixed in default in cset:33856d3ce84e aimed at release 1.5
1341	1315996368000000	kindly	"This was run to delete the users and their mistaken revisions that where created.
{{{
BEGIN;
delete from revision r where r.id in (
    select r.id from ""user"" join revision r on r.author = ""user"".name 
    left join resource_revision rr on rr.revision_id = r.id 
    left join package_revision pr on pr.revision_id = r.id 
    left join group_revision gr on gr.revision_id = r.id  
    where ""user"".created between '2011-08-15' and '2011-09-06'
    and gr.id is null and rr.id is null and pr.id is null 
    and (""user"".name similar to '%[0-9]' or ""user"".fullname similar to '[A-Z][a-z]*[A-Z]%') 
    and ""user"".name not like 'http%'
);
delete from ""user"" u where u.id in (
    select ""user"".id from ""user"" 
    left join revision r on r.author = ""user"".name 
    where r.id is null and ""user"".created between '2011-08-15' and '2011-09-06' 
    and (""user"".name similar to '%[0-9]' or ""user"".fullname similar to '[A-Z][a-z]*[A-Z]%') 
    and ""user"".name not like 'http%'
);
COMMIT;
}}}
"
1341	1319649573000000	dread	The majority of our 6000 users are still spammers. Can we simply elimenate those who've not made any revisions? Even if we take a few genuine users with it, these are pretty dead accounts anyway.
1341	1319709997000000	dread	Reopening - this is still a serious problem. We can't link to the user page because it is so embarrassing: http://thedatahub.org/user
1343	1316078440000000	dread	I don't think email confirmation is necessary - see discussion at #1319
1343	1318528138000000	rgrp	Remove from ckan-v1.5 since remaining non-complete items (user page improvements and modal login won't get done in v1.5.
1344	1316078757000000	kindly	fixed cset:f08215845dab
1345	1337961353000000	nils.toedtmann	This becomes an actual problem on the CKAN farm s057, see http://trac.okfn.org/ticket/1245
1345	1338551926000000	nils.toedtmann	See #2485 for workarounds containing the leak(s).
1345	1340190737000000	ross	Moved out of milestone so that it gets looked at again soon 
1345	1343215489000000	amercader	See https://github.com/okfn/ckan/pull/73
1346	1316086314000000	dread	"Fixed in cset:df299e69d456 on default for release 1.5.
Problem exists on releases 1.4.3 - 1.3.1 and probably earlier too."
1346	1316094632000000	dread	Also Transposed to 1.4.3.1.
1347	1316094608000000	dread	Fixed on cset:7c3cc0fd6ae4 on branch release-v1.4.3.1.
1349	1316277490000000	zephod	Done. cset:e074aee19923
1350	1316624288000000	zephod	"Was going to reimplement an old workaround described by Friedrich, where a language.js file is served through the home controller (with appropriate settings in routing.py) and so ${_('string literals')} will be translated. See:
  * https://bitbucket.org/okfn/ckan/src/2832e49d6baa/ckan/controllers/home.py#cl-48
  * https://bitbucket.org/okfn/ckan/src/2832e49d6baa/ckan/templates/home/language.js

However the string-extraction mechanism seems geared towards Genshi templates and hacks are required to make it read a javascript file neatly (ie. without putting the *entire file* into a string for translation). A more elegant solution seems to be using an xi:include to pull in a genshi template which contains an html <script> tag. 
  * cset:d5bf4c7ba293

Issue is resolved; strings are now translated."
1351	1316540182000000	zephod	Fixed in cset:4eebcb118b09
1353	1317075904000000	rgrp	This is not deliberate and has been fixed in #1348
1354	1316970374000000	amercader	There is no way to maintain backwards compatibility, so let's forget about it for now
1356	1317220284000000	kindly	fixed cset:1defa48097f5
1357	1318162150000000	rgrp	Code to create a test dataset for data preview: https://gist.github.com/1273560 (have not added to CKAN CLI since it seems too specialist and liable to change ...)
1357	1318164458000000	rgrp	Completed and merged into default in https://bitbucket.org/okfn/ckan/changeset/9ea072d67245
1358	1317748211000000	dread	You're gonna have massive config files if you do this! Might well be worth it though.
1359	1321563082000000	rgrp	Really annoying.
1359	1329076613000000	rgrp	"I have completely overhauled the licenses repo (https://github.com/okfn/licenses), see https://github.com/okfn/licenses/issues/1 and new looking:

http://licenses.opendefinition.org/

Next step is to ship the core set of licenses we need for CKAN as part of CKAN and remove the external dependency."
1359	1329076629000000	rgrp	Time so far: 0.5d
1359	1329132464000000	rgrp	"Fixed, see https://github.com/okfn/ckan/commit/2f789700af9ba20ed2970674c6504be8a33401d9

Adopted http://licenses.opendefinition.org/licenses/groups/ckan.json for CKAN as the default (inlined it in code).

Took longer than expected as did more work on the licenses service (which was not strictly necessary!)"
1360	1317315031000000	dread	I believe zephod has removed these from the UI already. I removed them from the search code, tests, docs and provided suitable guidance in cset:5b20ae1673ea which is headed for CKAN 1.5.
1361	1317082893000000	rgrp	Fixed in https://bitbucket.org/okfn/ckan/changeset/cb641a5151df
1363	1317656645000000	johnglover	"table: task_status

id
entity_id
entity_type
task_type
key
value
date_updated
state

unique(entity_id, task_type, key)

example keys:
last_task_id"
1364	1318199135000000	kindly	"fixed cset:294a0b6577b0

"
1365	1319815052000000	dread	Done on defect-1365-search-params for 1.5. No official releases exist with this broken
1367	1317394273000000	dread	Fixed in cset:d15d81aa63cf for 1.4.3.1.
1369	1317732684000000	zephod	"cset 6904048ce970
Okfn needs to accept a github pull request to make this work. Currently CKAN live-links to the raw github script for ckanjs, which must be updated."
1369	1318165086000000	rgrp	Completed and merged in https://bitbucket.org/okfn/ckan/changeset/e75158acdcfa
1370	1325474898000000	rgrp	Unsure of importance. Probably fairly low but also fairly cheap to do. However, reckon we should defer of v1.6 given what else we have.
1370	1334674002000000	toby	"We can supply the following to ShareThis


* st_url 	Specifies URL (can be shortened URL) that you would like shared

* st_title 	Specifies title that you would like shared

* st_image 	Specifies link to image you would like displayed in the shared content

* st_summary 	Specifies summary text/description you wish to share


currently we just have the defaults but do we want to set these?"
1370	1334674212000000	toby	"config options:

* social.sharethis_api_key

* social.sharethis_style = horizontal | vertical | large | none

* social.sharethis_sites = googleplus twitter facebook email sharethis

Easy to add new sites we just need the ShareThis name and a description
Currently these are all site wide maybe add options for specific templates (via the template not config)"
1370	1334675681000000	toby	style & sites can now be passed by individual templates
1370	1334838259000000	toby	"The url issue wants resolving



when 1.7 released need to 

* ensure setup.py setting are complete/correct

* publish to pypi

* check setup instructions work
"
1370	1335230503000000	rgrp	Just to check: I thought this was going into core. This really does not need to be an extension (it is so small ...)
1370	1335273643000000	toby	I've talked to David and we both feel that this should not be a part of core.
1371	1317833379000000	johnglover	Done, in branch feature-1371-task-status-logic-layer
1371	1324037905000000	dread	Goes into release 1.5.1.
1373	1317829572000000	shevski	Apparently works locally for David Raznick on default
1373	1319542883000000	dread	I think this is due to the etags cache not taking into account whether you are logged in. So the page is cached by squid (which is why it's not seen anywhere apart from thedatahub.org).
1373	1320174240000000	dread	Squid force caching is now turned off on the main page, and etags sorted out in #1388.
1374	1317895709000000	dread	Would be nice also to print the default language first in the list.
1374	1319648726000000	dread	This is fixed in branch defect-1418-i18n for release 1.5
1375	1318260008000000	amercader	Fixed in 888ed50c098d, using Session.flush() rather than the proposed one.
1376	1318091245000000	kindly	fixed cset:39acf62f30b0
1377	1318245795000000	zephod	Complete: cset:b216952644aa
1378	1319567698000000	zephod	https://bitbucket.org/okfn/ckan/changeset/494bbd08364f
1378	1324047835000000	dread	Went into release 1.5.1
1379	1319306665000000	rgrp	This is minor but a real bug (seen now in several datasets). As easy to fix suggest bumping and trying to get into v1.5 (?).
1379	1320155927000000	zephod	"Resolved in cset:af694663f30e

Now allowing markdown to do its thing, then fixing remaining links afterwards. More success that way. "
1379	1320161439000000	zephod	"actually here:
https://bitbucket.org/okfn/ckan/changeset/607f3363a8c5"
1380	1319627454000000	zephod	https://bitbucket.org/okfn/ckan/changeset/f600e0d37f6c
1380	1324048324000000	dread	This has gone into v1.5.1.
1381	1319021092000000	amercader	Now implemented on 6227142b0460
1381	1324037815000000	dread	In release 1.5.1.
1383	1318528301000000	rgrp	Just to check: I thought conclusion was we do not need IResourceUrlChanged since we would only do archiving for newly created resources?
1383	1319405579000000	kindly	We only added the Iresourceurlchange interface as we made the IDomainObjectModification include the Package.
1383	1320141781000000	kindly	fixed cset:ecfb0f8b633c
1385	1318419159000000	dread	"Another change needed for this (via Florian):
{{{
diff -r 6f27828a4621 ckan/lib/cli.py
--- a/ckan/lib/cli.py	Wed Oct 12 11:10:32 2011 +0100
+++ b/ckan/lib/cli.py	Wed Oct 12 12:23:18 2011 +0100
@@ -132,7 +132,7 @@
         pg_cmd += ' -U %(db_user)s' % self.db_details
         if self.db_details.get('db_pass') not in (None, ''):
             pg_cmd = 'export PGPASSWORD=%(db_pass)s && ' % self.db_details + pg_cmd
-        if self.db_details.get('db_host') not in (None, '', 'localhost'):
+        if self.db_details.get('db_host') not in (None, ''):
             pg_cmd += ' -h %(db_host)s' % self.db_details
         if self.db_details.get('db_port') not in (None, ''):
             pg_cmd += ' -p %(db_port)s' % self.db_details
}}}"
1385	1326218703000000	dread	"This patch has gone in (aimed for CKAN 1.5.2) [master 5b518e5].

Regarding setup to use unix sockets (as opposed to the loopback), I'm not keen, since it requires an extra step in editing the postgres config, for a barely noticeable performance improvement. Thanks for alerting us to it though, Florian."
1386	1318527591000000	rgrp	Fixed in https://bitbucket.org/okfn/ckan/changeset/130cad62163c
1386	1323278831000000	rgrp	See #1534 for remaining work to ensure that when usernames get changed connection with activity is not lost.
1386	1324036930000000	dread	These changes go into release v1.5.1.
1387	1318429228000000	dread	I'm generally against validation. When doing any bulk import, it either have to ignore validation errors or lose data. If you ignore the errors, you find you can't edit the dataset without correcting the validation error, and you often end up guessing, just to get your other changes in. All in all, I think it is better to nudge users, with javascript pop-ups in the form, or quality scores, rather than hard-and-fast validation. 
1387	1320142210000000	rgrp	This won't happen in v1.5.
1388	1320174229000000	dread	Etags fixed in cset:a3c8d4f7cf91 for release 1.5.
1392	1319625243000000	johnglover	Now on s054.okserver.org
1393	1318505854000000	dread	"I changed this:
{{{
diff -r 47657581fc30 ckan/tests/__init__.py
--- a/ckan/tests/__init__.py	Wed Oct 12 17:58:19 2011 +0100
+++ b/ckan/tests/__init__.py	Thu Oct 13 12:29:54 2011 +0100
@@ -373,7 +373,7 @@
     plugins.load('synchronous_search')
 
 def is_search_supported():
-    supported_db = ""sqlite"" not in config.get('sqlalchemy.url')
+    supported_db = True
     return supported_db
 
 def is_regex_supported():
}}}

But there seems to be a problem finding the package when trying to index it:
{{{
======================================================================
ERROR: test suite for <class 'ckan.tests.functional.test_search.TestSearch'>
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/nose/suite.py"", line 208, in run
    self.setUp()
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/nose/suite.py"", line 291, in setUp
    self.setupContext(ancestor)
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/nose/suite.py"", line 314, in setupContext
    try_run(context, names)
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/nose/util.py"", line 478, in try_run
    return func()
  File ""/home/dread/hgroot/ckan/ckan/tests/functional/test_search.py"", line 21, in setup_class
    CreateTestData.create_search_test_data()
  File ""/home/dread/hgroot/ckan/ckan/lib/create_test_data.py"", line 66, in create_search_test_data
    cls.create_arbitrary(search_items)
  File ""/home/dread/hgroot/ckan/ckan/lib/create_test_data.py"", line 197, in create_arbitrary
    model.repo.commit_and_remove()
  File ""/home/dread/hgroot/pyenv-ckan/src/vdm/vdm/sqlalchemy/tools.py"", line 110, in commit_and_remove
    self.commit()
  File ""/home/dread/hgroot/pyenv-ckan/src/vdm/vdm/sqlalchemy/tools.py"", line 100, in commit
    self.session.commit()
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/sqlalchemy/orm/scoping.py"", line 139, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/sqlalchemy/orm/session.py"", line 614, in commit
    self.transaction.commit()
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/sqlalchemy/orm/session.py"", line 385, in commit
    self._prepare_impl()
  File ""/home/dread/hgroot/pyenv-ckan/lib/python2.6/site-packages/sqlalchemy/orm/session.py"", line 361, in _prepare_impl
    ext.before_commit(self.session)
  File ""/home/dread/hgroot/ckan/ckan/model/extension.py"", line 103, in before_commit
    methodcaller('before_commit', session)
  File ""/home/dread/hgroot/ckan/ckan/model/extension.py"", line 38, in notify_observers
    func(observer)
  File ""/home/dread/hgroot/ckan/ckan/model/modification.py"", line 45, in before_commit
    self.notify(obj, DomainObjectOperation.new)
  File ""/home/dread/hgroot/ckan/ckan/model/modification.py"", line 70, in notify
    observer.notify(entity, operation)
  File ""/home/dread/hgroot/ckan/ckan/lib/search/__init__.py"", line 93, in notify
    package_to_api1(entity, {'model': model}),
  File ""/home/dread/hgroot/ckan/ckan/lib/dictization/model_dictize.py"", line 231, in package_to_api1
    dictized = package_dictize(pkg, context)
  File ""/home/dread/hgroot/ckan/ckan/lib/dictization/model_dictize.py"", line 118, in package_dictize
    raise NotFound
NotFound

----------------------------------------------------------------------
Ran 1 test in 2.734s

FAILED (errors=1)

}}}

Any ideas John?"
1393	1318508765000000	johnglover	"Yes, there are a few of these problems with SQLite which is why the tests are being skipped currently. I'm not exactly sure of the reason, it seems that it sometimes drops tables from memory, but we haven't found a solution. Myself and David Raznick were going to spend some time looking at it but haven't had a chance yet.
"
1393	1320153590000000	dread	Thanks John, reassigning to you for the future.
1394	1320663304000000	dread	I have half a fix for this at the moment.
1394	1321872676000000	dread	Not moved on during fortnight - keen to close this off.
1394	1323166530000000	dread	Not moved yet, but want to finish it...
1394	1324292900000000	dread	Defo for this sprint.
1394	1325604784000000	dread	"Done my best here: [release-v1.5.1c c51db1a] Changed ""incomplete"" to ""invalid"" but numbering is done in Javascript, so will leave it. 

I added a test for the main part of the validation (error_dict), but the API doesn't expose the error_summary which the javascript seems to get hold of somehow, so wasn't able to test for that."
1395	1318520543000000	seanh	"The exact command that introduced the too-new webob into my virtualenv was:


{{{
pip install --ignore-installed -r pyenv/src/ckan/requires/lucid_missing.txt -r pyenv/src/ckan/requires/lucid_conflict.txt
}}}
"
1395	1318525201000000	dread	This problem is mentioned here: http://docs.ckan.org/en/latest/test.html but you're right, it really should be solved in the install instructions.
1395	1320857823000000	dread	"I added this to the instructions a few days ago to fix this issue for the 1.5 release:
{{{
       pip install webob==1.0.8
}}}
Cheers Sean."
1396	1323255616000000	markbrough	+1 on listing owned datasets and seeing all historical activity for a user (especially for logged in user :-) )
1396	1328179618000000	rgrp	add note about needing to add datasets attribute to user dict in logic layer
1396	1328225696000000	rgrp	"Fixed. https://github.com/okfn/ckan/commit/a22624ffa9b8cac28b78d5ef5f93d5b682558b14

Need to check performance and css possibly as loading lots of datasets could be slow via administrator could be slow."
1396	1330086237000000	dread	"Went into CKAN 1.6
"
1398	1321826380000000	kindly	"deployed on test.ckan.net

docs added cset:47216c49fcec881f4eacc7170cb02d0a443500a2"
1400	1328529013000000	rgrp	John: can you comment on status here. Have you already got docs for this?
1400	1328612209000000	johnglover	I haven't written any docs for this. I'm also not sure what the status is, Ross was doing some work on it recently so he is probably the man to ask.
1400	1329729653000000	rgrp	@johnglover: I don't think Ross has done much here and he's obviously occupied with DGU at ;-) As you worked on this earlier would be able to look at this and a) check what docs there are b) add to them as necessary :-)
1400	1329746131000000	johnglover	Will document and update wiki this sprint then ping Mark about a blog post.
1400	1330524586000000	johnglover	"Async task docs are at: http://wiki.ckan.org/Writing_asynchronous_tasks
Archiver readme at: http://github.com/okfn/ckanext-archiver

Emailing Mark RE blog post."
1400	1331481461000000	rgrp	Great to see this is done. I do have one question: why did we put this on the wiki rather than in the proper CKAN docs? In general, I think it would be better to use the wiki less and our proper docs more ...
1400	1331543941000000	johnglover	"I thought that we had some sort of consensus that the official docs were aimed more at system admins and people using the CKAN WUI/API, with the wiki aimed more at developers? It would be easy to move of course, but there is no real ""developers"" section in the official docs that I can see, and it's even called ""CKAN's Administration Guide""."
1400	1331544485000000	rgrp	"Hmmm. Emerging consensus from discussions in last few months is that wiki is fairly confusing and we should move core, solid docs (from whichever area) to the main docs.

Furthermore, key dev info like how to setup and do extensions *is* already in the main docs (see http://docs.ckan.org/en/latest/writing-extensions.html) and has been for 6m+. I've created #2226 for more work on docs and you may wish to comment there."
1400	1331544816000000	johnglover	I'll have a look thanks. I'm +1 on using main docs instead (if we move everything), I was just trying to keep things consistent for now.
1401	1320142359000000	rgrp	Hi, this is very useful to hear. Can you point out links or even better submit a patch / pull request: http://wiki.ckan.org/Submitting_a_code_patch
1401	1321037805000000	dread	"Another problem is 401 redirect when your not authorized to do something, like creating a group. The redirect URL is set in the who.ini:
{{{
login_form_url= /user/login
}}}"
1401	1322066474000000	dread	Patch from Augusto Herrmann for the icon URLs: http://pastebin.com/aRBQmftL
1401	1326460993000000	dread	"When javascript calls other scripts, it misses the mount-point prefix.
e.g.
application.js has hard-coded URL /api/2/util/is_slug_valid

The URL prefix is stored in request.environ['SCRIPT_NAME'] so perhaps this value should be put in the HTML somewhere for the javascript to get at?"
1401	1326747111000000	dread	"Links have been fixed on branch defect-1401-mount-non-root. (Instead of using c.site_url the links now just detect the mount url like the rest of the links.)

Now it needs the js and css to be fixed too. Reassigning to Tom for this.

Brazilians currently waiting for this to be fixed."
1401	1327089904000000	rgrp	"Fixed. See https://github.com/okfn/ckan/commit/7088b1fcae685e56a280ec7b396b0f9803a477d9

@dread: not at all clear why we had to change from g.site_url to h.url_for (idea was people could set site_url if the site was not at root ...)"
1401	1327665399000000	dread	"Basic check of the home page shows the CSS has not been fixed:
{{{
GET http://127.0.1.1/img/find.png 404 (Not Found)
GET http://127.0.1.1/img/share.png 404 (Not Found)
GET http://127.0.1.1/img/collaborate.png 404 (Not Found)
}}}
"
1401	1328001014000000	rgrp	"Thanks for that dread. Have now fixed these issues as well: https://github.com/okfn/ckan/commit/abb99cae9972d45f4b3acfbf8ea711da398d8a4a

Re-closing."
1404	1328609360000000	rgrp	Quite a bit of this is now duplicated in other tickets e.g. #1506. Decide what isn't and it's priority (do not have to implement).
1405	1320152291000000	dread	"Fixed in cset:e68926926bee for release 1.5.

David looked for duplicates on thedatahub.org and found one - http://thedatahub.org/group/lodcloud with http://thedatahub.org/dataset/didactalia. I fixed that by opening the dataset, editing, saving."
1406	1320930088000000	dread	Note, the Atom feeds are still working, with the links still advertised with <link>s home and package pages, but the visual element was removed.
1407	1323764239000000	rgrp	Fixed in https://github.com/okfn/ckanext-stats/commit/a95bbf7ffc0a36a747467f568a011b6865b64478.
1408	1319794384000000	rgrp	Suggest that going forward we always boot a site user with the same id as site id (which we may want to leave ckan.site_id blank and force user to choose this going forward?) and give it a password. May need migration or instructions in UPGRADE.txt for existing users.
1408	1320141847000000	kindly	fixed cset:51c7d51f3c17
1409	1319306802000000	rgrp	What do we do for people without email addresses (no gravatar or a standard anonymous one?)
1409	1319567582000000	zephod	https://bitbucket.org/okfn/ckan/changeset/c8c62bc8766d
1409	1324047722000000	dread	In 1.5.1 release.
1410	1319213205000000	zephod	"Oops: #1409
double posted."
1412	1328226385000000	rgrp	I'm completely unable to reproduce this issue in either FF (9.0.1) or Chrome 16.0.912.75.
1413	1322479113000000	seanh	"I've made a first attempt at this here:

https://github.com/seanh/ckan/compare/feature-1413-ask-users-to-add-email-address

I used flash_notice() to ask the user to add an email whenever they visit their account page, if they don't have one already. This means they'll see the notice when they login, because after login they are redirected to their account page. Issues:

Is it okay to approximate 'once they log in' as 'whenever they visit their account page' like this?

Do I need to do something to support i18n for the string I added? I looked at users of flash_*() elsewhere and they seemed to be hardcoding the strings in English."
1413	1322481235000000	dread	" approximate 'once they log in' as 'whenever they visit their account page' 
I had imagined that this would be done in the user.py:logged_in method, but doing it in your way sounds like an even better plan. 

Another thought is: a lot of people might just use the cookie and v. rarely logout/in. Perhaps it could be done when they come back to the site at intervals (e.g. daily)?

 i18n
Yes your strings should be internationalised because they are user visible.

You're right that these other strings should be internationalised. I've created a separate ticket for this: #1491"
1413	1322575534000000	seanh	"  Another thought is: a lot of people might just use the cookie and v. rarely logout/in. 
  Perhaps it could be done when they come back to the site at intervals (e.g. daily)?

As discussed on IRC I've moved the notice from the user account page to the front page, in the hopes that people will see it often enough even if they are always logged in via a cookie. As discussed on IRC, we could make the notice appear on every page but no more than once per day, but that would be more complicated to implement and more likely to break.

  Yes your strings should be internationalised because they are user visible.

Done.

  You're right that these other strings should be internationalised. I've created a 
  separate ticket for this: #1491

Also done! :)"
1413	1322595160000000	seanh	"Added a 'please enter your full name' flash notice as well (the two are combined into one if they have neither full name nor email), added unit tests, fixed some issues.

Still need to adjust the strings and change the full name notice so that it applies to people with gmail IDs only.

https://github.com/seanh/ckan/compare/feature-1413-ask-users-to-add-email-address"
1413	1323088091000000	seanh	"Adjusted the 'please add your email' string and changed the 'please add your full name' notice to be used only for Google OpenID users. Finished?

https://github.com/seanh/ckan/commits/feature-1413-ask-users-to-add-email-address"
1413	1323269472000000	dread	"Code reviewed - looks really good. Do merge in to master if it is not already.

A couple of tips: 
 * we all use 'model.User' instead of 'model.user.User' but it's not important for tests...
 * probably better to use CreateTestData.create_user() to create user objects in the future, avoiding faffing around with creating revisions etc. that are also nastier to debug when they go wrong."
1413	1330020486000000	dread	"Went into CKAN 1.6
"
1415	1319457583000000	nils.toedtmann	"Arww ... sorry i only now rediscovered James' mail ""CKAN Packaging"" from Sept 29th where he announced the availability of the repository http://apt.okfn.org/ckan-1.4.3.1 . This package release already addresses many of the above points.

I will test those packages and refine my comments then. Sorry for the noise.

"
1415	1323167941000000	thejimmyg	"This is all complete now. We aren't yet allowing multiple options, but we do support proper version numbers and the domain name. Other features will be implemented as different scripts for the timebeing eg ckan-setup-solr.
"
1416	1319794595000000	rgrp	In normal user submission this would result in errors reported and no 500. Happy to have this switch to 400 if you think this is a good idea.
1416	1320153507000000	dread	"This seems to have been fixed in #1229. Added a test for this cset:5d6a3e50fe8f on default to demonstrate it displays a validation error, as rgrp suggests. 

Note, this ticket is about spammers missing some of the form fields, rather than any normal user usage, where the browser sends all the fields whether you fill them or not."
1417	1319651617000000	dread	Fixed in branch defect-1418-i18n  for release 1.5.
1418	1319539691000000	dread	Same as #1374
1419	1319548778000000	rgrp	I've successfully logged into thedatahub using my openid. Issues may arise especially with google openid due to changes in site (from ckan.net to thedatahub.org). See: http://lists.okfn.org/pipermail/ckan-dev/2011-October/001384.html
1419	1319795920000000	dread	This seems to work better today...! myopenid works for me fine with my existing account and by reregistering. My google id works only if I reregister, and I think that is because I hadn't registered before. Closing.
1421	1319639311000000	dread	Fixed in cset:109db2176fac for 1.5 release.
1422	1319645722000000	dread	Done in cset:54fc460602d2 on default for 1.5.1 release.
1425	1319735012000000	dread	Cheers for taking this on Tom
1425	1326821722000000	dread	"There is a package_delete logic function to achieve this (and indeed group_delete too).

One of the reasons we haven't advertised it with a button is that anyone with 'edit' privileges can go round deleting packages. It's one thing spotting graffiti, but when you delete packages, it takes a lot of effort to spot nefarious deletions. 

I think should either restrict deleting to sysadmins or have a separate authz-action DELETE-PACKAGE that is not given to the average logged-in user.

I believe Wikipedia does something similar - the average Joe can edit, but can't delete pages."
1425	1327605718000000	zephod	"Refactored it to be (a) easy to find, and (b) a two-stage process which has a little more gravity. Like Bitbucket and GitHub.

https://github.com/okfn/ckan/commit/f3a4c3de70da08d396da4e65a5d286b253be0e0b"
1425	1330085282000000	dread	Went into CKAN 1.6
1426	1319709236000000	dread	Reading http://www.checkupdown.com/status/E409.html I've changed my mind - 409 is ok for an application level validation error.
1427	1319709925000000	dread	Done in cset:ec9a9efc2d40 for release 1.5
1428	1319804773000000	dread	Fixed in a3b0080467d4 for release 1.5
1430	1320339962000000	amercader	"I've been digging more on this one.
To reproduce it, you just have to edit the same dataset in both sites (production and testing). Just after editing the dataset, the search index will get mixed site_ids.

I checked the jetty logs (see attached files) and just after editing a dataset there are two POST requests to update the index. The request logs don't show the requests params so it's hard to tell what the second call does (it probably is the commit):
https://bitbucket.org/okfn/ckan/src/97e1e90d66d7/ckan/lib/search/index.py#cl-144

In any case, it's clear that the problem may be related with the datasets in the two cores sharing the same id. We are currently using the dataset id as uniqueKey in SOLR, i.e in our schema.xml, we are defining:

{{{
<uniqueKey>id</uniqueKey>
}}}

According to the SOLR docs:
""If a document is added that contains the same value for this field as an existing document, the old document will be deleted.""

http://wiki.apache.org/solr/SchemaXml#The_Unique_Key_Field

I would expect the uniqueKey not to be mixed between cores, but it looks like it happens otherwise. Maybe we should generate a solr_id specific to each document for each site, as described here:
http://wiki.apache.org/solr/UniqueKey#UUID_techniques

(Note that apart from the testing/production site use case, at some point sites involved in harvesting could also end up with datasets with the same id.)

Again, I'm not a SOLR expert, so the problem could be a completely different one!

"
1430	1320431138000000	amercader	"Right, more news on this front.

I've tested a patch which uses a hash of the dataset id and site_id to produce a unique id, and then configured the iati solr cores to use index_id as uniqueKey:
https://bitbucket.org/okfn/ckan/changeset/855f5a452f60

Unfortunately, that did not solve the issue. Again, updating the same dataset in both apps messes things up. In this case, documents don't get replaced, but duplicated, so the new uniqueKey is working.

I am more inclined to think that this is caused by a misconfiguration in the SOLR instance in s046. This is the file where the two cores are configured:

{{{
<solr persistent=""true"" sharedLib=""lib"">
 <cores adminPath=""/admin/cores"">
  <core name=""testing.iatiregistry.org"" instanceDir=""testing.iatiregistry.org"">
    <property name=""dataDir"" value=""/usr/share/solr/testing.iatiregistry.org/data"" />
  </core>
  <core name=""iatiregistry.org"" instanceDir=""iatiregistry.org"">
    <property name=""dataDir"" value=""/usr/share/solr/iatiregistry.org/data"" />
  </core>
 </cores>
</solr>
}}}

Following this paths: /usr/share/solr/iatiregistry.org symlinks to /etc/solr/iatiregistry.org, /etc/solr/iatiregistry.org/data is empty (as well as the testing equivalent).
On the other hand, looking at the admin interface and at some errors that I got it seems that the data folder that both cores are using is /var/lib/solr/data/index 

Maybe that's the problem?"
1430	1320444567000000	pudo	You probably know this by know but the solrconfig.xml for both points to /var/lib/solr/data (line 71). 
1430	1320660144000000	amercader	No, I didn't know it. Is this supposed to be the correct setting or should each core have its own data dir?
1430	1320667523000000	rgrp	@pudo: brilliant spot. How did that misconfig end up there? Anyway, commenting out and rebooting means we do now have separate cores seems to fix it.
1430	1320670062000000	amercader	"As rgrp mentioned, we commented out the <dataDir> directive in the solrconfig.xml files and rebooted. That made the cores use the data dir they were supposed to (the one in solr.xml) and from the tests I made looks like it finally fixed the issue.



"
1430	1324033923000000	dread	Fixed in CKAN 1.5.1. Affects all previous CKANs that use SOLR in these circumstances.
1431	1320084104000000	dread	Fixed in cset:711a68a12d90 for release 1.5.
1432	1324290164000000	ross	"PhantomJS ( http://www.phantomjs.org/ ) looks like the perfect way to run a JS scraper offline but still within the context of a browser.

Would need to consider how the script would be executed over multi-page datasets, but I'm fairly sure it would be possible to come up with a workable solution."
1433	1320666509000000	kindly	Done but waiting to merge after 1.5 release.
1433	1321827123000000	kindly	"cset: 68c37312ef70349431213465005761edf434d27e
"
1433	1324472583000000	dread	Has gone into CKAN 1.5.1 release.
1434	1338203960000000	seanh	At least for the core extensions, any i18n-able strings should be getting pulled into the ckan.pot file by default.
1434	1341236921000000	seanh	"Done for the core extensions, pull request: https://github.com/okfn/ckan/pull/47

Perhaps strings from the non-core but officially supported extensions should be added to, but we haven't decided which extensions those are yet, so add another ticket to do that later:

http://trac.ckan.org/ticket/2625"
1435	1320930310000000	dread	Interesting. What's the reason to justify the effort?
1435	1323168783000000	thejimmyg	"I personally can't see the benefit of switching to a generic paid service when we already have a highly customised and working infrastructure based on buildbot and buildkit - we do testing in VMs as well as continuous integration. 

What is the advantage?

Suggest wont fix?"
1435	1323283538000000	dread	"From IRC today:
{{{
<rgrp> dread: btw have a big suggstion -- switch to continuous.io for our buildbot stuff ...
<rgrp> openspending have done this and it's a nice setup ...
<dread> rgrp: interesting - what's better?
<dread> i assume it just starts a script and reports the result?
<rgrp> that's right though also has integration with some bakcens (but we probably don't need that)
<rgrp> the point is we don't need to boot machines, install and configure buildbot etc (though we may now have automated that ...)
<dread> ah, i see, it's in the cloud
<dread> did all that months ago, and don't need to setup the machine any more.
<dread> if we do it again though, I'm all for it
}}}"
1436	1320230896000000	johnglover	This also applies to CKAN core
1436	1320243278000000	johnglover	Fixed in branch feature-1371-task-status-logic-layer, will merge with default after 1.5 release later today.
1437	1320173496000000	dread	This can be fixed with one line of code, so I'm doing it for release 1.5.
1437	1320173795000000	dread	Fixed in cset:5d0bf20a1746 for 1.5. Broken since 1.4.3.
1439	1325474974000000	rgrp	Moving out of v1.6 (has not super ticket atm and seems of low relative importance -- nice to have but not essential).
1440	1320235084000000	dread	"I've done this. 'db load' now also does 'db upgrade' and 'search-index rebuild'. If you want to debug the load (or don't need the search index, cos it takes ages to do), then you can just do 'db load-only' which does what 'db load' did before.

Changed in cset:9e51df5c496b for 1.5 release."
1441	1320235062000000	dread	Fixed in cset:35542f1c60a2 for release 1.5.
1442	1320275623000000	dread	Fixed in cset:819a74bd1c03 for release 1.5. Note release 1.5 doesn't have #1381 feature, so you're not supposed to create with groups anyway, but this will be useful if people try it.
1443	1320432511000000	dread	Fixed in cset:96b5d9af70a7 for release-v1.5
1444	1323089960000000	dread	I've not looked at this yet, but now detection is disabled, less important.
1444	1340190852000000	ross	7 months, no activity, dead bug.
1445	1323178176000000	zephod	JohnGlover has done most of this and I've been adding aesthetic tweaks. The resource page is now tidy and has a similar look and feel to its parent Dataset view page. I'm closing this ticket and its sibling #1450; I am merging the feature-1450-dataset-view branch which contains all of this work. 
1445	1330019916000000	dread	This went into CKAN 1.6
1446	1321872724000000	rgrp	Have made significant progress on new recline but not yet operational. See https://github.com/okfn/recline and https://github.com/okfn/recline/issues/6 https://github.com/okfn/recline/issues/12 https://github.com/okfn/recline/issues/8 also https://github.com/okfn/recline/issues/10 and more ...
1446	1326281594000000	rgrp	"Marking as complete as Data Explorer is now functional enough for our purposes. Tickets done include (* indicates improvement over current explorer)

 * Core Backbone Models representing Dataset and Tabular data: https://github.com/okfn/recline/issues/10
 * New theme: https://github.com/okfn/recline/issues/22
 * Read-only mode: https://github.com/okfn/recline/issues/17
 * Introduce hash navigation / state support (*): https://github.com/okfn/recline/issues/19
 * Re-enable editing in DataTable (*): https://github.com/okfn/recline/issues/13
 * [super] DataTable view (in Backbone) (*): https://github.com/okfn/recline/issues/14
 * DataExplorer parent view (*): https://github.com/okfn/recline/issues/12
 * Simple graph widget using flot: https://github.com/okfn/recline/issues/11

NB: quite a bit of work done pre 2012-01-09 iteration but in that iteration that we finished the work."
1446	1326281658000000	rgrp	"Total time:

* 2012-01-09: 4.5d
* Pre that date: 5d"
1447	1322220690000000	dread	"This appears to have happened again today on test.ckan.net and someone has sorted it.

The problem is visible on munin as inodes running out. 

 * eu25 seems ready to fall over in about a week: http://munin.okfn.org/okfn.org/eu25.okfn.org-df_inode.html
 * thedatahub.org on s055 (and other fry instances) seem to have dynamically adjusted inode table size (by the kernel) so is less of a problem
"
1447	1322648873000000	dread	"As predicted, this happened again today. From the following analysis it confirms that the problem is the cache growing and growing.

Disk usage in megabytes: 
{{{
okfn@s025:~/var/srvc/publicdata.eu$ du -s -m /*
7	/bin
22	/boot
1	/dev
10	/etc
4157	/home
0	/initrd.img
0	/initrd.img.old
114	/lib
1	/lost+found
1	/media
1	/mnt
1	/opt
0	/proc
1	/root
7	/sbin
1	/selinux
1	/srv
0	/sys
1	/tmp
421	/usr
443	/var
0	/vmlinuz
0	/vmlinuz.old
}}}
{{{
okfn@s025:~/var/srvc/publicdata.eu$ du -s -m /home/okfn/var/srvc/publicdata.eu/*2173	/home/okfn/var/srvc/publicdata.eu/backup
1	/home/okfn/var/srvc/publicdata.eu/backup_RENAMED_TO_AVOID_MAYHEM.sh
1	/home/okfn/var/srvc/publicdata.eu/common.sh
1893	/home/okfn/var/srvc/publicdata.eu/data
1	/home/okfn/var/srvc/publicdata.eu/fetch.sh
1	/home/okfn/var/srvc/publicdata.eu/gather.sh
1	/home/okfn/var/srvc/publicdata.eu/pip-requirements.txt
1	/home/okfn/var/srvc/publicdata.eu/publicdata.eu.ini
86	/home/okfn/var/srvc/publicdata.eu/pyenv
1	/home/okfn/var/srvc/publicdata.eu/run.sh
1	/home/okfn/var/srvc/publicdata.eu/sstore
0	/home/okfn/var/srvc/publicdata.eu/who.ini
}}}
{{{

okfn@s025:~/var/srvc/publicdata.eu$ ls -l /home/okfn/var/srvc/publicdata.eu/backup
total 2224588
-rw-r--r-- 1 okfn okfn 343199744 2011-06-14 20:50 db-20110614-2050.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:51 db-20110614-2051.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:52 db-20110614-2052.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:53 db-20110614-2053.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:54 db-20110614-2054.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:55 db-20110614-2055.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:56 db-20110614-2056.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:57 db-20110614-2057.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:58 db-20110614-2058.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 20:59 db-20110614-2059.sql
-rw-r--r-- 1 okfn okfn   1036288 2011-06-14 22:00 db-20110614-2200.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:01 db-20110614-2201.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:02 db-20110614-2202.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:03 db-20110614-2203.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:04 db-20110614-2204.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:05 db-20110614-2205.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:06 db-20110614-2206.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:07 db-20110614-2207.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:08 db-20110614-2208.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:09 db-20110614-2209.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:10 db-20110614-2210.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:11 db-20110614-2211.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:12 db-20110614-2212.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:13 db-20110614-2213.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:14 db-20110614-2214.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:15 db-20110614-2215.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:16 db-20110614-2216.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:17 db-20110614-2217.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:18 db-20110614-2218.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:19 db-20110614-2219.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:20 db-20110614-2220.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:21 db-20110614-2221.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:22 db-20110614-2222.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:23 db-20110614-2223.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:24 db-20110614-2224.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:25 db-20110614-2225.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:26 db-20110614-2226.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:27 db-20110614-2227.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:28 db-20110614-2228.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:29 db-20110614-2229.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:30 db-20110614-2230.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:31 db-20110614-2231.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:32 db-20110614-2232.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:33 db-20110614-2233.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:34 db-20110614-2234.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:35 db-20110614-2235.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:36 db-20110614-2236.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:37 db-20110614-2237.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:38 db-20110614-2238.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:39 db-20110614-2239.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:40 db-20110614-2240.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:41 db-20110614-2241.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:42 db-20110614-2242.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:43 db-20110614-2243.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:44 db-20110614-2244.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:45 db-20110614-2245.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:46 db-20110614-2246.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:47 db-20110614-2247.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:48 db-20110614-2248.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:49 db-20110614-2249.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:50 db-20110614-2250.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:51 db-20110614-2251.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:52 db-20110614-2252.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:53 db-20110614-2253.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:54 db-20110614-2254.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:55 db-20110614-2255.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:56 db-20110614-2256.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:57 db-20110614-2257.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:58 db-20110614-2258.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-14 22:59 db-20110614-2259.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:00 db-20110615-0000.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:01 db-20110615-0001.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:02 db-20110615-0002.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:03 db-20110615-0003.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:04 db-20110615-0004.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:05 db-20110615-0005.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:06 db-20110615-0006.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:07 db-20110615-0007.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:08 db-20110615-0008.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:09 db-20110615-0009.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:10 db-20110615-0010.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:11 db-20110615-0011.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:12 db-20110615-0012.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:13 db-20110615-0013.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:14 db-20110615-0014.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:15 db-20110615-0015.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:16 db-20110615-0016.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:17 db-20110615-0017.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:18 db-20110615-0018.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:19 db-20110615-0019.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:20 db-20110615-0020.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:21 db-20110615-0021.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:22 db-20110615-0022.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:23 db-20110615-0023.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:24 db-20110615-0024.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:25 db-20110615-0025.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:26 db-20110615-0026.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:27 db-20110615-0027.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:28 db-20110615-0028.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:29 db-20110615-0029.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:30 db-20110615-0030.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:31 db-20110615-0031.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:32 db-20110615-0032.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:33 db-20110615-0033.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:34 db-20110615-0034.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:35 db-20110615-0035.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:36 db-20110615-0036.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:37 db-20110615-0037.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:38 db-20110615-0038.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:39 db-20110615-0039.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:40 db-20110615-0040.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:41 db-20110615-0041.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:42 db-20110615-0042.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:43 db-20110615-0043.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:44 db-20110615-0044.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:45 db-20110615-0045.sql
-rw-r--r-- 1 okfn okfn         0 2011-06-15 00:46 db-20110615-0046.sql
-rw-r--r-- 1 okfn okfn 483144447 2011-06-15 10:00 db-20110615-1000.sql
-rw-r--r-- 1 okfn okfn 482136064 2011-06-15 10:07 db-20110615-1007.sql
-rw-r--r-- 1 okfn okfn 483144447 2011-06-15 10:50 db-20110615-1050.sql
-rw-r--r-- 1 okfn okfn 483053568 2011-06-15 10:51 db-20110615-1051.sql
}}}
{{{

okfn@s025:~/var/srvc/publicdata.eu$ du -s -m /home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/*
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/0
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/1
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/2
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/3
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/4
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/5
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/6
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/7
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/8
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/9
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/a
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/b
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/c
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/d
117	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/e
116	/home/okfn/var/srvc/publicdata.eu/data/sessions/container_file/f
}}}"
1447	1324374324000000	dread	Once again eu25 ran out of space again today.
1447	1326279495000000	dread	eu25 ran out of space again this weekend and eu8 (at/it/us_co) today.
1447	1326296987000000	nils.toedtmann	"For time being, i created a cron script [https://bitbucket.org/okfn/sysadmin/src/default/etc/cron/remove_old_files remove_old_files]. 

You could just copy it to /etc/cron.daily/, but i recommend to not run it as root: if it's misconfigured, it could wipe the system! 

So you better copy it to /home/okfn/sbin/ (not /home/okfn/bin/ which often is the sysadmin HG repo), and add it to some unprivileged user's crontab. In most cases, the leftover files are owned by user ""www-data"", so
 {{{
$ sudo crontab -e -u www-data
 }}}
and then add something like
 {{{
37 4 * * *  /home/okfn/sbin/remove_old_files
 }}}

Don't forget to edit the script remove_old_files itself and list the directories you want to be cleaned up.

This is already done on s008/eu8 and s019/eu19. dread, do you want to do this for s025/eu25 and see how this goes?

----
Todo nils: verify tomorrow on s019 that it worked properly, e.g. this should show only a few files:
 {{{
find /var/lib/ckan/nederland/data/sessions/ -type f -amin +$((7*24*60)) -ls
 }}}"
1447	1330082636000000	nils.toedtmann	"I had forgotten to check s019 how well my cleanup script is working (and now s019 is gone), but at least it didn't destroy it :-)

You might want to give it a try on s025/PDEU. (Tell me if you want me to do that)."
1447	1330082808000000	dread	Yes please Nils!
1447	1330089662000000	nils.toedtmann	"OK i fixed a bug in my script and refactored it so that it can now be dropped into /etc/cron.daily/ while still deleting as unprivileged user.

It is now running on s025, removing everything older than 7 days. Please verify in 9 days or so that it's working.

Consider to add [https://bitbucket.org/okfn/sysadmin/src/default/etc/cron/remove_old_files this cron job] to the ckan deb package e.g. as ""/etc/cron.daily/ckan-cleanup"""
1447	1332510790000000	nils.toedtmann	"Just checked s025 (which is depricated now), looks like my script is working fine - nothing older than a week in /home/okfn/var/srvc/publicdata.eu/data/sessions/.

We should activate this script on other hosts as well, e.g. so55/thedatahub."
1447	1332510913000000	nils.toedtmann	Just to add: the remove_old_files script is only a workaround, not a fix. CKAN should clean up after itself. Feel free to re-open this ticket for a proper solution ;-)
1447	1332511544000000	rgrp	@kindly: hope ok to assign to you (maybe just for review and thought on who would be best placed to look at ...)
1447	1332519029000000	nils.toedtmann	Ticket http://trac.okfn.org/ticket/1222 tracks the effort to push the clean-up script onto CKAN hosts.
1447	1340726283000000	nils.toedtmann	This is becoming painful for the sysadmins. Please fix.
1447	1340727330000000	dread	BTW on DGU I have set it up to use memcached for these sessions (v. easy) and I think it solves the problem.
1448	1325774155000000	rgrp	@kindly: Any details ;-) (even when this happened, approach taken)?
1449	1321465348000000	johnglover	"Basic change done in branch feature-1449-resource-listing.

Currently showing:

 * resource name (clickable) or (none)
 * resource description
 * resource format
 * resource last modified (if exists)"
1450	1321875986000000	johnglover	Still working on this, moving to new sprint
1450	1323109665000000	zephod	"johnglover architected this and I've added aesthetic tweaks. Now pushed on branch: feature-1450-dataset-view.

One bug ticket remains (#1517) before the work can be merged."
1450	1330019974000000	dread	In CKAN 1.6.
1451	1321876014000000	johnglover	Haven't looked at this yet, moving to new sprint
1451	1322567112000000	johnglover	This was taken from the UX pad. I'm looking at it now to make sure that it's working and that we can use it on the new dataset view page. Is it really a good idea to move it to core though? There was no reason given on the pad so I'm not sure why this should be moved to core?
1451	1322568784000000	dread	With the cron job setup, maybe this is best left as an extension. The core CKAN was designed to be mean and lean.
1451	1323165781000000	johnglover	"Scripts and templates updated for CKAN 1.5.1

Waiting for Tom to finish dataset view and resource view updates, then will discuss best place to put the download stats on the page."
1451	1324288407000000	johnglover	Need to add analytics javascript to new resource view page, will do under ticket #1519.
1451	1324401792000000	johnglover	"This ticket again brought up the issue of a need for inversion of control for writing to CKAN templates (main templates should really ask extensions for data or provide hooks rather than having extensions overwrite sections using genshi/jquery). Have decided to defer this issue for now, as it will be looked at when looking at making our whole extension system more robust early next year.

Related point:

 * We should provide a dashboard area (again via interfaces/hooks) that groups together report data from related extensions. So stats and googleanalytics info should be available from a similar area / url. This is also deferred until the extension overhaul/refactor.


Other outstanding issues:

 * Location / style of download count can be improved
 * Download count should be shown on resource pages

These should be looked at by whoever takes over frontend design."
1452	1321276189000000	dread	"Seb Bacon: 

> I agree.  It is quite standard for people to have their browser
> language as en-US in many countries.


> Yes, geo-location is likely to be better if you want to automate it.
>
> http://www.maxmind.com/app/geoip_country
>
> But I wouldn't automatically detect it at all.  Just have a default
> language for each site, as you suggest.
"
1452	1340190587000000	ross	I believe this has been addressed by Toby.
1453	1320947955000000	icmurray	"Added the restriction of not allowing the double quote character, '""', as well as commas as this simplifies any use of quoting multiple words to mean a single tag name.

For example, this simplifies the use of quotes in identifying tags in internal markdown links:

{{{
tag:""multiple word tag name""
}}}

A possible solution is to allowing escaping, such as:

{{{
tag:""something about \""Ian\""""
}}}

But I think the compromise is a better solution than allowing the escaping as it's simpler, and this may crop up elsewhere."
1453	1321548452000000	icmurray	"The allowable characters in a tagname has changed to ""unicode alphanmeric plus simple punctuation"".  This means:

 - alphanumeric (inc. foreign characters)
 - [ .-_]

The completed feature is in the [https://github.com/okfn/ckan/tree/feature-1453-flexible-tag-names feature-1453-flexible-tag-names branch].

Awaiting a code review."
1453	1321635178000000	dread	"Code review:

 * basically - really excellent code and very thorough :-)
 * links should have %20 rather than spaces (tests/misc/test_format_text.py:61)
 * also check unicode chars encoding in urls (tests/misc/test_format_text.py:115)
 * also check searching for the tag with this encoding (ckan/tests/functional/api/model/test_tag.py:35)
 * we follow the PEP8 coding style which I interpret to mean not having blank lines after a function definition. But whichever, we're not consistent from file to file, but we should be within each file. e.g. ckan/tests/forms/test_package.py:12.
 * moo package problem - need to ensure test works on its own and when run as part of the suite, so independent of whether moo exists. tests/functional/api/test_action.py:
 * best to make tag search case insensitive - see ckan/tests/functional/api/model
 * It's worth keeping the old test in addition to your modified one - because query for just {q:''} will return both packages too. ckan/tests/functional/api/test_package_search.py:203
 * Let's add an example of tag search with quotes in /doc/api.rst:337
 * Please put imports at the top of the file, unless there's a good reason ckan/tests/functional/api/test_package_search.py:296
 * Can you not the old test any more? It seems sufficiently to the test you changed it to, so can we include both? ckan/tests/functional/api/test_package_search.py:295
"
1453	1321965613000000	icmurray	"Updated code now in feature-1453-flexible-tag-names branch.

(Also, deleted the ian-review branch.)"
1453	1322581830000000	dread	I believe this is finished now. This was merged into master in cset:c0aaa31c4b7ded54d and headed for release 1.5.2.
1453	1329395697000000	dread	This has gone into release 1.6.
1454	1320849527000000	dread	Done in cset:138c5daf7765 heading for release 1.5.1.
1455	1321872633000000	dread	John to look at.
1455	1322491506000000	johnglover	"Fixed - commit: https://github.com/okfn/ckan/commit/05b675a4314ad269c6e6a095d57e3f2a21e771eb

Note:
- Includes a small change to Solr schema file.
- Search index will need to be rebuilt for changes to take effect"
1455	1324474466000000	dread	Fix has gone into CKAN 1.5.1
1456	1320930770000000	dread	"I see you've done this in cset:939e0e0809c1. Close now?

BTW Take a look at the first suggestion from #1423 too, whilst in the area."
1456	1324472178000000	dread	Went into 1.5.1 release
1458	1340632821000000	icmurray	Re-assigned to amercader.  Kept on ckan-future.
1458	1340632932000000	icmurray	Sorry, I shouldn't have touched this.  I pulled it from the wrong milestone.
1460	1328001114000000	rgrp	@dread: re-assigning to you (at least to review). Would be really good to have this closed out asap.
1460	1328638393000000	dread	Have not looked at this yet. Bumping to this sprint.
1461	1321359503000000	dread	Fixed in cset:6ea5d3c50444 so all functions supply api key.
1462	1323172211000000	thejimmyg	Let's work together to fix the packaging aspect too.
1462	1326283656000000	rgrp	@amercader: update? Could you also either close or move sprint (or to backlog as appropriate).
1462	1326284357000000	amercader	"Closing as this has been fixed and deployed.

@thejimmyg Not sure if there are still issues regarding packaging. Feel free to create a specific ticket for this if we need to work on it."
1462	1330083671000000	dread	This went into CKAN 1.5.1.
1463	1321874259000000	johnglover	"This works with the new Celery feature that will be in 1.5.1 (which should be released in this sprint).

So, will not update this old version of QA for 1.5, people should use the new version (on okfn Github) after 1.5.1 is released."
1464	1323169763000000	thejimmyg	As part of the queue upgrade we'll also fix #1064 which explains that the current queue implementation is over-engineered.
1464	1323710659000000	dread	Pls update status and milestone
1464	1328529042000000	rgrp	Closing as wontfix as no further info and seems unimportant.
1465	1323710679000000	dread	Pls update status and milestone.
1466	1323710030000000	dread	Is this still critical, James?
1466	1324298713000000	rgrp	Moving to v1.6 as no specific milestone for this.
1466	1328529062000000	rgrp	Moving to backlog.
1467	1321872507000000	dread	Leaving this to James to schedule
1467	1325462196000000	rgrp	"Moving to current sprint as this sprint is now long finished.

@jimmyg: please close, defer, update as necessary!"
1467	1326104869000000	thejimmyg	"The publisher issue seems to be resolved now, although during investigation I also found these issues:

* 9 of the records don't have a published by and I wondered why
* Lots of them are state=deleted (so do we really want to include these?)
* We're still showing the deprecated agency field
* Many of the departments are blank

Pawel is not available to work on these anyway at the moment, so let's pick them up as part of the disintegration work to migrate to CKAN. Marking the main ticket as ""worksforme"" since it does now."
1467	1326119954000000	dread	"I believe that the ""publisher issue"" that James alludes to is that the dump doesn't contain the 'parent publisher' field that is generated in the DGU system on the Drupal side. This information will be stored following the Groups Refactor #1477 and should be added to the dump at this point.

Excluding Datasets that are state=deleted is a good idea. I've split that off into #1623

The other issues mentioned are simply data quality - the same whether viewing the dump or elsewhere."
1467	1326120319000000	dread	"> 'parent publisher'

Sorry, I meant 'parent department'"
1468	1321875777000000	johnglover	New ticket, moving over to new sprint
1468	1322495417000000	johnglover	"Done - commit: https://github.com/okfn/ckan/commit/7789e85c973c9e085f623486bced6be14f25678f

rebuild can now take an optional package name/id
(single package to be consistent with other paster commands, not a list of packages)"
1468	1322591997000000	dread	"We originally talked about a command-line interface for deleting packages. I've done this here: #1499. 

Note: you can update the search index from a paster shell, simply by doing this before running your commands that edit packages:
{{{
from ckan import plugins
plugins.load('synchronous_search')
}}}
"
1469	1329760150000000	amercader	This is mostly done (current form is http://i.imgur.com/zmfc5.png). Still some tests missing and a little bit of cleanup and documentation required.
1470	1321540943000000	dread	Adria put in fix cset:ad29e3ea75 but the model change missed a migration script and left some spurious tests broken.
1470	1321543837000000	dread	Tidy up done in cset:c46388b945d581 for 1.5.1 release and merged to master.
1470	1324473955000000	dread	This issue only affects 1.5 release.
1471	1340623578000000	seanh	Also test the packaging tools
1471	1340633734000000	seanh	The source install instructions have been updated to work with both lucid and precise, see #2592
1472	1321721874000000	rgrp	Done yesterday. See https://github.com/okfn/ckanclient
1473	1321872717000000	dread	Done in cset:7733eb19971ff06e for 1.5.2
1474	1321826753000000	kindly	fixed cset:8f3d917e24390f91db577fdbd8b8c6a1d6228505
1475	1326283573000000	ross	"Initial draft written at http://wiki.ckan.org/Writing_asynchronous_tasks

"
1477	1324549459000000	dread	I added the sub-tickets since this tickets already covers them really. They may provide useful details in the course of doing all this.
1477	1325186158000000	rgrp	"@davidraznick: as per our discussion last week I think we need a ticket (or item) about writing up either in docs or in wiki how to implement various standard scenarios/workflows such as:

 * 'Curated tag' (standard) Groups
 * Publisher workflow - http://wiki.ckan.org/Workflows#Moderated_Workflow
 * DGU setup

Suggest doing this either at end of http://wiki.ckan.org/Groups_Refactor, or perhaps better,http://wiki.ckan.org/Groups_Refactor."
1477	1328016209000000	kindly	This is done pending new superticket publihser_profile. (#1669)
1478	1323161054000000	kindly	"completed in about 2.8 days.

cset:58b7a09328111b97da7d8ac65b4710b94dac54e3"
1479	1321961592000000	dread	Fixed in cset:380eab620c7397 for CKAN 1.5.1.
1480	1321978546000000	dread	Done in /api/util. Added length limits to mungers. Also added markdown test and documentation. Cset:e43009db393cb for 1.5.2
1481	1322062707000000	johnglover	Fixed in new dataset UX changes (branch feature-1450-dataset-view), still has to be merged with master.
1483	1323279151000000	johnglover	"Fixed. 

Updated logic layer:
https://github.com/okfn/ckan/commit/520959ca6f83586d33cf7d4015d625a776ee46a1

Updated tasks (qa, archiver, webstorer):
https://github.com/okfn/ckanext-qa/commit/78cbf5c6d16225e1580aee23fdf884f88d2475f5
https://github.com/okfn/ckanext-qa/commit/8553348942adad0babd4bdd91820c1d75a1784a7

https://github.com/okfn/ckanext-archiver/commit/8ed419280bd7f2e66aeb4f17f3f546d941fe11fb

https://github.com/okfn/ckanext-webstorer/commit/d16fb090533a716c856e59838f79bbaa0ea42e76

"
1484	1322059006000000	dread	Fixed and added tests. Improved IntegrityError error messages. Changeset:ddca1a7 for release 1.5.1.
1485	1323172388000000	icmurray	Made a small start on this: https://github.com/okfn/ckan/tree/feature-1485-package-form-extension
1485	1323186842000000	ross	Implementing an initial IPackageController in ckanext-example
1486	1322061518000000	seanh	Fixed here: https://github.com/seanh/ckan/tree/defect-1486
1486	1322077524000000	seanh	I've merged the fix for this into my feature-1298-activities-table branch, will merge it all into master at once: https://github.com/seanh/ckan/commits/feature-1298-activities-table
1486	1323172027000000	seanh	"I've now merged my feature-1298-activities-table branch into my super branch for activity streams, so my fix for this defect is now merged into the activity streams super branch and will be merged when that branch is merged. See the activity streams super ticket: #1515

Resolving this ticket now"
1487	1322095808000000	kindly	fixed cset:4160859c8c9786588dbf0893981b93d9621019a9
1487	1324474147000000	dread	Fixed in CKAN 1.5.1.
1488	1322241966000000	dread	"'extensions' added.
Also mounted RESTful version of status_show at: /api/util/status

Done in cset:415d9ae aiming for 1.5.2 release. "
1489	1322138014000000	dread	"I updated the theme stuff in a75ca84.

I've asked Ian to see if he can replace the form stuff with a new form (v. quick simple!)."
1490	1322489155000000	amercader	Fixed in c23821b
1490	1324033557000000	dread	"Fixed in 1.5.1
 * group_package_show introduced in 1.5.1
 * tag_show added extended packages in 1.5 (e6bad88a)
 * package_search added extended packages in 1.5 (e6bad88a)"
1491	1322563620000000	seanh	"I've finished some work on this ticket here, ready to be reviewed:

https://github.com/seanh/ckan/compare/defect-1491-visible-strings-need-internationalisation
"
1491	1323703317000000	seanh	Merged into master
1491	1330020630000000	dread	went into CKAN 1.6
1493	1323166859000000	dread	Fixed in db814bed5 and cdbfa799f on master
1493	1324474360000000	dread	Went into CKAN 1.5.1.
1494	1326103951000000	seanh	"I've added a controller function for getting a user's activity stream as rendered html to ckan/logic/action/get.py in this commit: https://github.com/okfn/ckan/commit/30264997c7fe34324381123d6741d404baa67c1e

I'm proposing to leave it at that for now and not actually hook this controller function up to an API call, as I'm not sure how useful an API call for getting rendered HTML will be (we already have an API call for getting the user's activity stream a JSON)."
1495	1325606124000000	seanh	"Implemented in branch feature-1515-activity-streams and ready for review. See #1511 first as this builds directly on that. Relevant changes are in commit 3d328aa0:

https://github.com/okfn/ckan/commit/3d328aa07f038287d4ecb3a9ba6facc9fabbddd2"
1496	1326104045000000	seanh	"I've implemented this in the activity streams branch:

https://github.com/okfn/ckan/tree/feature-1515-activity-streams"
1496	1326736298000000	seanh	"This is finished, but I think that before closing this ticket a little more thought needs to go into what the activity streams and the user page should look like, where on the page they should go, what else should go on the page, etc.

Also maybe add a simple test that the activity stream is being rendered into the page."
1497	1322569805000000	dread	"Got rid of this one that appears on many CLI commands:
{{{
/home/dread/gitroot/pyenv-ckan/lib/python2.6/site-packages/pylons/templating.py:610: UserWarning: Unbuilt egg for setuptools [unknown version] (/usr/lib/python2.6/dist-packages)
  Engine = entry_point.load()
}}}
cset:e1e2918

Look out for others and reopen when found."
1498	1323165876000000	amercader	"This is now done. See [1] for the deployment documentation and conventions.
CKAN checks the remote schema version on startup to see if it's compatible. See commits starting from 50285ef6.

The migration work needed after releasing 1.5.1 is described in #1516.



[1] https://github.com/okfn/ckan/blob/feature-1498-multiple-schemas/doc/solr-setup.rst"
1499	1322591888000000	dread	Done in cset:9d97592 on master aimed for release 1.5.2.
1500	1323166918000000	dread	Fixed in cset:783e9ed05 on master aimed for 1.5.2
1501	1322684411000000	johnglover	Fixed, commit: https://github.com/okfn/ckan/commit/255352a1c2f403aa5d25b461ca60dbc272d90ea4
1502	1322687823000000	johnglover	Fixed: https://github.com/okfn/ckan/commit/1534d9f16d300f7d5a7aa6bf1a61f120ca7eff3d
1502	1324480415000000	dread	Went into CKAN 1.5.1.
1503	1323090114000000	rgrp	Done. See email: http://lists.okfn.org/pipermail/ckan-dev/2011-November/001530.html (no follow-up but it happened!)
1503	1323281764000000	dread	This is still ongoing - see the spreadsheet!
1503	1323695557000000	dread	The repos moved to github have now been deleted on bitbucket.
1503	1323793662000000	dread	All done now.
1504	1322757715000000	dread	Fixed in cset:725670972371 on master, aimed for release 1.5.2.
1504	1324035928000000	dread	Cherry picked for 1.5.1.
1505	1322760570000000	dread	Also added tests for search_package api. Done in cset:edde51c aiming for release 1.5.2.
1505	1324474577000000	dread	Fix cherry-picked for 1.5.1.
1506	1328000218000000	rgrp	As super ticket should stay in major milestone.
1506	1328001415000000	rgrp	Add in link to user and group UX work.
1506	1328225770000000	rgrp	"Move dataset edit to #1744.

Dataset search moved out altogether to #1745."
1507	1329752194000000	rgrp	Moving as no opportunity to do last sprint.
1508	1323168583000000	shevski	Will deploy ext-spatial, need to build geo-search for DGU for searching for UKLP datasets - will discuss at next meeting
1508	1323184952000000	ross	Custom form is referenced in #1485
1508	1328000871000000	rgrp	Closing as fixed -- while there are some remaining things to do mentioned here such as wordpresser it is agreed these aren't for the immediate present (and we can open new tickets for theme as and when we need them).
1510	1325866117000000	rgrp	@seanh: Duplicate of #1299? Also estimate in super ticket which is #1515 (not linked from this ticket!) is 3.5d. Is it possible to at least make a guesstimate. E.g. probably know this won't take 30d and probably know it is more than 0.5d :-). Also if you are not sure can you not ask kindly?
1511	1323100081000000	seanh	"This ticket is just for getting the activity stream at the model level, not yet for rendering it in any particular output format.

Estimate: one day

Related user stories:

#039 User
I want to see the activity stream for another user when I go to their user (profile/home) page.

#042 User
Subscribe to RSS feeds for activity in relation to packages, users, groups, tags (?)

#032 User
See  what status people have by seeing small bits of info next to their  name, e.g. a sign to indicate being a superuser/sysadmin and/or the  number of datasets they have. I know the approximate activity and authority of users I come across

Also see: http://ckan.okfnpad.org/notifications"
1511	1323264315000000	seanh	Should be as a list of dicts, not Activity objects.
1511	1325605964000000	seanh	"Implemented in branch feature-1515-activity-streams and ready for review. Relevant changes:

ckan/lib/dictization/model_dictize.py: Added functions activity_dictize(), activity_list_dictize(), activity_detail_dictize(), activity_detail_list_dictize().

ckan/logic/action/get.py: Added functions user_activity_list() and activity_detail_list().

ckan.tests.models.test_activity.py: Now uses user_activity_list() and activity_detail_list() functions instead of accessing the model directly to get activity streams."
1513	1326728958000000	dread	"This problem is now more obvious because we display use name. If there is an user icon, but no user name then you are in this 'inbetween' state.

The problem is that the cookie exists in your browser, but it is not valid, for whatever reason.

The solution is to change the css/javascript that displays the Register/My Account bit in the corner to talk to Auth, rather than just check for the cookie."
1513	1328205092000000	dread	Fixed in [master ff90b3f]. Headed for 1.6 release.
1514	1323101621000000	rgrp	Thanks for registering this. This was known in the change that allow editing of usernames. Suggestion there was a bigger fix which was to do, asap, a switch to change all revisions to use user id rather than username. If we do this now that will save us a lot of pain ...
1514	1323279018000000	rgrp	This is now a duplicate of #1534
1515	1323106050000000	seanh	Branch for this feature: https://github.com/seanh/ckan/compare/master...feature-1515-activity-streams
1515	1330086273000000	dread	"The main body of this went into CKAN 1.6, including: #1298, #1299, #1495, #1511, #1623, #1631, #1637, #1663, #1666, #1686, #1639, #1694
"
1515	1338204149000000	seanh	"Closing this super ticket. See remaining tickets with keyword ""activity_streams"":

http://trac.ckan.org/query?status=accepted&status=assigned&status=new&status=reopened&order=priority&col=id&col=summary&col=status&col=type&col=priority&col=milestone&col=component&keywords=~activity_streams"
1516	1323360020000000	amercader	"Closing as the main Solr servers are ready to support different Solr schemas. I.e they have two different cores:

* http://<server>/solr/ckan-schema-1.2
* http://<server>/solr/ckan-schema-1.3

to which CKAN instances can point to.

The CKAN instances that have not been updated (the ones under s004) are pointing to a Solr core with an old version of the schema, so they can wait until upgraded to 1.5.1 to update the solr_url property and rebuild the index.

Data.gov.uk can be dealt with during the next deployment.

It's not clear which Solr server are using the rest of the instances, but they can be updated as necessary when they upgrade their CKAN instance.
"
1516	1323362689000000	nils.toedtmann	"Please note that 
 * register.data.overheid.nl (s047) and datagm.org.uk (s048) should use solr on s046 - see http://trac.okfn.org/ticket/906
 * thedatahub.org should use solr on s052 - see http://trac.okfn.org/ticket/931"
1517	1323175957000000	zephod	"After some research, I've decided to disable the iframe datapreview of unknown filetypes. We need a safer mechanism for verifying that it's a text file or web page; a blacklist of filetypes which won't be iframed (GZIP, ZIP, etc) will never be adequate, and accidently starting a binary file download is a dangerous thing.

The fix is simple - commit: 17f33031f5e348e623146601f830b8c67462fe00

But more work will be required to relax this restriction."
1518	1323760656000000	rgrp	Debug via js console revealed the problem: Google storage replaces spaces with +.
1518	1323761438000000	rgrp	"Further investigation shows that:

 * Spaces and any other characters work fine with local file storagfe
 * Google escapes other non-url allowed characters (so should work fine)"
1518	1323762304000000	rgrp	Fixed in https://github.com/okfn/ckan/commit/3b209af3656851e560aeb4d6f5563f05897c8f01
1518	1330020742000000	dread	Fix went into CKAN 1.6
1519	1324297045000000	johnglover	Didn't have time to look at this in previous sprint, moving to current sprint.
1519	1324317373000000	rgrp	"wontfix for present.

 * stats should go into core see #1576
 * but analytics is more complex and requires more thought. Not really sure what integration buys us right now (though understand from a deployment / client perspective these together in some way so may be worth revisiting in future)"
1520	1323279697000000	rgrp	wontfix in favour of #1534 (a proper fix)
1520	1323280999000000	dread	Rufus has persuaded me that this is not important since it is so rare, and focus on #1534 (which was #1514) instead.
1521	1323174618000000	thejimmyg	"It would be nice if the new UX also made it clearer that a user has to login, before they click the ""Add a group"" link which currently takes them to the login page with the message ""Unauthorized to create a group""."
1521	1327080136000000	zephod	"This function can be deprecated, as groups will use Solr searching to list their packages.

https://github.com/okfn/ckan/blob/master/ckan/logic/action/get.py#L398"
1521	1327405394000000	zephod	"Resolved in this merge: 

https://github.com/okfn/ckan/commit/2337424dd4ebe3b81b6da454f2305031922d3d5c"
1521	1330084599000000	dread	This went into CKAN 1.6
1522	1324333827000000	kindly	fixed cset:060efe4a0e7e4ede3337623092848740c58107f9
1523	1323172904000000	icmurray	Erroneously created when a file upload failed.
1528	1323198001000000	zephod	"Done here.

https://github.com/okfn/ckan/commit/b2748e395760083be2071b007641e787a071f955"
1528	1330020444000000	dread	Went into CKAN 1.6
1529	1324318628000000	dread	Was done in cset:237ad148ba9 on master 7/12/11, aimed for 1.5.2
1530	1323283240000000	lucychambers	Screenshot attached - browser = Chrome
1530	1323283663000000	dread	Cheers Lucy. Ok the gap between the name field and its help text is way too big. Zeph, any chance you can take a look?
1530	1326283604000000	rgrp	Never accepted for this sprint. Should have been v1.6 or backlog.
1531	1326155226000000	kindly	final commit 8457a34dff227e50aed8833673600b22683a23a1
1532	1323956004000000	dread	"I couldn't see a way to communicate the situation ""OpenID authenticated, but doesn't match any CKAN user"" from the repoze middleware to CKAN. So in [release-v1.5.1c 9e86c8b] I have provided extra instructions in the OpenID log-in screen, and in the log-in error message suggest what could have gone wrong.

This issue appeared in 1.5.1b and fixed in 1.5.1c in time for the 1.5.1 release."
1533	1323359638000000	ross	"Investigating:

1. The XPATH that the middleware is currently using will definitely not match the navigation on 1.5.1, we'll need to change the xpath and also extract the anchors from the LI tags that are retrieved from the wordpress site. 

2. Getting the main wordpress content just doesn't seem to work at all. Lots of class/id confusion.

Will fix for 1.5.1 in branch
"
1533	1324397900000000	rgrp	Moving to v1.6 backlog. Sort of working but ross suggests we should be using atom feeds.
1533	1325190689000000	rgrp	Reassigning to me as per chat with Ross.
1533	1325474699000000	rgrp	Not really urgent in my view atm. Propose to defer at least out of this sprint. Needs further discussion of purpose and implementation.
1533	1327319887000000	rgrp	Moving out of v1.6 (see previous comment).
1533	1338202636000000	ross	This has been superceded by #2234
1536	1323349465000000	dread	Fixed on master - cset:39b745f. Aimed for 1.5.2 branch (should be on thedatahub.org in a few days).
1536	1330020599000000	dread	Went into CKAN 1.6
1540	1326060385000000	amercader	Fixed in b80da7a4fe
1543	1324296991000000	johnglover	New ticket, moving to current sprint
1543	1324316682000000	johnglover	"Fixed: https://github.com/okfn/ckan/commit/f3b2bb9827b082ee09c74ede85ded21838fc9e80

Needed to refactor fix for 1501 slightly so that the search controller can still use its own url generator. 

Added new test for search pagination."
1543	1324483367000000	dread	This is not broken in 1.5 or earlier. Fix is in 1.5.1 release, so not a problem on any release.
1545	1325260051000000	rgrp	"closing as wontfix.

These are all images and all from assets.okfn.org  items and of such as standard/generic nature they are not worth bringing in-house. If this causes problems for local dev then just add an /etc/hosts for assets.okfn.org that is local or /dev/null like."
1546	1323775424000000	johnglover	Fixed: https://github.com/okfn/ckan/commit/fbaf4459b7da95c1db0ade165ea09720539c2f80
1546	1323962689000000	dread	"It looks like Rufus forgot the second bit of the AND clause:
{{{
      and_(model.revision_table.c.id==model.package_revision_table.c.revision_id,
+          model.package_revision_table.c.continuity_id==self.id)
          )
}}}
Unfortunately John's fix breaks the #191 fix. I'm reopening that to fix it there."
1546	1323970014000000	dread	The fix for the break related to 191 is checked in here: [release-v1.5.1c 2c595ae] and cherry picked to [origin/defect-191-modification-date f98a4b2]
1546	1324034396000000	dread	Broken since introduction in CKAN 1.3. Fixed in CKAN 1.5.1.
1547	1330084379000000	dread	Went into CKAN 1.6
1548	1323888271000000	dread	Done in cset:35bfe8e in master.
1549	1324037471000000	dread	"I see a need for short links to any package or resource, so people can Twitter about them.

As far as providing forwarding to a resource URL, even if that changes, then I'm not sure there is a need for it to be short - we could just use a long link with the resource-id. e.g. thedatahub.org/resource/c1e89abb-13cd-4e18-9078-03d15bf6f256/url-forward."
1549	1324385952000000	ross	"Comment from John Erickson (on ckan-discuss): 

FYI, such ability to maintain an identifier was an original motivation/requirement of the DOI (which is why the Handle System was
the obvious choice for implementation).

Note that providing the ability to maintain the short URL implies some kind of authority --- either based on the originating user or a ckan administrator.

The idea of analytics as a motivator is very good; this is a great feature of bit.ly

Another feature to consider might be short URL lookup based on target URL at short URL creation time, to avoid multiple short URL for the same target."
1549	1325474219000000	rgrp	Closing as wontfix. Originally needed in context of storage but agreed this is no longer needed there. For general usage don't see the point as twitter etc already have shortlink systems and we have no urgent need for one. Happy for someone to reopen if they feel strongly the other way.
1551	1346662048000000	ross	Webstore appears to hav been deprecated in favour of datastore.
1552	1324056240000000	dread	Done: [release-v1.5.1c 9850afc]
1553	1324056939000000	dread	This is now ameliorated in thedatahub.org by requiring login to do any edits. But the bug may be an issue for other sites that want more open settings.
1553	1326288657000000	ross	"I think this is caused by the javascript xhr call getting redirected (quietly) to the login page, so the original javascript can't complete as it has a login form rather than the auth form it is looking for.

Maybe we should change the JS to realise that it is at the login page and do something different than pretend to still be uploading?  "
1553	1329755702000000	rgrp	@ross: this is indeed the issue (and I explained this to dread but failed to note here). I suggested this was a limited problem as most sites would not allow anonymous editing (which is where this occurs). However, it is a UX bug for that situation.
1553	1340628027000000	ross	Aron, can I assign this to you for when you do the JS based uploading on demo site/new UI?
1553	1340628453000000	aron.carroll	Ross, I think you just did :) I'll make sure the new form takes this into account.
1553	1343226756000000	aron.carroll	Fixed in d41af4c
1559	1326973608000000	dread	"Jilly, is this the work to get the Disqus (comments) extension to work with CKAN 1.5.1 (broken due to new templates)?

Finland are currently wanting this. Shall I have a crack?"
1559	1332242129000000	rgrp	Fixed. See https://github.com/okfn/ckan/commit/9965818e20f7532b37eb97a3b76c078263eb0dd1 and https://github.com/okfn/ckanext-disqus/commit/ae6bf09a153831e75f9182a4b30921973ff7d080
1563	1324314806000000	rgrp	This is done and invalid to add this again.
1568	1325267998000000	rgrp	Closing as duplicate of #1129 and #1141
1570	1324314741000000	rgrp	Deleting this ticket as integrated file storage has been available and finished for months.
1571	1325265148000000	rgrp	Rewrote description extending it significantly and linking to etherpad and code.
1571	1325555270000000	rgrp	Done (4d) ago: rename todo(s) -> issue(s) in extension
1574	1325582298000000	ross	"Related: 
    #1608 Merge storage into Core
    #1609 Celery task for ckanext-archiver to write to webstore.
"
1574	1325590211000000	ross	Added #1611 as relevant to webstore integration
1574	1325774336000000	rgrp	@ross: Is it possible to update the detailed description of this ticket so it reflects current reality (whatever that is ;-) ) (BTW: you can edit the main descript of the ticket by scrolling to the bottom of this ticket edit page)
1574	1325847164000000	ross	Updated description.
1574	1325847230000000	ross	"__Some issues to be addressed__
	* What about existing content stored on google/s3?
	* Metadata for OFS should use username/userid?
	  If user changes username we could just change the pairtree metadata json file, it should not be automated or easy for 
	  users to change username though.
	* OFS Metadata should contain the form data from CKAN upload
	* Remove _owner from OFS metadata (unnecessary)
	
__Some issues to still consider__
	* Allow .sqlite upload?
	* Allow .sql upload?
"
1574	1326904965000000	ross	Added related ticket #1681 for documentation/announce to be done asap.
1575	1325866330000000	rgrp	Can we also lose the Canada government group. Let's just have have the Canada group plus a tag for gov  (e.g. just gov or gov-canada or canada-gov or ...)
1575	1326808631000000	dread	"Tags corrected and Canada gov group changed to canada-gov. Script checked in as bin/canada.py [master 731111d].

Spent 2.5 hrs."
1576	1325183389000000	rgrp	Updated wiki page (stats was not on there yet!): http://wiki.ckan.org/Extensions#Stats_-_Statistics_for_CKAN and added deprecation notice on https://github.com/okfn/ckanext-stats
1576	1325190496000000	rgrp	Fixed. Merge cset: https://github.com/okfn/ckan/commit/cb29d62133bb4d060622f2fa752dd281b71a252b
1576	1327056070000000	rgrp	"Some questions arising from this. Now on http://ckan.okfnpad.org/extensions

 * How do I add Stats to a menu ...
   * ANS (?): Main menu: should make this configurable sooner rather than later (what about footers ...)
 * How do I have plugins support other plugins ...
  * E.g. stats incorporate QA info

== Extensions in Core ==

* Do we centralize templates and public directory or not ...
  * (+) quicker, simpler
  * (-) have to change things, does it mess up non-core extensions

* Tests: need to be run! (Put them into core area ...)

== Qu: Going forward how do we handle extensions and plugins ==

Specifically:

* Inclusion of html into *core* html - e.g. showing download counts ...
  * Concrete examples:
    * Including widgets into the dashboard
    * Including widgets in stats section
  * (not simply inclusion of html into routing system separate from core --
    which is relatively trivial)
  * More entry points?

== Other stuff I think we should look at ==

* config in dashboard"
1577	1325473564000000	rgrp	Foreign characters aren't allowed in file names I would image as they will be part of url. worth noting this at some point but don't think this is very high priority and hence deferring out of v1.6.
1578	1325473015000000	rgrp	Removing from v1.6 as not high enough priority atm to justify.
1579	1338212496000000	ross	I think the new datastore solves this.
1582	1324489033000000	johnglover	"celery and ckanext-qa both deployed to thedatahub.

ckanext-archiver also installed as the link checker is used by ckanext-qa, but the plugin is not activated.

QA scan of all datasets (CRON job) currently scheduled once a week (Sunday, 4:30am)"
1582	1326110801000000	johnglover	blog post added: http://ckan.org/2012/01/09/qa-on-thedatahub/
1583	1324484387000000	rgrp	"I'm not sure star rating is the key thing I want to know and I also think it will be visually very confusing (I associate stars with ratings now with some automatic quality assessment + (IMO) 5 star isn't that useful). I'm much more interested in things like:

 * Is this down (all the time)
 * Has this been down recently
 * When was this last modified (not quality per se ...)

This is an area where referring back to the original user stories (if any) around QA is really useful.

I guess my feeling would be some of this should be about providing e.g. helper methods so that theme designers can incorporate things into their design with some work putting this into default CKAN theme.


"
1583	1327422386000000	zephod	"Working on this on branch feature-1583-qa. https://github.com/okfn/ckan/tree/feature-1583-qa

Design work is done, it needs integrating with the live API. That's all in the QA extension.

Suggest all my work should be moved into the ckanext-qa extension and plugged into the API available there. Shouldnt have developed this in core after all."
1583	1327424812000000	markw	Added request to fix table of broken resource links, which is itself broken
1583	1327582611000000	zephod	"Complete.

CKAN:
 * https://github.com/okfn/ckan/commit/048f58748b052ecd9efaa0b6940d3c1659990494

CKANEXT-QA:
 * https://github.com/okfn/ckanext-qa/commit/dc040f9fdfe01cf420919b0779d61043b5ec76cb
 * https://github.com/okfn/ckanext-qa/commit/590150dcd947d4a12ff2ec7c396f5dee4cbbaee9
 * https://github.com/okfn/ckanext-qa/commit/590150dcd947d4a12ff2ec7c396f5dee4cbbaee9"
1583	1327582702000000	zephod	"And this:
CKAN:
 * https://github.com/okfn/ckan/commit/8f3c70c3f3008acf9e3bfcc813f40df07c6ee4c5"
1584	1325475164000000	rgrp	Moving out of v1.6 until determined it is in (super ticket is in).
1586	1324480384000000	dread	Went into CKAN 1.5.1
1586	1324480406000000	dread	"Replying to [comment:1 dread]:
> Went into CKAN 1.5.1
Sorry, that was an error - ignore."
1586	1337079419000000	icmurray	Duplicate of #2298
1587	1339433286000000	johnglover	Fixed on ckanext-qa branch release-v1.7.1
1588	1325475117000000	rgrp	Moving out of v1.6 (super is in atm).
1589	1325475095000000	rgrp	Moving out of v1.6 (super ticket is in).
1590	1326711608000000	amercader	"Added in 658f76e4a0 and deployed to the production site.
"
1591	1325704907000000	dread	Today I upgraded s057: br  cz  ie  norway
1591	1325764196000000	dread	I've now completed the upgrade for datacatalogs.org. All that remains now is DGU. Reassigning to Ian as I'm away shortly.
1591	1325866229000000	rgrp	Report of time spent / time estimate would be brilliant :-)
1591	1326117568000000	dread	Spent about one day on this from myself.
1591	1327317321000000	rgrp	Done. (DGU waiting on integration)
1591	1327320209000000	dread	All covered off. DGU is 1.5 but security issue fixed previously.
1591	1328735849000000	nils.toedtmann	Some critical CKANs (e.g. PDEU, DataNL, DataGM) seem to be still on pre-1.5 versions. Shouldn't they be upgraded too? Or is that tracked elsewhere?
1591	1328789470000000	dread	"This ticket was created in response to the security issue in CKAN 1.5 only - it does not affect other versions.

There is a different argument to upgrade older CKANs installed elsewhere, but there tend to be problems with extensions and themes not being compatible, so I think should be considered on a case-by-case basis and how much budget is available."
1592	1326304321000000	amercader	Fixed on 1e649a62fcf
1593	1333385052000000	icmurray	"Implemented in branch [https://github.com/okfn/ckan/commits/feature-1593-create-feeds-from-search-results feature-1593-create-feeds-from-search-results]

Not quite close as I've only included links to the atom feed in the <head>.  Will do that this week."
1594	1325473486000000	rgrp	#1583 seems important and quick. #1584 I'm more dubious about esp as I think time estimate may be a bit optimistic :-) (e.g. #1584 includes search of reports ...). At this point in time I'd vote for #1583 plus deployment as good enough for v1.6.
1594	1328000053000000	rgrp	With #1583 done this is lower priority so deferring into next major milestone.
1594	1338203215000000	johnglover	We're not using super tickets any more so closing this, most of the smaller tickets are still open however.
1595	1325604696000000	kindly	"This will be fixed when the activity stream will be in place of the revision list.

There is no bug with the revisioning, it just is getting everything related to the group."
1597	1324550545000000	dread	This feature is requested by Colin Calnan
1597	1325202152000000	rgrp	"Is there not a limit option to the package_search action (if not maybe there should be (with say a maximum of 200 ...)). Also I'm not sure how essential this is to #1521. In general we just want to search (and facet on) datasets and resources not on tags.

So IMO: this is a low value item."
1597	1326821156000000	dread	I found that adding facet:limit=200 does what we need.
1598	1325474818000000	rgrp	Moving out of v1.6 as many more important things to do.
1599	1325555192000000	rgrp	Done. See http://okfnlabs.org/ckanjs/widgets/count/ and live deploy at http://openeconomics.net/ (RHS sidebar).
1600	1327335778000000	rgrp	Booted: https://github.com/okfn/help.thedatahub.org
1600	1327401279000000	rgrp	"Update (for reasons to do with CNAMES) repo is now:

https://github.com/okfn/datahub-help

Pages are now deployed at (no theming yet!):

http://help.thedatahub.org/"
1600	1328183223000000	dread	Nice tutorial - that is one nice use case for the Data Hub we want to push. And good to be able to have context help in CKAN, with configurable URLs. I'm just wondering why boot another Sphinx, on top of our existing wiki.ckan.org, ckan.org & ReadTheDocs solution? Why has it changed from a couple of months ago when we redesigned the docs with Anna and we all decided that User Docs should live in the wiki.
1600	1333362031000000	rgrp	Closing as wontfix atm since think this will either go to main manual or won't be done here. (Also did quite a lot of work).
1602	1328175521000000	rgrp	Image (pre)viewing done in https://github.com/okfn/ckan/commit/2b08425c3aef424d4192838e418b7ad9ccc6a129.
1602	1328175553000000	rgrp	(Time elapsed: 1h.)
1602	1328175719000000	rgrp	Closing ticket as everything done except geo (pre)viewing and that is a substantial chunk of work that needs planning and is already separately ticketed (and was already marked as (?)).
1603	1338202654000000	kindly	Duplicate as new theme will implement this.
1605	1327317069000000	dread	Need to merge with #1682
1605	1330038773000000	dread	#1682 now merged in
1608	1325586861000000	ross	"We should consider some admin dashboard hooks for data such as total file storage usage+count
"
1608	1325681756000000	ross	The current storage API might need cleaning up and merging into the normal API.  Although this may require changes to the current API Controller. Not sure, so adding a note as a reminder.
1608	1328101443000000	rgrp	Want to re-enable direct upload to cloud storage.
1608	1328175329000000	rgrp	"Fixed in https://github.com/okfn/ckan/commit/4488795a54866a02305268d77a2648fa85538ee8

And working on <http://thedatahub.org/>, test etc.

One important note: test using remote storage has been disabled -- see https://github.com/okfn/ckan/commit/3c9ddd31d741eb8ec8c145063ce967e781947a88

Time spent: 0.25d."
1608	1330036982000000	dread	This has gone into CKAN 1.6
1609	1325586917000000	ross	"from the pad:

 What happens when I upload a CSV?
    * End up with file in permanent storage
    * IF file is of type ... csv,xls,xlsx,sqlite,.sql
        * End up with new db in webstore
            * Where? {username}/{resource-id}/...
                * If a single table: name it after the file name (appropriately slugified)
            * A resource *always* corresponds to a 'database' in webstore ...
            * In Data Explorer have ""Sheets"" tab ...
    * Resource url = /dataset/{x}/resource/{y}/link -> cached_url ...
    * Move uploaded file into permanent storage"
1609	1325774098000000	rgrp	Move analysis into main body of ticket.
1609	1326905350000000	rgrp	"Any comment on how this related to #1398 - Automated conversion of resource data into webstore.

They seem to be exact duplicate -- but obviously #1398 was done and this wasn't."
1610	1325773944000000	rgrp	IMO this is very low priority at the moment (also I guess this ticket which is webstore only should go in http://github.com/okfn/webstore/issues -- though that is something of a moot question)
1610	1325852472000000	ross	Duplicate of https://github.com/okfn/webstore/issues/41
1611	1325846987000000	ross	See #1550
1612	1325688886000000	kindly	finished a4d1f616caf3c3f2dcd963369c3e14299433097d
1613	1325866393000000	rgrp	Why is this a problem. It is a very minor annoyance. I'd strongly vote for deferring and, if necessary at all, integrating with #1506 (UX improvements).
1613	1326813924000000	dread	"OK, this is the browser doing this - not us at all. It is not standard practise. I think it is not a problem.

Reference:

http://stackoverflow.com/questions/2286402/url-fragment-and-302-redirects

 Safari 5 and IE9 and below drop the original URI's fragment if a HTTP/3xx redirect occurs. If the Location header on the response specifies a fragment, it is used.

 Chrome 11, Firefox 4, and Opera will all ""reattach"" the original URI's fragment after following a 3xx redirection."
1614	1325689136000000	kindly	a1ca82bbc5cf89a0e308dee278f6d8ea23af8b7e
1615	1325774573000000	rgrp	We have done several successful deploys behind a proxy server on apache. Any details of what didn't work? Worth adding details here: http://wiki.ckan.org/Deployment ?
1615	1326393651000000	dread	"The mounting issue is discussed and more-or-less solved here: #1401

What's this redirect problem? The redirect is to a relative URL using h.url_for, just the same as the majority of links. I can't see why this is a problem, and it certainly works for Florian and Herrmann (see #1401). Please provide more details.

{{{
            url = h.url_for(controller='package', action='read', id=pkgname)
        redirect(url)        
}}}
"
1615	1328888870000000	dread	Closing - looks ok to me
1616	1326452451000000	dread	Maybe we just need a '-f' option to force it to continue if an exception occurs? It's a manual process and it's good to know loud and clear if there is a an exception setting up a new server say, but have the option to force it if the system is down temporarily is a critical service.
1616	1326710037000000	amercader	"Sounds like a good option.
I will move it to ckan-v1.6 anyway because it may need some work than the expected."
1616	1332327635000000	amercader	"Fixed in 10cfd168413

Also new flags and fixes for other commands were added:

 * Add -o option to only reindex datasets not already indexed
 * Add -i option to ignore exceptions when rebuilding
 * Add -r option to just refresh the index (not clearing it first)
 * Fix show command to show the index stored for a dataset
 * Add support for clearing the index of just one dataset"
1621	1335878161000000	seanh	Closing because I haven't seen this test fail for ages
1622	1326127683000000	johnglover	"Done. http://dgu-os.okfn.org/qa/dataset/five_stars

Full QA scan scheduled to run every Sunday night at 04:00 UK time using crontab of user ckandguos."
1623	1326892264000000	dread	"Done in [master c2c3427]. Added first CLI test too! Targets release 1.5.2.

Took 0.5h"
1624	1326207441000000	dread	" ckan/templates/package/edit.html:        <li><a href=""#section-further-information"">Futher Information</a></li>"
1624	1326216362000000	dread	Fixed in [master 863e6ff] aimed at release 1.5.2.
1626	1326215877000000	dread	"Mark wrote some About text: http://lists.okfn.org/pipermail/ckan-discuss/2012-January/001963.html

David tidied it up and inserted it into code, adding a config option to change the first section [master 517aec4] aimed for release 1.5.2."
1627	1326890571000000	dread	Fixed in [master 8314e97]. Headed for 1.5.2.
1627	1326890614000000	dread	Took 0.5h
1629	1326215334000000	johnglover	anon_editor and editor were given the create-package role, I had previously removed it via paster roles deny [anon_]editor create-package.
1629	1326823222000000	dread	"This permission is set every time you do a db_upgrade. ckan.model.__init__.py calls init_configuration_data() which calls init_authz_configuration_data() which restores specific roles to the defaults.

I agree that it doesn't seem right in this circumstance, but the way I setup roles is for 'editor', 'anon_editor' and 'reader' to have a fixed set of actions. See comment in ckan/model/authz.py:

{{{
# These define what is meant by 'editor' and 'reader' for all ckan
# instances - locked down or otherwise. They get refreshed on every db_upgrade.
# So if you want to lock down an ckan instance, change Visitor and LoggedIn
# to have a new role which for which you can allow your customised actions.
}}}

Basically it seemed wrong when people changed 'editor' to something that couldn't edit. They should call that role something else. 

But people *are* able to edit these roles (even though they are reset on upgrade) and they should be prevented. I've put this in a new ticket: http://trac.ckan.org/ticket/1679"
1630	1327313971000000	rgrp	Work done so far 0.25d. Estimate completion by end of day.
1630	1327620031000000	rgrp	Did not make it by end of day but now done!
1630	1327620506000000	rgrp	Done, see: https://github.com/okfn/ckan/commit/211c8006fe28106f532db5f09ca47e02f065f454
1630	1330085600000000	dread	Went into CKAN 1.6
1632	1326736455000000	seanh	"This is finished, see the activity streams branch:

https://github.com/okfn/ckan/tree/feature-1515-activity-streams

but I think that before closing this ticket a little more thought needs to go into what the activity streams and the group page should look like, where on the page they should go, what else should go on the page, etc.

Also maybe add a simple test that the activity stream is being rendered into the page.
"
1632	1335877871000000	seanh	Closing this as there doesn't seem to be interest in showing activity streams on group pages anytime soon
1633	1326736502000000	seanh	"This is finished, see the activity streams branch:

 https://github.com/okfn/ckan/tree/feature-1515-activity-streams

but I think that before closing this ticket a little more thought needs to go into what the activity streams and the dataset page should look like, where on the page they should go, what else should go on the page, etc.

Also maybe add a simple test that the activity stream is being rendered into the page.
"
1633	1335877927000000	seanh	Closing this as there doesn't seem to be much interest in showing activity streams on group pages anytime soon.
1635	1355141157000000	seanh	https://github.com/okfn/ckan/pull/199
1636	1338204258000000	seanh	Resolving as won't fix as this doesn't seem important.
1637	1326737169000000	seanh	Done on feature-1515-activity-streams branch.
1639	1328212781000000	seanh	The templates have been rewritten to use CSS classes instead of embedded styles, but those CSS classes don't exist yet, they need to be added to a css file somewhere to style the activity streams.
1639	1328213300000000	seanh	See activity_stream_event() in ckan/templates/_util.html for the CSS classes used.
1639	1328465219000000	seanh	Basic CSS added.
1640	1326710888000000	amercader	Depends on #1655
1640	1327340939000000	amercader	Done, see http://publicdata.eu/package?extras_eu_country=RS
1641	1326376777000000	amercader	Fixed on 77fa6483c32
1646	1327407044000000	dread	Seems ok now. Chrome auto updates - maybe it had a bug before.
1647	1326707383000000	dread	Isn't the problem that the 'Contact Us' link goes to http://okfn.org/contact/ rather than http://ckan.org/contact/ ?
1648	1330632344000000	zephod	Done in the #1506 branch
1649	1330860766000000	rgrp	"A general comment: I wonder if we can pull the *core* part of that extension into core and strip out any external dependencies like rdflib. Specifically the 80% use of this extension is the DCAT read/write:

 * Get a Dataset / Resource etc as DCAT RDF (I'd suggest we *just* supply something simple like n3 or even json-ld (see below))
 * (Possibly not even essential) Consuming Dataset info in that format

And even more radical solution would be to simply use json-ld: http://json-ld.org/ which would then just involve minors mods to our json output.

Having this in core (with option to enable?) would be a nice 80/20 (it was this feature that everyone asked for at the LOD meetup -- no-one mentioned SPARQL)."
1649	1331547577000000	ross	"After looking at some options via http://trac.ckan.org/ticket/2209 I think a simple RDF template or triple in an internal ckanext-semweb might indeed be the most appropriate way forward with this.  

n3 sounds useful, but given we could allow people to specify an RDF template we may as well do that as well as it would then suffice for ecportal who appear to want rdf as well.

Will check out json-ld as an option too."
1649	1331550598000000	rgrp	Can you elucidate on this template idea? I was thiking we want specification/configto be in the form of mappings (e.g. field X is really type Y etc rather than a specific piece of rdf/xml or n3) though perhaps that makes more sense. Let's centralize discussion on this in #2209.
1650	1326730780000000	ross	"Some translations are currently done with full locales (i.e. pt_BR) but we don't also have pt_PT and so where I would normally default to the language if there are only one translation I am unsure what to do in this case.

Currently supports the short language code or the locale code, but this will need to be resolved before we address #1653"
1650	1338206684000000	ross	Branch exists for #1650
1650	1343126718000000	ross	Probably not going to do this for ECP as John found a cleaner way of doing it.
1650	1346670010000000	ross	Closed as unnecessary now.
1652	1340187535000000	ross	Is this still required?
1653	1328887997000000	toby	"Initial implementation completed.

/en/home - is English /fr/home - is French etc.
/home uses site default from development.ini

Requests to default will redirected to a language specific url if the browser requests an available language.

h.url() and h.url_for() amended to use the new url scheme
h.url_for_static() added for none language based urls (css, js)

Base templates updated.

IMPORTANT: pylons.url() removed from ckan.lib.base.render() as this allowed the language functionality to be ignored. Broken templates should use h.url() instead of url().

"
1653	1329215488000000	toby	"branch feature-1653-i18n_url_rewriting in ckanext-ecportal is part of this fix
"
1654	1330863104000000	rgrp	I'd vote -1 on SPARQL endpoint and doing the simple version of #1649 as proposed in my comment http://trac.ckan.org/ticket/1649#comment:2
1656	1326711659000000	ross	"Dupe of #1657
"
1657	1330083881000000	dread	"c.f. ""Mounting CKAN at a non-root URL"" at http://wiki.ckan.org/Deployment"
1658	1338206622000000	ross	Being done elsewhere
1659	1326741734000000	dread	Fixed in https://github.com/okfn/ckan/commit/7eb7dddbc103a23291c05a938d9e05365c7e6189 aimed at 1.5.2
1659	1326747205000000	dread	Needed another fix: https://github.com/okfn/ckan/compare/ff08fd6...b772f52
1660	1327614737000000	rgrp	"The broken-ness arose from a (very sensible) refactor (done by Tom Rees) to be stricter about what we tried to preview.

Rather than hack around the conditions of the format string for previewing, my strong suggestion is to get rid of weird format types like x-osdata-csv (just change it to csv).

An alternative, that would preserve ability to set 'funky' formats would be to set the mimetype correctly (to text/csv) (this may still need an update to the previewer but one that would be sensible to make)."
1660	1327616782000000	rgrp	Update: I've done the change I suggested and it now works fine.
1661	1338206091000000	ross	We have another ticket for upgrading dependencies.
1662	1326730414000000	dread	Not important to fix this at the moment since CKAN's OpenID compatibility is essentially deprecated.
1663	1327919257000000	seanh	Done in branch feature-1515-activity-streams
1666	1326977528000000	seanh	Done in feature-1515-activity-streams branch. Did not add activity streams for tags (as in the ticket description), instead added 'tag added' and 'tag removed' activities into the existing user and dataset activity streams.
1669	1326803055000000	ross	"Subtickets are at:

* Publisher profile analysis #1670 [2d]

* Publisher profile sysadmin authz #1671 [1d]

* Publisher profile user authz #1672 [1d]

* Test auth logic hooks for publisher profile #1674 [3d]

* Publisher admin authz #1675 [3d]

* Publisher editor authz #1676 [2d]

* Add approval status field to groups #1673 [1d]
"
1670	1328519319000000	ross	Changed to reflect the need to generate documentation
1670	1330603657000000	ross	"Explanation of how to work with the auth profile now at  http://wiki.ckan.org/Working_with_the_publisher_auth_profile
Needs reading/testing.  

Started admin guide documentation in branch feature-1670-publisher-profile-docs"
1673	1327941049000000	ross	Implemented in 31199375a34e04af8158e60335816236029ff96e as part of the feature-1669-publisher-profile branch.
1675	1328519608000000	ross	ckanext publisher_form ui needs reflecting to ensure only admins can admin the group.
1675	1328709915000000	ross	Fixed in #1758
1677	1326807655000000	amercader	See #1678
1680	1326900832000000	ross	David suggested that we could implement this with a group extra instead of a new attribute.
1682	1330038786000000	dread	Now merged into #1605
1683	1326975613000000	dread	"Workaround done in branch defect-1683-search-order - SOLR is asked for one extra result which it then discards. Merged to master, aimed for release 1.5.2.

When we upgrade SOLR from 1.4 then we can remove this workaround"
1683	1326976925000000	dread	Here's someone else with the exact sorting problem: http://lucene.472066.n3.nabble.com/last-item-in-results-page-is-always-the-same-td2513423.html
1684	1340187582000000	ross	Left in backlog, but may need re-assessing depending on the data services plan.
1685	1340188083000000	ross	"May be subsumed into a service, will keep ticket as a reminder to cleanup
"
1685	1346670530000000	ross	8 months and no movement, looks like a wontfix.
1687	1329338671000000	rgrp	Closing as unclear what this involves (blob storage changes were deployed but webstore ones weren't ...)
1688	1327315514000000	dread	Have not really started this - rolling into new sprint.
1688	1328198481000000	dread	"Done: [feature-1688-authz-api 8d7b42c]

Work excludes changing roles on the System object, so you can't make people sysadmins. This could be a future ticket.

Docs added to apiv3.rst and examples here: http://wiki.ckan.org/Using_the_API

Took: 3.5 days"
1688	1328289101000000	dread	Requested by Philipp Laemmel. Is going into CKAN 1.6 release, planned for 2 weeks time.
1691	1327082369000000	dread	"RTFM... ;-)

 user add <user-name> [apikey=<apikey>] [password=<password>]"
1691	1327314081000000	rgrp	OK Great. I only raised this because James mentioned this at sprint before Christmas as did Fry guys. One of us should update James on this at next standup.
1692	1329242042000000	dread	CMAP are really keen on having this for groups
1692	1329242134000000	dread	CMAP also interested in having some custom CSS for a group, but that is perhaps another ticket.
1692	1338204395000000	johnglover	Image URL attribute added to groups (http://trac.ckan.org/ticket/2275). Won't add a similar attribute to dataset at present. Another option is to display the group image on dataset page.
1693	1338206601000000	ross	Toby fixed this up
1695	1327323309000000	dread	I propose spending 2h on this.
1695	1327426989000000	dread	" * links_to/linked_from was already available (since Sept - Friedrich put them in).
 * Count property not easy so not done.
 * POST to the Relationships Register (all three) works now (and the original way via the entity still works too)
 * Schema/validation was added along with tests for error conditions.
 * Creating a new relationship documented in Model Methods
 * 'Model Formats' section in API docs restored and updated.

Committed to master aimed for release 1.6 https://github.com/okfn/ckan/commit/f16450c1c34cac09046a098273f66d2b75aa87dd

Spent 6h on this in the end - generally useful tidying in this area."
1695	1330085001000000	dread	Went into CKAN release 1.6
1697	1327402311000000	dread	Just note that although there are similarities to the 'auto-save' feature on forms #1538, these use cases probably justify the different methods of saving the draft.
1698	1338204433000000	seanh	"Closing this super ticket, see remaining tickets with keyword ""taxonomies"":

http://trac.ckan.org/query?status=accepted&status=assigned&status=closed&status=new&status=reopened&group=owner&max=1000&order=milestone&col=id&col=summary&col=status&col=owner&col=milestone&col=keywords&keywords=~taxonomies"
1699	1327425070000000	johnglover	"CKAN 1.5.1 with EC Portal extension has been deployed to test server.

Full setup docs are in the ckanext-ecportal extension."
1700	1327425247000000	johnglover	Done, see ecportal_setup.rst in ckanext-ecportal extension.
1701	1327423221000000	amercader	"Done.
See 668292 - 78cc11

Time spent: 1.5 days"
1701	1330084925000000	dread	I can't find these changesets - am not sure which release this is in.
1701	1330085360000000	amercader	"Sorry, this ticket referred to the EC Portal project, the changesets are from ckanext-ecportal.
This hasn't gone into core yet, which is ticket #906"
1703	1327425195000000	johnglover	First draft complete (see ckanext-ecportal extension), ideally would need sample data from additional publishers for testing.
1703	1328528711000000	johnglover	"Moving to backlog for now.

Work based on current schema (from original proof-of-concept site and later meetings) complete, waiting for final metadata schema to be confirmed."
1703	1329918613000000	johnglover	Some metadata model info clarified at meeting today, will update ckanext-ecportal accordingly.
1703	1330956340000000	johnglover	Nearly done, need to write converter to rename tags to keywords, waiting for Toby's API work to be finished.
1703	1331142926000000	johnglover	Marking this stage as complete.  Keywords can be added/updated via WUI and API, but are still labelled 'tags' when called via package_show API call, but this will be addressed in a separate ticket.
1704	1327425354000000	johnglover	Importer made and added to ckanext-ecportal/scripts. Still has to be run on the test server with Eurostat JSON datasets.
1705	1327945105000000	seanh	Done in branch feature-1698-tag-taxonomies
1705	1328094584000000	seanh	Reopening because I still need to trace all the places in the model (tag.py, package.py, etc.) where there are methods that depend on tag names being unique, and then in the controllers and logic functions as well, and add new tests for the updated methods.
1707	1328024253000000	johnglover	Tom fixed this as part of #1583
1708	1327493457000000	dread	I've got a fix for this and am just looking to see where this problem started now.
1708	1327494415000000	dread	"The problem has traced back to this commit by Ian:

https://github.com/okfn/ckan/commit/51136465fb1bb94ea70df32be00eaef6ae43792b
ckan/config/routing.py
{{{
-from ckan.plugins import PluginImplementations, IRoutes
 	 10	
+from ckan.controllers.package import set_fallback_controller as set_fallback_package_controller,\
 	 11	
+                                     add_package_controller,\
 	 12	
+                                     set_default_as_fallback_controller_if_required as set_default_as_fallback_package_controller_if_required
 	 13	
+from ckan.plugins import PluginImplementations, IRoutes, IPluggablePackageController
}}}

By importing the package controller at this earlier point, it sets the ckan_url quasi-global variable before the config file has been loaded.

{{{
  /home/dread/gitroot/ckan/ckan/config/middleware.py(18)<module>()
-> from ckan.config.environment import load_environment
  /home/dread/gitroot/ckan/ckan/config/environment.py(20)<module>()
-> from ckan.config.routing import make_map
  /home/dread/gitroot/ckan/ckan/config/routing.py(10)<module>()
-> from ckan.controllers.package import set_fallback_controller as set_fallback_package_controller,\
  /home/dread/gitroot/ckan/ckan/controllers/package.py(20)<module>()
-> from ckan.lib.search import SearchIndexError, SearchError
  /home/dread/gitroot/ckan/ckan/lib/search/__init__.py(9)<module>()
-> from common import (SearchIndexError, SearchError, SearchQueryError,
> /home/dread/gitroot/ckan/ckan/lib/search/common.py(11)<module>()
-> solr_url = config.get('solr_url', DEFAULT_SOLR_URL)
}}}

In retrospect we should have not initialised the variables from the config during import."
1708	1327505889000000	dread	"Fix on its way.

This problem also stopped simple_search and affected reading the beaker settings.

Patch will make SOLR settings initialised consciously in config/environment.ini, rather than at search import time. I've also moved the search import time to be later.
"
1708	1327580995000000	dread	Fixed in [master 0d3543c]
1709	1327620136000000	rgrp	"I have already fixed the issue with counts (in a branch to be merged) :-)

Also this is opened in an already ended sprint :-)

IMO we don't bother testing simple_search since intended to be hacky and unsupported. Worth documenting the option but highlighting non-supported nature."
1709	1327620218000000	rgrp	I also note there is an error with how importing was working (re top level imports in lib/search.py) that meant simple_search was broken. I've fixed this locally and raised with Ross (whose commit triggered the problem) ...
1709	1327659562000000	dread	I have checked in a similar fix and with a simple test.
1709	1327659722000000	dread	Note: imports issue was previously dealt with in #1708 and was originally caused by Ian's commit - Ross just merged it in to master.
1710	1327580140000000	dread	Rufus says that the paster command is enough for now.
1710	1327583922000000	dread	"Code done in [master 804b549] headed for release 

Example usage (on the appropriate server):
{{{
paster db user-dump-csv /tmp/users.csv
}}}"
1712	1328526163000000	icmurray	"Update 6/2/2012 : Awaiting the publisher hierarchy in order to populate the ""browse by publisher"" section."
1715	1328494878000000	kindly	Mostly there, need to added types and stopfiles. Need to add actual multilingual fields.  Decided to translated title as well for relevance.
1716	1327601196000000	zephod	"Easily done. 

https://github.com/okfn/ckan/commit/2bd50d92f48ca67edb69e51a7bcfc5009d77a785"
1717	1330088539000000	zephod	"1. Already exists; ""tags:csv"" rather than ""tag:csv""
2. Format is user selected; we just show the most popular choices. Perhaps an effort should be made to force people to homogenize their format choices (my work with automatic icons will do this to an extent). Also, res_format doesn't appear on thedatahub.org, but for some reason it does on test...
3. There are thousands. We just show the most popular/relevant tags for your search. This could break out into another ticket though - eg. autocompleting tag input on the page?
4. Can't remember what this is...
5. I did this a while ago and popular opinion was that it should change back. This gives us room for expanded options like on thedatahub's live search page right now, and matches the layout of the Groups view page.
6. They should maybe be ordered by relevance, which includes popularity in some metric? This should be broken into a seperate ticket if you want it to go ahead and given to a Solr expert. "
1718	1328093772000000	rgrp	WEll known issue. Just needs an upgrade in jquery to 1.7.
1718	1340632748000000	icmurray	Re-assigned to aron for triage.
1718	1340703280000000	aron.carroll	This was fixed at some point.
1719	1328519411000000	rgrp	Fixed in https://github.com/okfn/ckan/commit/90c76b0b006cf505698834e833b548634cf10d17 (see log message for details of error and the fix).
1719	1328532877000000	dread	I've updated test.ckan.org with this fix and am afraid there are still broken images on http://test.ckan.net/revision
1719	1328541630000000	dread	My bad - the server wasn't updated correctly.
1720	1328528809000000	johnglover	Moving over to current sprint. Basic converters added, still have to write tests.
1721	1329133348000000	johnglover	Done: https://github.com/okfn/ckan/commit/bf3c85fbf9c72c0e8ac27d2079c20e07b6c7c668
1722	1328805890000000	seanh	Done on branch feature-1698-tag-taxonomies
1723	1328533040000000	seanh	We're not going to update the existing tag and package classes (as long as they don't break), going to add our own functional tests in a new file instead.
1724	1328634433000000	johnglover	I updated tag_list: https://github.com/okfn/ckan/commit/335535b646adf983d1d19bf19613712099db1f5e
1724	1329302302000000	seanh	I've updated tag_search() and tag_autocomplete() and added tests for them. So this ticket is finished now on branch feature-1698-tag-taxonomies
1725	1328204489000000	dread	"Fixed in 6fecbd9fb08f5a22e9dd2dd2745c287a38f44a30 on master. Added test for the tag_string_validator too. Aimed for 1.6 release.

Took 1h"
1729	1328537269000000	johnglover	This is essentially a duplicate of #1720. We do not really need helper functions for this (as it's trivial to get the default schema and add 1 extra key), but I have added a converter for tag string (with vocab) to tag and vice versa.
1730	1328537387000000	johnglover	"The function for this is the converter function for tags with vocabs.

Will integrate with the JQuery chosen plugin."
1731	1330942924000000	amercader	"The underlying auth layer is done, still there isn't UI integration (list of publishers in index page, publisher field in form...).
Needs to be moved to the next sprint."
1734	1332167315000000	amercader	All sub tickets have been implemented, so closing it now.
1735	1328531105000000	zephod	This is an edge case, and there's no simple fix -- you can't detect *why* the tags box has lost focus -- so I think let's not waste time inventing something complicated. 
1737	1329916781000000	dread	"SOLR syntax is already accepted in:
 * api/3/search/package
 * Action API ""package_search""

Actually api/1/search/package and api/1/search/package accept SOLR syntax too, but they also translate old-CKAN search parameters syntax to SOLR as well.

See: http://docs.ckan.org/en/latest/apiv3.html"
1737	1330908235000000	rgrp	Did not get to this sprint as focused on #1797.
1737	1334591246000000	icmurray	"See http://ckan.okfnpad.org/feature-1737-expose-solr-based-search-api

= Immediate actions

 * analysis of whether the current action/get.py:package_search() function exposes all we currently need for the use cases described above.
 * how to return that data (expand the current format?)
 * analysis of whether the current (action) API v.3 can use query parameters rather than as well as POSTed data.
    (controlles/api.py:action() )
    uses ""self._get_request_data()"" which in-turn pulls out data from POST body.

= Tasks

Extend the existing package_search action.

 * pass the facet fields into the logic layer from the request parameters.
   - /api/3/action/package_search
 * facet information not being returned via package_search action (is empty).
   - curl -X POST -d '{""q"": ""{!lucene q.op=AND df=text}tags:health +community -profile""}' 'http://thedatahub.org/api/3/action/package_search'
   - figure out why it's not working, and what the facet information should look like
 * whitelist any GETable api actions, and optionally construct the query from url params rather than body"
1737	1335460683000000	icmurray	"Facet results **are** already available through the package_search action api.  The facet fields need to be specified in the query, otherwise no faceting will be done (ie - the default facets specified in the .ini file are not used).

This leaves ""whitelist any GETable api actions, and optionally construct the query from url params rather than body"" todo, which I've pulled out into another ticket, as it wasn't originally in this ticket.  (#2330)"
1737	1335460997000000	icmurray	"... just to add to the above:

{{{

>>> pprint(json.loads(requests.post('http://127.0.0.1:8088/api/3/action/package_search', json.dumps({'facet.field': [""tags"", ""groups""]})).content))

<snip>


u'search_facets': {u'groups': {u'items': [{u'count': 1,
                                                        u'display_name': u""Roger's books"",
                                                        u'name': u'roger'},
                                                       {u'count': 2,
                                                        u'display_name': u""Dave's books"",
                                                        u'name': u'david'}],
                                            u'title': u'groups'},
                                u'tags': {u'items': [{u'count': 1,
                                                      u'display_name': u'tolstoy',
                                                      u'name': u'tolstoy'},
                                                     {u'count': 2,
                                                      u'display_name': u'russian',
                                                      u'name': u'russian'},
                                                     {u'count': 2,
                                                      u'display_name': u'Flexible \u30a1',
                                                      u'name': u'Flexible \u30a1'}],
                                          u'title': u'tags'}}},
 u'success': True}

}}}"
1737	1336328947000000	rgrp	"Having now thought about this I'm re-opening this ticket for the following reasons:

 * No real documentation (other than that in this ticket yet available)
  * It would also be nice to know how this maps to SOLR API (can i use all of the facet options solr provides or not ...?)
  * And I would again emphasize my preference for having *direct* access to something that looks *exactly* like SOLR API as I can then use client and docs from SOLR to work with it.
 * No clear resolution of separation between Action and REST API (and search API). Really seems to me there should be convergence between latter 2 (as suggested in the ticket) -- this would also resolve the problem that having GET /api/dataset return all datasets is *not* a great idea
 * The Action API requires a POST request. Since the primary purpose of the search API would be usage from JS it would be nice if GET and JSONP were supported. (Though given our CORS support we could argue this was optional).

Not saying *all* of this needs fixing but some clear approach here would be useful
"
1737	1337594352000000	icmurray	" - package_search action is now documented, with reference to the solr search parameters available. http://docs.ckan.org/en/latest/apiv3.html (auto-docs not working on rtd at the moment).

 - actions defined in get.py are now GETable.  http://docs.ckan.org/en/latest/apiv3.html#get-able-actions

 - we won't be providing direct access to solr api, as we think the cost outweighs the benefit."
1737	1337942345000000	rgrp	"I *strongly* disagree re access to solr API -- i don't really care if it is direct but I want something that looks like it at least for core query parameters and facets ...

Is there some major issue around security etc (e.g. limiting to only public datasets or similar?)"
1737	1337943671000000	icmurray	"For completeness, package_search docs can be viewed at https://github.com/okfn/ckan/blob/master/ckan/logic/action/get.py#L983

@rgrp: are you happy with this ticket now, does it expose all you need?  If so, I'll close it..."
1737	1338719220000000	rgrp	Let's close. What would be nice though is ETA on the GET support getting deployed on the DataHub -- just tried using it today and realized it didn't work :-)
1737	1340011001000000	icmurray	The GET-able actions ( #2330 ) are in master, and will make it into 1.8
1737	1340011203000000	rgrp	"But not v1.7.1? (When is v1.8 due?).

Also for the record a couple of things I found when trying to use this:

 * No support for facet sort order or facet limit afaict ..."
1737	1340015695000000	icmurray	"Replying to [comment:22 rgrp]:
> But not v1.7.1? (When is v1.8 due?).

Not 1.7.1 as it's not a bug fix (https://docs.google.com/document/d/170fxET3kd9dJ4L6VAj3yZugtK0rrVe44J4HuLbTUsEU/)

I don't know when 1.8 is due.

> 
> Also for the record a couple of things I found when trying to use this:
> 
>  * No support for facet sort order or facet limit afaict ...

Thanks, that's good to know.

facet.limit should be working [1], so if it's not, then that's a bug.  I can check that.

for facet.sort, I've added ticket #2543

[1] https://github.com/okfn/ckan/blob/master/ckan/logic/action/get.py#L1022
"
1737	1340112732000000	icmurray	"Replying to [comment:23 icmurray]:
> > 
> > Also for the record a couple of things I found when trying to use this:
> > 
> >  * No support for facet sort order or facet limit afaict ...
> 
> Thanks, that's good to know.
> 
> facet.limit should be working [1], so if it's not, then that's a bug.  I can check that.

facet.limit is working as I'd expect. eg (on master):

{{{
import requests
import json
from pprint import pprint as pp
pp(json.loads(requests.get('http://ian-laptop:5000/api/3/action/package_search?q=data&facet.field=tags&facet.limit=1').content))
}}}

Returns a result where only the tag with the highest count is returned in the search_facets result dict.

One thing I did spot though was that we aren't able to specify per-field parameters.  ie whilst `facet.limit` sets the facet limit for ''all'' facet fields, solr allows that to be overridden on a per-field basis, eg `facet.tags.limit`.  This isn't something we support at the moment.  I've created a ticket for this, #2573 .  Let me know if this something that you'd find useful, otherwise I'll leave it on the backlog for a future iteration."
1738	1328494709000000	kindly	cset: 117dce4d64de731e7b0a3c55175a1d093f2bf540
1738	1330086105000000	dread	Cset is actually dd2c0c677117f06a52aa22b3b2717bb605263570 and went into CKAN 1.6
1739	1328176197000000	rgrp	"Sorry if we did. I (and Tom) do run tests ;-)

However, occasionally I'm unsure whether I've caused a problem when there are existing failures."
1739	1328495651000000	kindly	"
fixed cset:117dce4d64de731e7b0a3c55175a1d093f2bf540"
1740	1328094884000000	dread	"I agree with getting rid of {{{from module import *}}} and the approach suggested.

However, I really disagree with getting rid of {{{from x import y}}}. In particular we have a strong convention of using this for ckan.model. It is a valuable abbreviation as it is used so much in the logic layer and tests. If someone should accidentally reassign the value of model to something else then I believe it is simple to see what has gone wrong."
1741	1328526473000000	rgrp	2.5d, 1d remaining.
1741	1329750838000000	kindly	done cset:7825caed3361e88a245b5dd2f946da8bedb160e0
1742	1328116635000000	ross	"Potentially valid diff, needs test + patch when I have time.

--- a/ckan/controllers/api.py
+++ b/ckan/controllers/api.py
@@ -592,6 +592,8 @@ class ApiController(BaseController):
     def is_slug_valid(self):
         slug = request.params.get('slug') or ''
         slugtype = request.params.get('type') or ''
+        if slug in ['new', 'edit', 'search']:                 
+            return self._finish_ok( dict(valid=False) )
         if slugtype==u'package':
             response_data = dict(valid=not bool(package_exists(slug)))
             return self._finish_ok(response_data)


"
1742	1328117135000000	dread	Probably better in the ckan/logic/validators.py: name_validator
1743	1328527086000000	rgrp	Marking as wontfix - as per discussion here: http://lists.okfn.org/pipermail/ckan-dev/2012-February/001652.html
1744	1330349472000000	zephod	Massive refactor of parent ticket mean this is all done and can be closed off. See #1506 for remaining UX work.
1746	1355141062000000	seanh	Closing this as won't fix, we decided to do http://trac.ckan.org/ticket/3018 instead
1753	1330908337000000	rgrp	As of today kindly has this working in https://github.com/okfn/ckanext-webstorer/tree/webstorer-for-datastore and deployed on the DataHub. Need to merge into master and to possible rename of extension, update docs and we are done.
1755	1328630657000000	ross	Implemented in v1.0-dev of ckanext-dgu and feature-1645-apply-simple-theme of ckanext-dgutheme
1760	1328709521000000	ross	See src/ckanext-dgu/ckanext/dgu/bin/import_publishers.py which will pull publishers from the provided CSV file and build the hierarchy in the database.  This file describes how to obtain the publisher list (with hierarchy detail).
1761	1328703769000000	ross	Have overridden the history function in the DGU package_gov3.py controller to make sure the viewer is in at least one group. 
1764	1335878051000000	seanh	Closing because I'm not sure what the reason for doing this would be.
1765	1328805833000000	seanh	Done on branch feature-1698-tag-taxonomies
1767	1328806740000000	seanh	"The API tests are done, in https://github.com/okfn/ckan/compare/master...feature-1698-tag-taxonomies#diff-24 on branch feature-1698-tag-taxonomies.

The WUI tests still need to be done."
1769	1329737597000000	icmurray	Duplicate of #1762
1776	1328805695000000	seanh	"Implemented create_tag() and delete_tag() logic action functions. If you specify a vocabulary_id in the params you can use these to add tags to vocabs, one at a time.

There are not yet functions for adding or removing multiple tags in a single API call."
1779	1329393759000000	kindly	complete at 669a8e9f7a768b147b1668940842b72b2a302088
1781	1329393814000000	kindly	complete at 669a8e9f7a768b147b1668940842b72b2a302088
1783	1328612744000000	dread	Fixed in [master 8f059ed] aimed for release 1.6.
1784	1328615106000000	dread	"I don't agree. I think we have a good compromise at the moment, where you have readable URLs, and people can change names if they want to. Names are changed only occasionally. The CKAN site adjusts all its links automatically of course. External blog posts may have incoming links, and these would break, but it's not difficult to search for a dataset. If we're really worried about this then we should provide a 'permalink' somewhere on the Package / Group / Resource page.

In the meantime, I suggest changing the Activity Stream links to be with names."
1785	1340724312000000	seanh	No point in doing this for 1.8 because the new theme is coming along anyway, moving into 1.9
1786	1328640597000000	dread	Fixed [master fe6829e]. Aimed for release CKAN 1.6.
1788	1330111162000000	rgrp	"Believe most of these are resolved by https://github.com/okfn/ckan/commit/27f4fc776b9199621d259749cf20787328df101f

@zephod: could you check again and see if anything remains?"
1788	1330623913000000	zydio	"Replying to [comment:1 rgrp]:
> Believe most of these are resolved by https://github.com/okfn/ckan/commit/27f4fc776b9199621d259749cf20787328df101f
> 
> @zephod: could you check again and see if anything remains?

I noticed that Thedatahub with latest code is still messed up..I was working with absolute paths in my environment without the h.url_for_static() to include the html5shiv.js script so I missed a problem, which can be fixed with my new [pull request #4](https://github.com/okfn/ckan/pull/4).

I'm aware of only one problem left: when you hit the ""Upload a File"" button inside the Dataset Edit/Resources tab nothing happens in IE < 9.
This is related to those IE versions not being able to dynamically insert HTML 5 tags, which breaks some jquery-tmpl (actually JQuery) operation (if you debug the code everything works in jquery-tmpl until one of the latest operation involving JQuery returns null instead of the expected object).
I was able to fix the issue in my environment by adding the following conditional comment:
{{{
 </script>
 <!--[if lt IE 9]>
 <script type=""text/javascript"" src=""/scripts/jquery.html5.preie9fix.js"">
 </script>
 <![endif]-->
}}}
where the jquery.html5.preie9fix.js is simply the [gist](https://gist.github.com/887560) published by Akkuma in a [jquery-tmpl issue (#36)](https://github.com/jquery/jquery-tmpl/issues/36#issuecomment-918495).

This script patches JQuery on the fly on IE < 9 to rework in memory html 5 blocks handled by JQuery, so that it doesn't break.

And this fixes the ""Upload a File"" button on IE.
I didn't commit/pull this specific fix for the following reasons:
* the script embeds innerShiv, which is a previous incarnation of html5shiv (now included in CKAN). It doesn't sound fine to include 2 pieces of code with similar effect, but I couldn't reproduce the fix with html5shiv!
* in my environment I have included this fix sitewide even if I didn't spot other problematic features..I don't know if it would be better to include it only on the dataset edit page in the official CKAN code.

Summary: I leave to you guys the choice on how to deal with this problem."
1788	1330624155000000	zydio	"Erh...sorry for some formatting errors in my comment.
I used markdown formatting for links, and used the #NUMBER format to cite issues, which obviously is interpreted by Trac as references to his own issues...my bad."
1788	1330644056000000	rgrp	Re the Upload file button not sure what's best. We do have plans to replace jquery-tmpl with mustache in the near future (but not clear exactly *how* near). We'll think about this and get back to you. Thanks for the detailed debug report.
1788	1333133365000000	zephod	"I've been performing a full sweep of the site to rebuild the markup & stylesheets using Bootstrap, and in doing so have managed to close off this ticket. Bootstrap allows us to delegate lots of clever functionality and layouts to Twitter's tried-and-tested code, making it easier to be compatible with IE7.

It has brought up plenty of issues: Lots of Javascript was broken; plenty of pages generate broken doctypes causing the browser to go into quirks mode (which in turn causes the page to explode all over the screen); most dynamic content would fail to generate properly in one way or another.... (see the #1788 branch for a log of issues encountered).

I've been refactoring our JS and have managed to strip ckanjs, too, because the only significant element we'd used was the File Upload view (which also now works in IE7).

test.ckan.net has been redeployed on master; I'm browsing the site in IE7 and everything is looking great :-)"
1791	1329138315000000	dread	Fixed in [release-v1.6 beaeaed]
1792	1329483249000000	toby	package create update use correct schema in get_action
1792	1332755148000000	toby	closing as done all that I was asked to do as part of this ticket
1792	1332872069000000	dread	"What is the changeset for this? There is evidence of a branch ""enhancement-1792-api-logic"" but perhaps this name got fast-forwarded out through a bad merge? Is this merged into 1.6.1 release?"
1792	1332928847000000	toby	This is in the 1.6.1 as far as I'm aware. The branch was deleted after the merge into master
1792	1333037710000000	dread	"I have tracked down the changesets to:

 * branched off master at dff9f7a8
 * merged master in for the last time (and became the 'new master'?) at 1a9227d9ff73c
"
1796	1339586499000000	ross	LXML removed, update requirements on the extensions
1797	1330550304000000	rgrp	New API endpoint, Authorization and documentation done and merged to master. Time so far. 1.5d. https://github.com/okfn/ckan/commit/a054071e2e29e70e7cfa69df8c117ad5d5871a24
1797	1330863639000000	rgrp	Data Viewer support for new DataStore in https://github.com/okfn/ckan/commit/9ab8b0283bb086eb4cd663ff73c27066bdd3c79a
1797	1331412469000000	rgrp	"All done!!

Help for data api done in https://github.com/okfn/ckan/commit/1d8e464f8542d4c33286bb93f4de50060665799f

Checkbox for datastore enabled in https://github.com/okfn/ckan/commit/3f1320cd92ae0e775fde1b5eada156260c55e0a6"
1797	1331412644000000	rgrp	"Merge fix https://github.com/okfn/ckan/commit/476a5bd32a3fac5d2dd85614f5d86c79f4ff6547
"
1798	1329395560000000	dread	"Was fixed by Ian in https://github.com/okfn/ckan/commit/5a9054459e3833443bed3e118bbbb6c442e55b0b on branch feature-1453-flexible-tag-names.

This has gone into CKAN 1.6."
1799	1330000389000000	dread	Fixed in [master ea2d824] for both logging in and registering whilst logged in. Cherry picked to release-v1.6
1801	1343144718000000	amercader	Closing as both old and new theme now show password reset links
1802	1329409718000000	dread	Current progress - I have got most of the dependencies installed - many by pip, but some I had to revert to Windows msi installers. Pad with details here: http://ckan.okfnpad.org/windows. So far done: 1 day.
1802	1329490081000000	dread	"I've achieved CKAN running with paster and without SOLR (using simple_search).

Running locally on an old XP machine, performance seems fine - no noticeable issues.

I installed most things into a pyenv using pip. pyutilib, psycopg2 and lxml were slightly problematic, but I have workarounds.

I had problems pip and svn and the Cygwin window, so reverted to DOS prompt. I still had the Cygwin tools installed though, so next step is to try it without these at all - they are a big overhead."
1802	1329734716000000	dread	Spent so far 1.75d
1802	1329830097000000	dread	"* Refined install without using Cygwin - this seems a little easier.
* Added example Apache & modwsgi deployment.
* Documented extensively at: http://wiki.ckan.org/CKAN_install_on_Windows
* Have not tried SOLR on Windows - I'm not convinced this is high priority, and normal install should be fine as it is so separate from CKAN.

Spent another 0.5d. Total spent 2.25d"
1804	1329491156000000	toby	This should be fixed in branch feature-1653-i18n_url_rewriting as we use different logic.  However it may affect other return_to calls used elsewhere like adding a new package.
1804	1330000705000000	dread	I'll fix this on release-v1.6 and then reassign to Toby to fix on feature-1653-i18n_url_rewriting too if the same issue crops up there.
1804	1330037202000000	dread	"Fixed this on release-v1.6 in cset 557e72330db7. Spent 0.5h.

Reassigning for Toby to look at branch feature-1653-i18n_url_rewriting "
1804	1330347185000000	toby	This has been fixed in master for a while and was only a 1.6 issue
1805	1329760795000000	toby	this is fixed in branch feature-1653-i18n_url_rewriting
1806	1330942356000000	toby	version one completed
1806	1331295310000000	toby	closing as initial work has been done if we need to amend then create a new ticket
1807	1330809641000000	seanh	"Implemented the recently-changed-datasets activity stream on branch feature-1807-recently-changed-datasets in CKAN and merged it into master (but the default templates don't make use of it).

Added the recently-changed-datasets activity stream to the front page template on branch master in ckanext-ecportal."
1809	1330528828000000	johnglover	Caught exceptions in QA instead, error message stored as openness_score_reason
1810	1329918479000000	johnglover	Deferred for now, moving to backlog.
1810	1335874745000000	johnglover	Not using eurovoc tags.
1811	1329918517000000	johnglover	Deferred for now, moving to backlog
1811	1335874765000000	johnglover	Not using eurovoc tags.
1812	1335874864000000	johnglover	Ross has fixed this via group authentication.
1816	1330863079000000	rgrp	"As per detailed comments in http://wiki.ckan.org/Proposals#Apps_in_CKAN I think Apps is a confusing name. What we are talking about here is the ""Related Stuff"" item mentioned in that ticket.

Rather than update ckanext-apps I suggest we do a rewrite. I've created a detailed super ticket at #2204 and assigned to you Adria for review and thoughts. (While I understand #2204 may involve more work which we maybe cannot do before relaunch I'd still recommend starting on that rather than spending time upgrading this extension -- if we have to disable it for relaunch I don't think that is a big deal ...)"
1816	1331302835000000	amercader	"+1 to a new, more flexible extension.
But in the meantime I've just spent a couple of hours making it work with latest CKAN, which was easier than expected, so we can deploy it with the new version of PDEU."
1819	1332163324000000	kindly	Currently using package_show_rest.  Should be moved to just use package_show but that is another ticket. 
1828	1330525412000000	rgrp	Fixed in https://github.com/okfn/ckan/commit/e6da48d9337575a83bc6a30896e68d1081b43847
1829	1330001828000000	dread	"This was due to https://github.com/okfn/ckan/commit/f07bfdb9#diff-1 - string ""Language has been set to: English"" shouldn't have been translated. I've put in a patch to make the code intentions clearer and added a test: [release-v1.6 07d3a02]. This only affected the 1.6 beta, and is fixed for the release."
1830	1330089912000000	dread	"Now if you set openid_enabled to false, you are not given the option in user settings to associate your account with openid. Cset: [master b295bde]

I looked at removing the openid middleware, but we use it for logging out users, whether they logged in or not - it looks like friendly form plugin is not as good as the openid one in this respect! We could hack the logout function into the friendly form to sort this out, but not sure the effort is worth it at the moment."
1831	1330956631000000	ross	Already have a branch for this.
1831	1331549284000000	ross	Email is not currently 'unique' in the user model.  Find out if this is intentional or not.
1831	1331655458000000	ross	Decided to delay this until later but code is in feature-1831-login-by-email
2198	1339771453000000	kindly	Already in the docs.
2201	1330765400000000	rgrp	Duplicate of #1171.
2202	1338204729000000	toby	these are available through the pkg_dict
2202	1338204801000000	toby	"re-reading this it's slightly different

re-opening"
2203	1348568961000000	dominik	There is work on this in the dataviewer-iframe branch.
2204	1332341044000000	toby	needs discussion - planned for 23-3-2012
2204	1332341080000000	toby	http://ckan.okfnpad.org/feature-2204-related-stuff
2204	1332843232000000	toby	still awaiting discussion
2204	1334077936000000	rgrp	"Important comment: not sure how much we have thought through using this for storing queries / views / visualizations coming from our data viewer. In particular, wonder if this necessitates some kind of support for arbitrary json data ...

Also (@icmurray): does this interact with our desire to do embedding?"
2204	1334218735000000	ross	"I'd be happier adding this to another ticket rather than moving the target for this ticket half way through so have created #2284
Should only be a short ticket in the next sprint."
2204	1335287636000000	aron.carroll	"Making some notes of front-end changes that I think need to be implemented sooooon.

{{{
Implement better truncation (the expanded text should pop out on hover rather than expand the entire row)
Show the type of related item (an icon would be good here)
Test in IE
Make the form work without JavaScript by accepting x-www-form-urlencoded.
Add classes to first item in a row to clear the row (currently uses :nth-child CSS)
Touch gestures and re-ordering (David's request)
}}}"
2204	1335795665000000	ross	Giving this ticket to Aron to fix the front end
2204	1337582843000000	rgrp	"Surely this ticket was closed 3w ago?

@Ross: can you close ..."
2204	1337594723000000	ross	Was waiting for documentation, can close now.
2206	1331046486000000	johnglover	"Close enough for now. Still have to restyle language drop-down to match template, but will fix when updating the list of languages.

Also still to decide on menu styles/locations (for CKAN login and main menu, and ODP main menu)."
2208	1332251880000000	seanh	"I've attached a ckan.pot file. To make it, I edited setup.py in CKAN core like this:

https://gist.github.com/2135849

and then ran python setup.py extract_messages. (And I had ckanext-ecportal installed at ~/pyenv/src/ckanext-ecportal.)

I guess I may need to run this again when the ckanext-ecportal source is finalised, so leaving this ticket open for now."
2209	1331547639000000	ross	Option 4 is the most appealing at this point, although you probably should look at #2209
2209	1331547674000000	ross	"Previous comment should read:

Option 4 is the most appealing at this point, although you probably should look at #1649 "
2209	1331551170000000	ross	"Current thinking is that option 4 is a default (as per ckanext-rdf) rdf output that is generated not in code (as currently) but using a genshi xml template to read the package into an RDF format (as if it were HTML).  This would then be overrideable so that for ecportal where the format of the RDF is different (change of vocabs etc) we can just point the config to a new template.

Pros:
  Easy to implement
  Easy to use
  Not hard-coded as currently
  Fast execution

Cons:
   Requires knowledge of required RDF output if default is not useful
   RDF and not any of the other formats yet.
   Only works with package/resource/tags unless more work is done
   

"
2209	1331551393000000	ross	"Can't edit comments .. so

Current thinking is that option 4 is a default (as per ckanext-rdf) rdf output that is generated not in code (as currently) but using a genshi xml template to read the package into an RDF format (as if it were HTML). This would then be overrideable so that for ecportal where the format of the RDF is different (change of vocabs etc) we can just point the config to a new template.

Pros:

  Easy to implement 

  Easy to use 

  Not hard-coded as currently 

  Fast execution


Cons:

  Requires knowledge of required RDF output if default is not useful
  RDF and not any of the other formats yet. 
  Only works with package/resource/tags unless more work is done

"
2210	1331549350000000	ross	This is now done through the logic layer member_create/member_list/member_delete
2212	1331719868000000	johnglover	Added as a new paster command in ckanext-ecportal (run 'paster ecportal' for a list of commands and arguments).
2212	1331720191000000	johnglover	Deployed on test server, where it imported 4087 datasets. A small number of datasets were not created as they failed CKAN validation - most of which had strange values such as 9999 and 0 for date fields (some also didn't have unique names).
2220	1331291241000000	toby	"issues:

1) want to cache static files long term - need to add a ?ver=xxx to allow changes - this will need a change to all templates etc - could be seen as a good thing

2) we can only purge specific pages not whole cache so we need to know all the urls which want to be invalidated - including language variants

3) urls should be consistent so we should use id not name for datasets etc

4) for now we can just use short expiry times as this prevents some of these problems"
2220	1332950550000000	toby	"Implementation of this has been carried out at the page level.

ckan.page_cache_enabled is config option to enable it

requires redis

need to document it somewhere
"
2221	1331561095000000	ross	Fixed in https://github.com/okfn/ckan/compare/1eeda11...ad2358a
2223	1331558791000000	rgrp	"Have introduced boostrap js and css on merge of #1797 https://github.com/okfn/ckan/commit/476a5bd32a3fac5d2dd85614f5d86c79f4ff6547

However need to remove blueprint and make sure we keep our original theme."
2223	1332246030000000	zephod	"I have been working overtime to try and get this change straightened out as it's suddenly on the critical path for something. Have a look here: https://github.com/okfn/ckan/tree/feature-2223-bootstrap

It's 80% of the way there; some form CSS needs overriding because Bootstrap tends to make things very large so they spill over. But on the whole the markup is in a steady state, which is what we need."
2223	1332842692000000	zephod	Merged into master here: https://github.com/okfn/ckan/commit/0bf4b33955df3806785f9b42a55acaeb45596e25
2224	1332475944000000	rgrp	Autocomplete based on bootstrap looks pretty non-trivial ...
2224	1338205358000000	ross	Being done by Aron
2225	1343220502000000	aron.carroll	There is a jshint.json config file that all JS in the new base theme conforms to. 
2226	1332159640000000	seanh	These deployment docs seem worth moving into sphinx as well: http://wiki.ckan.org/Deployment
2226	1332475468000000	rgrp	All done (as of Tuesday in fact!). No doubt further work to do but that's a new ticket!
2227	1332843126000000	toby	being done in other tickets
2232	1332331660000000	amercader	"Fixed in 6b4c6c9

This was due to some characters not being supported by XML. We now strip them before indexing."
2234	1337237687000000	rgrp	This looks interesting but is this a priority :-) (also no estimate as yet :-) )
2234	1337239588000000	ross	Yes, definitely need a replacement for wordpresser and sooner rather than later. Doing some experimental noodling to work out an estimate.
2236	1332153688000000	rgrp	Done. See https://github.com/okfn/ckan/commit/0d970d3a0e523a1695830e8c8c28c0ba10a8d8b9
2238	1343392681000000	seanh	Ticket #2771 encompasses this and related changes. Vocabs probably won't be deployed to test.ckan.net but a working example extension using vocabs will be added to core instead. Closing this ticket as a dup
2239	1334581838000000	ross	Changes to schema/rdf output
2240	1332408769000000	ross	Distributed to ckan-coord
2242	1333375436000000	seanh	Conclusion: jenkins should work, may need some jenkins plugin magic to get it to show what branch each build was run on.
2250	1332680690000000	rgrp	Is this now how we are doing it? I thought we were integrating with RDF store (so it was more about sorting out the data viewer / recline stuff)?
2251	1332331650000000	rgrp	Big +1: everyone wants to know page views. Would like detail of how this goes into interface. Downloads already being tracked. Also isn't this just an extension to ckanext-googleanalytics.
2251	1332332390000000	toby	"not really part of ckanext-ga as we need to sit first in the middleware for speed reasons.  I'm looking at recording the details and will do a summary page like ga extension.

As far as other uses like showing popular resources etc then we need to decide where the data will live - on the resource or separate.

Downloads tracked? where is this done in the code/data stored"
2251	1332340874000000	toby	"notes from meeting 21-3-2012

US1 As a Site Admin / Visitor (?) I want to see how often a page has been viewed (every page) and how often resources have been downloaded.
US1a Next to a resource or a dataset see how often it has been downloaded / viewed
US1b I want to see datasets or resources ranked by most downloaded or viewed
US1c See a trend graph for a dataset (and resources)
Adminstrative Dashboard (?)
    * I want to see the traffic breakdown by country to my site ...
    * Ditto for browser type, language, etc etc
    * I want to see it graphed over time ...
== Implementation Details ==
1. How do we store this data in CKAN?
2. How do we track (and store)?
3. How do we display
* Config option ckan.status.enabled = False (by default)
=== Storing Data ===
How does ckanext-googleanalytics do this? Current table:
package_id | count_recent | count_total
Move to a new stats_summary table
id | item_id | object_type | stats_type (total, month_yyyy_mm, ...) | value
Do we store this data into the search (solr) so we can search by it?
=== Displaying Data ===
 * Helper functions / dictize:
  * Helper function: h.stats_get(object_type, id, stats_type)
   * h.stats_top_ranked(object_type, number) -> returns object_dicts or just labels or ...
  * Change to dictize
 * Location in the default theme (do we show for example in search results too!)
 * Support for ranking by most popular in search?
=== Tracking Data ===
* Our own solution (just write to site_tracking)
* Google analytics (plus extension for retrieving data) <- would need a refactor
* Piwiki
==== Own Solution ====
site_tracking table
id | url | timestamp | action (page_view, resource_download) |
 * Make javascript to make request to ckan to store clicks and page views.
 * Add middleware so these requests do not go through pylons and just store data quickly.
"
2251	1332340947000000	toby	"TODO

look at

1. How do we store this data in CKAN?

3. How do we display * Config option ckan.status.enabled = False (by default) 
"
2251	1332524123000000	rgrp	Update description in great detail.
2251	1332776926000000	toby	"we want

resource show downloaded/viewed on resources

show on the dataset total/recent"
2251	1333535572000000	toby	"we have various options on tracking unique users seems the sane approach.

* unique daily view - needed for nice graphing

* unique total views

* total unique daily views - higher numbers and feels more right - easier to calculate if original data is lost/or archived

for now will collect all and then decide which to use for display as gives us flexibility if needed



display
-------

why is group listing of datasets inconsistent with main search (TDH at least)?
should we make these consistent?

group listing allows downloading of resource without tracking (this should be fixed)

if we make listings uniform do we want the download links or not?

I don't like the term download when it is just a link (maybe that's just me - what would be better?)"
2251	1333644538000000	toby	"most work completed: outstanding issues

* add a prune tracking_raw data to cli

* add indexes to tracking_raw

* add summary page for new data format

* add api counter

  1) do we record the url or action etc (action seems more sensible)
  2) add in __call__ or in action?
"
2251	1334074772000000	toby	api counter moved to ticket #2282 as needs better specification
2251	1334144999000000	toby	"For meeting today with Adria

* How to add tracking to solr index.  Can the data live in tracking_summary?  Do we need any extra indexes on table to help indexing?

* How will we add order by popularity to search?

* Can we add resources too?

* Will search be best way to find most popular packages/resources or should we get that pages data from tracking_summary?"
2252	1333108787000000	amercader	"There is a new ticket for the same schema as forms issue: #2268

The exception was fixed on [https://github.com/okfn/ckanext-inspire/commit/0dff1f6 0dff1f6]"
2252	1333374836000000	amercader	This needs more work on ckanext-dgu and testing.
2252	1334567495000000	amercader	Fixed on 0dff1f6c2e
2253	1340038490000000	toby	closing as nothing has ever happened with this ticket
2254	1332343198000000	toby	"What do we want to be able to do?

what do we use the stream stuff for at the moment?

la la la"
2254	1332950678000000	toby	"plan of attack

a) get removal of TDH from core - this will give a better idea of the issues involved

b) have a think"
2254	1338210316000000	toby	"closing.

we have fanstatic integration in ckan.demo work

tdh is it's own extension

h.snippet is in 1.7

ITemplateHelpers in 1.7

This allows most of the issues resolved.  Full removal of the IGenshiStream filter still neads some form of in template hooks but this is being looked at as a possiblity in ckan demo and can be considered out of scope for this ticket

closing"
2255	1332752936000000	rgrp	"I would say Public is default for Organization with Private being an option (or do we make this a config option?).

What about ownership by users?

>  New datasets can be created from the organization form, in which case the organization will be set in the dataset form dropdown (with privacy set to private - see below)

Does this mean like the setup on groups on the datahub (i.e. forward to new dataset but with some things hard-coded, organization/group?)? Or does it mean actual new dataset form on organization page."
2255	1332772340000000	ross	"> What about ownership by users?

Good question. WIll add to description.

> >  New datasets can be created from the organization form, in which case the organization will be set in the dataset form dropdown (with privacy set to private - see below)
> Does this mean like the setup on groups on the datahub (i.e. forward to new dataset but with some things hard-coded, organization/group?)? Or does it mean actual new dataset form on organization page.

The former, although currently we will have a slightly different form in the organizations extension, until such a time as we're ready to replace the existing one.  Tried merging the two forms but it ended up with such a mess of logic that it was unmanageable.
"
2255	1332934041000000	ross	Changed description based on docs of stuff to verify.
2255	1334582784000000	ross	Review + restrict resource access (when private)
2256	1333620795000000	toby	"I'd like to remove all 'custom' icons and just use bootstrap ones - is this reasonable?  they are added in different ways but h.icon() could be easily adapted for this.

minimal .sj .css files"
2256	1333720237000000	rgrp	Not sure what ticket means (remove TDH from core?). Also agree that we should glyphicons from bootstrap where possible going forward - though that would seem to fit more naturally with #2224 (Simplify javascript and css dependencies and add minified version) and have little to do with TDH versus core :-)
2256	1334051526000000	toby	"@Rufus,

The idea of this ticket is to separate TDH into an extension rather than it being incorporated into core.  This should help TDH by making it possible to push fixes without needing to do a new release of core.  It should also help make core more stable and as slim line as possible.  New features can be tested in TDH and then if they have a wider appeal they can be merged into core.

There is a strong desire for this within the dev team."
2256	1334051733000000	rgrp	@toby: indeed and I'm strongly in favour of the basic idea too (and largely a dev question so up to you guys though feature / functionality implications would need to be talked through). My point was that custom icon stuff was #2224 :-)
2256	1334052087000000	toby	"@Rufus,

Thanks, I think there is overlap and I'm happy to leave that bit of work to you (or future ticket owner) I was just adding some brief notes to this ticket on some of the outcomes I'd like to see and hence why I'd be happy to simplify the icons."
2256	1336046098000000	toby	I'm closing this ticket now ckanext-datahub exists and is live - the other work is included in other tickets
2257	1332950416000000	toby	pushed first round of changes into master
2257	1336731023000000	toby	ckan.restrict_template_vars defaults to true for 1.8 release
2260	1333373978000000	johnglover	Still some work to do on this, template needs to be finalised.
2260	1333554069000000	johnglover	Finished for this iteration, waiting for design work to be completed before making further changes.
2261	1332838253000000	toby	"new config option

ckan.root_path = /path/from/root/with/{{LANG}}/substitution
"
2261	1332840056000000	toby	completed plus documentation updated
2261	1332840112000000	toby	please test logging in/out as the redirect was not testable but should be correct
2264	1333635637000000	seanh	"Many strings have been fixed (and committed on master). Still to go:

When uploading a file:

- The ""Browse..."" button. This comes from the user's browser?

- Hangs when I try to upload a file, so the rest of this UI is unchecked.

The licenses on the dataset add, edit and view pages, ""License Not Specified"" etc.

Dataset state on dataset view page, e.g. ""active"".

When adding or editing resources:

- The resource types (Data File, etc.) The strings seem to come from resource.resource_type.

- ""You can use Markdown formatting here"", ""Should a DataStore table and Data API be enabled for this resource?"", ""Dates are in ISO Format — eg. 2012-12-25 or 2010-05-31T14:30"". I can't get strings with hyperlinks in them to translate here.

Dataset view page:

- License not specified.

Dataset search page:

- ""Tags"", ""Res_format"" and ""Groups"" in the sidebar. Leaving because this code has been refactored on feature-1821-multilingual-extension. Fix after that branch has been merged.

Dataset view page:

- The resource types, e.g. ""plain text"".
- The field names under additional information: cache_last_updated etc.

Dataset history view: timestamps not localised.

Login page:

- ""Login failed. Bad username or password. (Or if using OpenID, it hasn't been associated with a user account.)"" This string is marked for translation but I can't seem to get translations to work for flash messages. Also ""Sean Hammond is now logged in"" flash message.

Register page:

- ""Missing value"" in error message when you try to register and don't give an email. The string seems to come from formencode. stdtrans() not working?

User view page:

- Activity streams strings. Activity streams genshi function needs a little refactoring to be i18n-friendly.

Users page:
- ""less than 1 month"". This string comes from Pylons' time_ago_in_words() function which doesn't appear to support i18n.

New auth group (and edit auth group) page:

- ""Unique identifier for group. 2+ chars, lowercase, using only 'a-z0-9' and '-_'"". This string is marked for translation but for some reason it isn't working.

- ""Name: Please enter a value"" (in an error msg)

- ""User name"". The string comes from class FormBuilder?

Also, need to check that all tooltips are translated!"
2264	1334348070000000	seanh	"A few strings are still left to be marked for translation:

- http://trac.ckan.org/ticket/2289
- http://trac.ckan.org/ticket/2288
- http://trac.ckan.org/ticket/2287
- http://trac.ckan.org/ticket/2290"
2265	1332865837000000	dread	"I started work on this and need to park it somewhere - here will do for now.

I was using the 'MLT Component' http://wiki.apache.org/solr/MoreLikeThis :
https://gist.github.com/2217684

But I think it would make more sense to use the 'MLT Handler' http://wiki.apache.org/solr/MoreLikeThisHandler which needs enabling by adding this to the config {{{/usr/share/solr/core1/conf/solrconfig.xml}}}:

{{{
  <requestHandler name=""/mlt"" class=""solr.MoreLikeThisHandler"">
  </requestHandler>
}}}"
2266	1332932634000000	dread	Fixed in [release-v1.6.1 ed2772b] with test.
2267	1343135541000000	toby	this is not important as far as phase 2 is concerned - but you can do if you want
2267	1343229146000000	aron.carroll	Fixed in eade4e3
2271	1334567582000000	amercader	This was caused by an human error.
2275	1334159668000000	johnglover	Done in branch feature-2275-group-logo, still need to decide on how to style.
2278	1333441177000000	rgrp	https://github.com/okfn/ckan/commit/b7b32820a9132811028e7ccc243b2d2339492d4d
2281	1333967862000000	dread	Done in [release-v1.6.1 9ecbfa5][release-v1.6.1 9ecbfa5]
2283	1340623843000000	kindly	No super tickets anymore.
2284	1337583675000000	rgrp	This needs connecting to the user stories being generated at http://ckan.okfnpad.org/dataexplorer-user-stories
2285	1334580266000000	rgrp	"Recline improvements are done.

https://github.com/okfn/recline/issues/88"
2288	1338204815000000	ross	Auth groups are being deprecated
2289	1340887101000000	toby	needs docstrings
2292	1335021860000000	rgrp	"This annoyed me so much I just fixed it: https://github.com/okfn/ckan/commit/5eca7d5e37c0ef392b768b8b3768b2c3f93448b5

Issue was that our auto-completion depended on structure of the HTML which changes with bootstrapification.

BTW: have deployed this via copy and paste on datahub so i can use it. Will want to revert this when you do a deploy.

@Ross: I note that the same bug probably affects organization auto-complete."
2293	1339062853000000	ross	"Intercepting the group name change and forcing a reindex of all of the datasets within that group seems like the obvious approach (rather than more lookups by ID after processing search results).

Should take less than a day."
2296	1334567141000000	icmurray	"* ensure the read_ajax and history_ajax actions work in the routing.
* ensure the moderatededits.js works with the new templating
* ensure that the css works with the new templating
* ensure that the stream filters work with the new templating.

~ 6 days work"
2297	1334569632000000	seanh	http://ckan.okfnpad.org/27
2298	1340285049000000	toby	related to http://trac.ckan.org/ticket/2579 move sort functions to helpers
2302	1335516537000000	ross	Will eventually want to allow customisation of different CSS but designs are currently under review/change.
2302	1342095074000000	toby	"@ross

do you want to give this to aron or me?"
2302	1342097600000000	ross	Have assigned it to Toby.  Not sure how high priority this is, but only provides a very minimal level of configurability.
2302	1343315555000000	shevski	"My ideas for this could include one day:

One page where the portal admin can choose and/or change the:
1. Portal name & tag line
2. Logo (to be displayed in header)
3. About page text
4. Featured dataset & text on homepage ?
5. Featured groups for homepage ?
6. Footer links
7. Colour scheme
8. Homepage background (?)"
2302	1343596669000000	shevski	I reckon getting this live, esp with a easy to fill styled text header (see Sam's design) and a UI for changing About page text, featured dataset on homepage and welcome text is key
2302	1343636153000000	toby	"@shevski,

please do not try to change the meaning of tickets/add features or they will just get closed as won't fix.

featured datasets is nothing whatsoever to do with this ticket so adding it to the ticket just causes me to get upset / demotivated etc.  please do not do this.  It ruins my day.

Also comments like see sams design is of no value without a url in fact it has negative value.

:(

I have changed the priority of this ticket to account for this but next time i'll just close it."
2302	1343820855000000	ross	Just a quick note, if Rufus asks about editing about page, he's talking about this ticket.
2303	1334654727000000	ross	feature-2303-rdf-export-command
2304	1335878372000000	seanh	I'm setting the priority of this high just because it's a low-hanging fruit for this sprint, as it was almost done last sprint.
2304	1335885463000000	seanh	Setting minor again after cleaning tickets out of this sprint
2304	1337073870000000	seanh	Currently implemented in this branch https://github.com/okfn/ckan/compare/master...feature-2304-follow waiting for code review and merge into master
2304	1337158641000000	seanh	Finished and merged into master
2305	1335879165000000	seanh	Setting the priority to major as I think it's worth getting this done since the follow support (which is almost finished) is a bit pointless without this.
2305	1335885478000000	seanh	Setting minor again after cleaning tickets out of this sprint
2305	1340879812000000	seanh	Implemented by Sven
2311	1334837867000000	toby	"most work has been completed

comments can be added to templates via ${h.disqus_comments()}

recent comments via ${h.disqus_recent()}

basic i18n works for languages except norwegian which reverts to english

needs ckan 1.7

awaiting clarification re urls changing from under us"
2312	1340188741000000	ross	"We have a ticket for object ownership (group and package) #2548 which will make it much easier to implement this functionality of showing user owned datasets in a 'virtual group'.

Will close this in preference to the other ticket which is needed for other features too."
2313	1334756921000000	seanh	"Note that c.new_facets has now been renamed c.search_facets.

Before this ticket is closed the old c.facets should also be removed from the template context. It's put there by ckan/logic/action/get.py:package_search(), which also puts the new c.search_facets there."
2315	1334919522000000	dread	Done, with tests and bootstrapification of the form: [release-v1.6.1 b23b357]
2317	1340033433000000	kindly	Getting replace as part of new theme.
2319	1340624083000000	ross	Resolved with rework of UI
2322	1337339587000000	ross	"+1 on these, although ../download instead of ../raw and ../view instead of ../viewer
"
2322	1337864855000000	ross	"Viewer almost exists with the /embed link and so have just used that with a better default size to provide a prettier url. Can still use the width=&height= that are used in the /embed url.

"
2322	1339749795000000	rgrp	When will this go live? Will this be in v1.7.1?
2322	1339750135000000	ross	No, new new features in point releases, we only put bug features in unless there is an extremely pressing need.
2322	1339750208000000	ross	"Going to try that last comment again.

No, no new features in point releases, we only put bug fixes in unless there is an extremely pressing need."
2322	1344086640000000	rgrp	"Can I confirm this is in v1.8 ...
"
2323	1335516967000000	ross	"Doesn't make sense in Organizations mode.  Adding existing dataset would mean that dataset would have to already be in another organization.  

Leaving this open though to fix in case we decide that datasets *can* be in more than one organization at a time."
2323	1340188400000000	ross	Can create a new ticket if the requirements change.
2325	1335366188000000	dread	Done in [release-v1.6.1 6343a9c]
2329	1346664271000000	ross	Moved to 2.0 branch for new UI.
2330	1336149571000000	icmurray	"Implemented, providing two methods of passing an action's parameters.  Either, each parameter is specified as a url parameter, eg

{{{
curl http://127.0.0.1:5000/api/3/action/package_search?q=police
}}}

or, for cases where a more complex data_dict is required, the data_dict can be parsed as a json-encoded dict in a single url-parameter called ``data_dict``, ie:

{{{
curl http://127.0.0.1:5000/api/3/action/package_search?data_dict={'q':'police'}
}}}

As part of this ticket:

 - I noticed that all module-public members of the action modules were being loaded as actions (including functions imported from other modules).  So I've cleared up the  action modules to prevent this.

 - I've cleaned up the action modules to use ``get_or_bust()`` when accessing a passed in data_dict outside before it's been validated by a schema.  This provides better error messages for clients.

 - provided a decorator, ``@side_effect_free``, for users implementing their own actions through the IActions interface to be able to expose their custom/overridden actions as a GET request through the action API."
2330	1336387328000000	icmurray	"Replying to [comment:3 icmurray]:

> 
> or, for cases where a more complex data_dict is required, the data_dict can be parsed as a json-encoded dict in a single url-parameter called ``data_dict``, ie:
> 
> {{{
> curl http://127.0.0.1:5000/api/3/action/package_search?data_dict={'q':'police'}
> }}}
> 

Another option is to have the data_dict json-encoded in the GET request's body.  This is possible, but

1) Although permissable, it's not, as I understand it, conventional to have a GET request's body form the options of the request.

2) Caching proxies won't inspect the body of the request, only the URL.
"
2331	1337782689000000	kindly	"This is a wontfix.  I think terms should be ored by default.  All modern search engines work like this.  
If there is an issue due to relevancy (i.e if you type mulitple words and your result not coming near the top) then we should use this examples so we can tweak the results."
2331	1338390995000000	rgrp	"@kindly I really don't get this but I may understand poorly. Google does not work by or-ing does it (as i add things to the search query I get *less* results not more ...).

It also makes it really hard to find stuff: as I add query terms to my query I get more stuff not less which makes for terrible finding of stuff - I appreciate that there is a scoring aspect but that seems secondary."
2331	1338455981000000	kindly	"Scoring is primary in my opinion.  Who cares if you have 1000 results if the top few are yours.

If things are hard to find we need to change our relevancy first.  So if you have examples of where you think the scoring is wrong then please make a ticket for that.

Google, I imagine, just has a cutoff of anything under a certain score not being shown.  We could do that as well but it would take some working out what we wanted that score to be.

Full ""And"" queries also limit any accidental discovery, especially of rare terms.  If you do not get your search exactly correct then you get nothing, which is bad.

Obviously you can still AND things or +things.

The correct solution to this is adding a minimum match parameter which is a middle ground. eg you can say that you want to match over half of the terms.  ""thing1 thing2 thing3 thing3""  means you have to match at least 2. There are many options described here. http://wiki.apache.org/solr/DisMaxQParserPlugin.   You can change this in an extension if you want it just requries adding an mm field to the before_search in the Ipackage controller.  I do not personally think we should change it as default.

I am closing it as wont fix as its trivial to change and is a philosophical difference not a technical one."
2331	1343814758000000	rgrp	I'm re-opening this. This is a reasonably significant UX problem -- not just a philosophical difference. It is just *weird* to get *more* results as I add search terms rather than less. Please can we have this fixed ...
2331	1343862230000000	kindly	As I said I do not not agree with it being a UX problem or *wierd*. *wierd* is not acceptable in response to a thought out comment. So I am closing it again.  
2331	1345191494000000	rgrp	"Re-opening yet again. This is something brought up by entire client team on several occasions :-)

We really do need to fix this as it is really poor UX. To give, yet another, example:

http://datahub.io/dataset?q=thatcher+wages

This returns 15 datasets yet only one of them has any mention of thatchers (the first one!). (The others are there because they match wages). This isn't what I expect. I expect *only* to see datasets that match *both* terms ...

"
2331	1345192722000000	ross	"This is the dullest game of ticket tennis ever :D

Google don't OR the results, they have an explicit operator for ORing query terms and default to ensuring that all terms are present (in one form or another) in the documents.  I understand the argument about cut-offs and relevancy scores, but for a large search engine they have the benefit of scale both in resource and documents. I spent 6 months of my life tweaking weightings for n-dimensional vector space search, I don't think it is likely to be a number we can, or will find by accident.

Given that Marcus also got confused by the current behaviour I think we should either:

a) Make it configurable
b) Just change it to what has been asked for

Don't care which.



"
2331	1356474344000000	rgrp	Now transferred to github at https://github.com/okfn/ckan/issues/258
2332	1337582891000000	rgrp	@rossjones / @amercader: can you do a full review and generate sub-tickets as necessary (obviously may not all be this sprint ...)
2345	1335878420000000	seanh	Setting priority high as we want this done by Friday for the 1.7 release.
2345	1336492725000000	seanh	Work on this has started in branch feature-2345-action-api-autodocs
2345	1337962454000000	seanh	Done but now I need to fix readthedocs again
2346	1338205553000000	johnglover	Will create a separate ticket for 'organization' to 'publisher' renaming, the rest are done.
2347	1335962835000000	ross	[ ] Check that dataset privacy can be taken into account.
2347	1336039458000000	ross	Keeping track of UI changes required, and copied Aron
2347	1337238738000000	rgrp	"This looks great Ross. Couple of things not included (which I have taken liberty of adding to the description as well - you will probably want to tidy up):

 * Related is a pretty terrible name in the UI - much better to have it called Apps, Ideas etc (perhaps title tag could even give more details e.g. ""Apps, Ideas, Visualization and other material related to this dataset"") -- btw i thought this was in #2332 but realize it wasn't (apologies for that!)
 * Documentation, documentation, documentation - AFAICT I can't see anything in v1.7 or master docs. I imagine this would be a short section like http://docs.ckan.org/en/ckan-1.7/commenting.html (and probably coming right after that in the ToC) which says
  * What it does
  * How to enable (and perhaps includes a nice-screenshot!)
  * How to customize (e.g. can one customize the list of options of things one can create (e.g. can I set it to just be app and idea or ...)
  * Also liase with Mark W re a blog post about this from the user perspective (a screenshot walkthrough ...)
 * Clearly mark this old extension as deprecated from v1.7 forward: https://github.com/okfn/ckanext-apps (I just met someone last week who was working on integrating this and had no idea it was replaced by something better in v1.7)
 "
2347	1339602763000000	shevski	"Name-wise: what do we think of 'Related Media' - that suggests news articles, apps & visualisations to me

I'n not sure about relating 'ideas' to specific datasets. Looking at the way ideas work in DGU & pd.eu - it's more general and portal-wide so should flesh out user stories for this before adding ideas to related extension"
2347	1340613938000000	ross	Needs some UI work now, have changed status to blocker which appears to be the only way to denote something as blocked (awaiting resource).
2347	1343126819000000	icmurray	"Small fix to create action, outlined in [1] to be done.  Said I'd do it, so moved ticket over to myself.

[1] https://github.com/okfn/ckan/pull/62"
2348	1338193014000000	ross	"A fairly good start has been made on this at https://github.com/okfn/CKANClient-J

Lowering priority for completion for now"
2349	1336037341000000	ross	Openlink hoping to get RDF dump into Virtuoso today.
2349	1336555121000000	ross	Chased Openlink today for update
2349	1338193148000000	ross	Initial DNS change doesn't seem to have taken, chasing Nils to see if he can take a look.
2349	1339075361000000	ross	"Created symlink from /var/www/nginx-default/dump to the rdf output folder, accessible via http://s055.okserver.org/dump/ with daily dump available at http://s055.okserver.org/dump/rdfexport.tgz
"
2349	1339428913000000	ross	"Notified Hugh that  http://datahub.io/dump/rdfexport.tgz will contain all of the RDF files every 24 hours if they want to fetch and import them.

Have asked to make sure that this is satisfactory."
2351	1340615641000000	icmurray	Scripts and docs in https://github.com/okfn/ecportal-server-setup
2353	1336037264000000	ross	Started the user stories at https://docs.google.com/document/d/185sWPEO9cn1SbquH83UFcLme7xKdgfhCNqOo7pdsRKw/edit
2355	1336731240000000	toby	"ckan.plugins.toolkit introduced to help control access to ckan for extensions.  This should reduce breakage for extensions using this.

ITemplateHelpers allows extensions to add helper functions so templates can be less reliant on Genshi filter"
2355	1338212946000000	toby	"Need to do documentation which is #2362 so has own ticket

closing"
2358	1336641577000000	amercader	Took longer than expected due to last minute changes and problems with the packaged version.
2361	1337016768000000	amercader	I actually spent some more time of this because I upgraded PDEU to CKAN 1.7, which was needed to fix the search index and a good testing for the release as well.
2362	1341314244000000	toby	"first part complete 

part2 is the auto generation merge that is for 1.9"
2362	1342085420000000	toby	need to get the auto-documentation done now
2364	1335890204000000	ross	Review the FRY app and investigate alternative payment gateways.
2364	1336483769000000	ross	Start of doc listing payment gateways is at https://docs.google.com/document/d/1E4lX6RnRLDO0ioieKRpVs9a-My9nh6lBjvVahWDm3SY/edit
2365	1336492342000000	ross	See also #1165 and #1096
2365	1340266964000000	ross	After discussion with DR, it was decided that multisite wasn't something we would approach now, instead going for individual (shared codebase) installs.
2366	1336395238000000	dread	For my site I need the Authorization Groups sections gone from the authz pages, for v1.7.1, so I've made these check for the presence of any Authorization Groups in commit: [master 8947302]. So it's another useful stepping stone to getting rid of them cleanly.
2366	1336555441000000	ross	I think the UI aspects have been removed in 1.7 with hopefully the rest of it going in 1.8 - assuming we have a clean migration script.
2366	1336560445000000	dread	"Thanks Ross. It's the dataset authz and admin authz pages which still need Authorization Groups removing. e.g. http://thedatahub.org/dataset/authz/conservative-party-uk-donors-by-sector
and 
http://thedatahub.org/en/ckan-admin/authz"
2366	1338215334000000	ross	Need to make sure there is a clear migration between authgroups and organizations if desired.
2367	1336035031000000	aron.carroll	Fixed in ckanext-datahub@4aa76740e3def64a80171df4417c195210f0eb25
2371	1338481174000000	toby	implementation trial in ckan demo branch #2375
2371	1340038431000000	toby	awaiting release and demo theme merge
2371	1345209675000000	toby	closing as part of 2375 branches
2372	1343220160000000	aron.carroll	These are now in https://github.com/okfn/ckan/blob/b31109b628a21072ec0c2dec2a5d5a1c2cc0ed9c/doc/coding-standards.rst#javascript-coding-standards
2373	1336142514000000	dread	Fixed in https://github.com/okfn/ckan/commit/8b7141cd2ff619a0e35aaa31bbc1d17156647498 on master (and also on release-dgu1).
2374	1340287976000000	ross	"count is returned at the top level of the dict (at the same level as results)

Was added by dread on 2012-05-04, must have been in a recent patch."
2375	1338292898000000	toby	stealing this ticket
2375	1340710303000000	toby	moving milestone
2379	1340033026000000	ross	Implemented in master
2380	1337868169000000	ross	"datagm is VERY broken with 1.7

Waiting for datasuite UI changes."
2380	1340627558000000	ross	Dupe of #2545
2383	1337872916000000	icmurray	"This helper function won't parse UTC offset if passed a UTC offset as ""+01:00""; but incorrectly parses the UTC offset ""+0100"" as 100 microseconds.

Resolution:

 - I've decided to keep the behaviour of not parsing UTC offsets because we currently don't store timezone information in the database; and I think that either dropping the tzinfo, or adjusting for it would appear to be ""magic behaviour"" from the user's perspective.  Also, as this is a helper function, I think it makes sense to keep the behaviour as is, even if it's slightly non-standard.

This fix [1] maintains all the old non-ISO behaviour:

 - not allowing UTC offset to be specified.
 - arbitrary delimiters between date and time values.
 - microsecond precision.

But won't parse ""+0100"" as microsecond precision.

I tried using a couple of python modules for parsing date strings; but none maintained the same behaviour.

[1] https://github.com/okfn/ckan/commit/d6c9e48f8df5e926abd3fb1a1607f4f5a30075b4"
2384	1337100810000000	dread	Done in 0bc06c6495c749d6b481164d59cceeca873acefb
2386	1337967006000000	seanh	Done. ckanext-spatial and ckanext-qa are not activated because they don't work with the current version of CKAN. datastorer is not installed yet.
2389	1337237502000000	rgrp	Just to note these were 2 *different* options. '''Either''' you do the fallback approach '''or''' we turn off DataStore by default and only use if enabled (which happens due to explicit enabling of DataStorer turning it on ...)
2390	1337100788000000	dread	Done in d1c2ed08c90c2d94e1b2ced86e8758208a61ee96
2391	1338397982000000	seanh	I've told them how to do it themselves and offered to help if they get stuck
2394	1337161917000000	dread	Done in [master b486244]
2398	1337963342000000	seanh	I'm closing this because we've got a whole bunch of tickets from the dev meetup about fixing the dependencies and requirements file that should deal with this problem
2399	1340706702000000	amercader	Fixed in 493589aaf
2400	1338205947000000	toby	In testing this is not replicable due to lack of info so closing
2401	1337273042000000	dread	Done in master 112e405d0116bdcf196062520e3474e231337996
2402	1337302474000000	kindly	cset: 12da5e9effeeb1aca0df321c355d8438647ef426
2403	1337302700000000	kindly	cset: 05144f8621ee719c345373934e70719f46e87cf6
2405	1337583749000000	rgrp	Assigning to ross for review and assignment.
2405	1338212357000000	ross	Suggest Sam might be able to provide you the icon
2405	1338213564000000	icmurray	"Questions for client team:

1. Did you have anything in mind for improving the ""Powered by CKAN"" text and icon?  I'll sort out the vertical alignment of the text and icon; and see if Sam has a better icon.  

2. The branded section itself is already customizable by a snippet (https://github.com/okfn/ckan/blob/master/ckan/templates/snippets/data-viewer-embed-branded-link.html).  Is that enough?  Or are you asking for something else?

3. Personally I think the URI should use the resource uuid, and not name.  And from recent discussions on ckan-dev, I think the consensus is the same.  How important is this for you?  Perhaps it's something that could be overriden in the datahub extension."
2405	1340097846000000	icmurray	Bump: Questions for client team above...
2406	1337766385000000	toby	"I installed CKAN yesterday afternoon from source, using the instructions at

http://docs.ckan.org/en/ckan-1.7/install-from-source.html

Most things worked pretty smoothly and, luckily, when they didn't I
was lucky enough to have David Raznick on hand to help sort them out.
As a result I've made the following notes on where the doc could be
improved.

For some ghastly reason I am running Linux Mint, which is some variant
of Ubuntu. It's not 10.04, so no package, hence the source install.

Sec 2: Not wanting a mysterious file called 'pyenv' in my home
directory, I created a directory ~/ckan and typed 'virtualenv pyenv'
from there. Everything worked fine. But if I had needed the 'tip' it
would have been a little confusing. It would also be worth reminding
the user that the dubious package is one they've supposedly just
installed, so if that went OK, they won't need to worry about this.

The tip also isn't clear about under what circumstances I'd need to do
the 'easy_install pip' - I didn't need to (is that also only when
python-virtualenv is missing?)

Sec 4: This worked, but the example command for installing a
particular version is confusing. It says it is for 1.5.1, but
replacing '1.5.1' with '1.7' fails because there is a rogue 'c' in the
command.

Probably it would be better to use the latest version (1.7) as the
example anyway. Or is there a way of asking for the latest released
version?

I understand this checks out the whole Git repository with all history
- I can't imagine why I'd need to do this to build a particular
version. But David assures me it's very sensible.

Sec 6: This worked, but it wasn't very clear what the purpose of the
'List existing databases' step was.

Sec 8: So now I had to try to get Solr working using the instructions at

http://docs.ckan.org/en/ckan-1.7/solr-setup.html

This didn't work at all, in ways I can't now remember, to do with
Java. In the end David suggested using Tomcat rather than Jetty (don't
ask me what these do, but they have something to do with getting Solr
to work ...) and this turned out to be much more straightforward to
install and get working, with two caveats (below). David suggested
maybe Tomcat should be the default suggested in this doc.

- One problem with Jetty was to do with using the wrong version of
Java, which seemed to be fixed using ""sudo update-alternatives
--config java"". It didn't fix Jetty - not sure if it would also have
been needed with Tomcat.
- Soft linking the schema file didn't work - it seems Tomcat doesn't
like soft links. We made a copy.

After this everything worked, and I now have my very own CKAN. Hurrah!

Mark
"
2406	1337766413000000	toby	"The 'post-installation setup' instructions at

http://docs.ckan.org/en/ckan-1.7/post-installation.html

claim to be for either package or source installations, but only work
as stated if you have done a package installation. E.g. after a source
install, ""paster --plugin=ckan user add admin
--config=/etc/ckan/std/std.ini"" doesn't work (the ini file is
somewhere completely different), but just typing ""paster user add
admin"" from the ckan directory is fine.

The instructions should also mention that the virtual environment
should be activated.

Mark
"
2407	1340633440000000	amercader	This will require some thought. Bumping to 1.9.
2408	1341497601000000	aron.carroll	This will be done as part of adding javascript in phase 2
2408	1343657014000000	aron.carroll	Fixed in df502fd9269859c73458f4ad8de75939220e0315
2409	1337688965000000	ross	This is in the Package controller and may be related to upcoming ticket on removal of autoneg.
2410	1338193633000000	ross	Tim Lebo and Keith Alexander are both now looking at how they can implement this themselves, so for now this is wontfix. We can reopen this as part of any future work with VoID
2411	1338210872000000	toby	This is a long term goal
2414	1337869578000000	ross	"LXML is currently used for markdown_extract and check_solr_schema_version 

Changing check_solr_schema_version should be possible, 

Used in markdown_extract to just strip HTML tags."
2414	1338471374000000	ross	Merged by kindly
2416	1338464207000000	toby	commit 37622d5 does this but probably in the wrong place but works for now.  Need to revisit at some point.
2416	1340710252000000	toby	moving to phase 2 as not causing problems but still needs proper fix
2417	1337864155000000	toby	fixed in demo-theme branch
2418	1337875172000000	toby	"all facets now shown and selected have <li class=""active"">

@aron styling of active facets with long names breaks.  we could make the names shorter in snippet/facet_list.html via truncate or make the selected taggy thing wider"
2419	1337863024000000	toby	"@aron

the reason for this is that controller/package.py renders the form `package/new_package_form.html` as part of it's work and then makes this available a `c.form` to the template.  I'm not sure I like this as an approach but it is how it is currently done.  If you split your form into a new template `package/new_package_form.html` then you get all the errors etc.

I think for now we should do this and then look at if doing it all in one template pass might be more sensible.

reassign to me if you want me to do this else I'll leave it with you"
2420	1337950422000000	toby	merged into master
2422	1337945204000000	seanh	Closing because I'm not able to reproduce and it turned out floapps had publisher auth on which was overriding his rights auth
2423	1338193199000000	ross	Duplicate of #2414 
2424	1338193269000000	ross	Duplicate of #2413
2428	1341234933000000	seanh	This awaiting merge, pull request: https://github.com/okfn/ckan/pull/46
2428	1341314475000000	seanh	Merged. The only thing I didn't do was add a test case that runs pip freeze and tests that all the right versions of deps are installed.
2430	1338397815000000	seanh	http://trac-hacks.org/wiki/MasterTicketsPlugin
2431	1338397906000000	seanh	https://github.com/davglass/github-trac
2432	1338205526000000	aron.carroll	"It would be great to use something like http://trac-hacks.org/wiki/SimpleTicketPlugin to remove most of the options when creating a ticket.

Suggestions to remove theme, repository, component and type unless they're actually useful."
2432	1338325120000000	shevski	"Where do new tickets go to await triaging?
Is priority set by whoever creates the ticket? Does this get revised? Will we have a field for dev time estimate or where will this go?"
2433	1337960203000000	toby	"the affected actions
===============
package_list
package_relationship_create
revision_show
group_list
package_update_validate

It would be nice to get this fixed and I'm loathed to suggest adding a version 4 hack.
If we make this change it will break things for existing users.  This behaviour has existed since the action api was added as far as I'm aware

So should we
a) leave it forever and document
b) break things and fix it - when 1.7.1 or 1.8?"
2433	1338397268000000	toby	after discussion it has been agreed to keep the existing behaviour and improve documentation as it is likely to break existing applications etc
2434	1341234522000000	seanh	"We've moved to AWS hosting with docs generated by Jenkins instead, see:

http://trac.okfn.org/ticket/1254

There are still two issues to resolve:

1. Automatically updating the symlink so that docs.ckan.org always redirects to the latest stable version

2. Finding somewhere to put links to all the other versions"
2434	1350296272000000	amercader	Seems to be working again, closing.
2437	1338484676000000	seanh	"Please add to the file started to doc/coding-standards.rst

Also, for the Python coding standards see http://wiki.okfn.org/Coding_Standards as a starting point"
2437	1338487089000000	seanh	"I've also added the commit message guidelines as they reference a trac plugin I'm going to get installed.

I'll leave the rest to you.

I remembered that http://wiki.ckan.org/Main_Page has a bunch of pages under Developer Resources that should probably be updated and merged into these coding standards and deleted from the wiki"
2438	1338212234000000	icmurray	"Proposed solution:

Add a new q field which can be specified multiple times.  Each q parameter is a string: `{field}:term`.  `:` characters are escaped in the `{field}` by `\:`.

Mark the `fields` parameters as deprecated."
2438	1340736112000000	icmurray	"Ready to be merged [1]

Brief synopsis of changes:

 - altered return type of the action: from Resource domain objects to dictized resources.  This is required if this action is to be made accessible through the action api as the domain object is not json-serializable.  The 'old' return type is still available by passing in a flag in the context.  In fact, this is required as the search layer uses this action, and deals with the domain objects directly.

 - decided that escaping the ':' (as described in above comments) wasn't necessary as resource fields shouldn't have ':' characters in them anyway.

 - improved action's docstring

 - 'fields' parameter has been deprecated ( see #2603 ).  Use of it by the search layer has been removed in favour of the new 'query' parameter.  But it still works, and correctly maintains backward compatibility.

[1] https://github.com/okfn/ckan/pull/37"
2439	1338214158000000	icmurray	"The `fields` argument doesn't provide any extra functionality that the `query` argument can't provide.

1. Figure out what the reason for this argument is, just to make sure.
2. Deprecate it, and change any internal uses of it to use `query` field instead."
2440	1339421746000000	aron.carroll	"Has some styling as of b0153ba but needs content to be applied.

Toby, can you pull in the top 10 tags, as well as n of the most ""popular"" datasets and n of the most recent datasets. Actually just providing the functionality as helpers would be great.

Do we actually have ""featured"" datasets implemented at the moment?

Not sure what we're going to use for the box on the top left when on a new base CKAN instance."
2440	1339423966000000	toby	"@aron,

tags what functionality do we want for this?  I can just reuse the facet_list snippet but then we have all sorts of interactivity.  Do we want this more a static list of tags (linked to somewhere but no add remove stuff)? seems more sensible I think

featured datasets I've no idea I'll try to discover"
2440	1339430956000000	toby	"you may want to look at your css as the dataset is generated by the package_list snippet

I've made all packages popular for now"
2440	1339497700000000	aron.carroll	Fixed this up, last thing I think we should do is ensure that the datasets passed to the homepage have descriptions.
2440	1339498655000000	toby	"dataset descriptions is a data issue but I'll keep this open for now.  We can probably do an exclude if needed.
"
2440	1339499074000000	aron.carroll	Sure, but this is more about displaying nice complete examples on the homepage.
2440	1339581622000000	toby	I am changing this to assigned not accepted as this makes trac easier to use 
2440	1340373461000000	toby	i'm closing we can make tickets for specific issues
2441	1338287243000000	aron.carroll	Order by needs hooking up to form. Currently it's just a @<select>@ element containing a single entry, it needs the other possible options added. Let me know if you want more details.
2441	1338291362000000	toby	"@aron,

this is now in a snippet (jinja2 allows the selected=""selected"" more easily) needs some work still eg translation stuff and also maybe completely rewrite the snippet at some point.

Anyhow the functionality is there.  I added the button for no javascript working.

I'm assigning to you for beautification etc

on live demo http://s031.okserver.org:2375/dataset?q=&sort=title_string+asc"
2441	1338306828000000	aron.carroll	"There's already a submit button in the form (it's the question mark) it's up for discussion on Basecamp if this is clear, apparently it's not.

I'm going to throw this back to you to implement the popular badges, I'll tidy that form up later. Perhaps we can get a helper such as h.isPackagePopular(pkg) that can be customised on a per instance basis.
"
2441	1338306866000000	aron.carroll	Not question mark sorry, I meant magnifying glass (inside the search box)
2441	1338384362000000	toby	"popular badges on package list - may make them optional/configurable at some point but good enough for now. see http://trac.ckan.org/ticket/2442 for details


With the `order button` this is for none javascript users i'm not sure the magnifying glass looks like the thing to press to reorder the results.  I'd hide it when javascript enabled.  Do what you will

@aron I'm assigning this to you close or reassign to me if you need extras adding"
2441	1339670118000000	aron.carroll	Closing this as the page is up. Issues should be reported as new tickets.
2442	1338302281000000	aron.carroll	"Functionality to be added:

* Group module needs to display group/publisher title, logo and description if dataset has an associated group.
* Popular icon only needs to be displayed if dataset is popular. (say if it has 10+ views for the moment)
* Popular icon needs localised text passed in to snippet (See TODO comment above helper https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/package/read.html#L46)
* Related module needs to show most recent item or fallback content."
2442	1338305764000000	toby	"make readable

* Group module needs to display group/publisher title, logo and description if dataset has an associated group. 

* Popular icon only needs to be displayed if dataset is popular. (say if it has 10+ views for the moment) 

* Popular icon needs localised text passed in to snippet (See TODO comment above helper  https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/package/read.html#L46) 

* Related module needs to show most recent item or fallback content. "
2442	1338379591000000	toby	"popular localised need to get live tracking data and fixup (in progress)

groups now shown including multiple with link to group page

related items I'd like some data for this I'll see if I can add some
"
2442	1338381909000000	toby	"now has actual tracking data

to get data install ckanext-googleanalytics from source
in analytics package dir run 
`paster loadanalytics internal 2012-01-01 -c ../ckan/development.ini`
you may need to change .ini file name

then in ckan dir
`paster search-index rebuild -r -c dev.ini`

It needs a refactor to make it easier to use"
2442	1338383819000000	toby	"new helper function for popular

h.popular(type_, number, min=1, title=None)


just related items left now"
2442	1338477973000000	toby	"@aron,

related items on dataset page has been added it's really basic and just displays the fields that seem useful.  we may need to add the add related item feature first as they are hard to add.

please make it beautiful"
2442	1339670612000000	aron.carroll	Closing, issues should be opened as new tickets
2444	1339669652000000	aron.carroll	Done. Any issues should be created as new tickets.
2445	1338375577000000	ross	Yup. Will look at this Thurs when I'm back in.
2445	1338378161000000	toby	"@Ross you will need to do this based off the feature-2375-demo-theme branch - you can use that branch or one split from it.

new templates want to be in templates/... the old templates live in templates_legacy if you need to copy them across that's fine

talk to aron or I if you need to know anything
"
2445	1338472050000000	ross	Okay, the 303 on validation failure seems a little excessive though given that we're posting to that URL.  Is a 200 okay?
2445	1338472161000000	ross	Am working in feature-2445-add-related-new
2445	1338472624000000	toby	"@ross

the validation error seems correct to use 200

for the created the 303 seems ok but i'd just use pylons redirect myself

Also did aron say we want this as a javascript free add item form"
2445	1338472966000000	ross	He didn't say but I assumed yes given current impl uses dodgy JS->API.
2445	1338473161000000	aron.carroll	"I generally take the approach that a form submitted via POST should always redirect to a page. This prevents accidental user resubmissions when hitting refresh as well as the annoying popup saying ""are you sure you want to re-submit"".

http://en.wikipedia.org/wiki/Post/Redirect/Get

Looking at the rest of CKAN it doesn't do this so I'll leave it up to you. "
2445	1338473309000000	ross	"redirects are fine, of course, but redirect on validation failure seems painful ?

Also templates in templates_legacy?  "
2445	1338474490000000	toby	"@aron I'm fine with the redirect thinking it's just the specific 303 rather than just whatever pylons does.  

@ross, templates_legacy are there for ckan users who have their own templates as we are completely rewriting all the existing templates

there is a lovely .ini setting to switch between the new and legacy modes
"
2445	1338542340000000	ross	"I *think* this is done in feature-2445-add-related-new although I may have missed something, if you could take a look and let me know if it is what you wanted.  

"
2445	1338911121000000	aron.carroll	"Thanks Ross this is exactly what I wanted.

Just wondering about the use of the c.form variable to insert the form into the page. I know we do this with the dataset and groups to support legacy templates, do we need to do this going forward? I'd rather each action just rendered one template and leaves it up to that to render the rest.

Toby, there's a couple of TODO statements in the code where the breadcrumbs need fixing. I think the templates just need access to the package dict.

https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/related/pages/form_page.html#L6
https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/related/edit.html#L5

Also if you generate an error message on one of the forms (leave the title blank) the error string comes out wrapped in quotes. eg. u'title is missing'

Also might be of interest, I've converted the templates to use Jinja, and this is a good example of the conversion.

https://github.com/okfn/ckan/commit/d779addf6e48be67695b35c031393e2d90d8c22f"
2445	1338911190000000	aron.carroll	Oh forgot to mention I've merged the code into feature-2375-demo-theme. We should delete the feature-2445-add-related-new branch.
2445	1338975600000000	toby	"@aron,

this is as good a place as anywhere to answer your question about the c.form thing.

a) some of this we are sort of stuck with.  datasets for example can be of different types and have different forms for different datasets. so they need to be rendered separately.  I have no idea why or how much this is used but it exists as an option to complicate everything, not much we can do about it.

b) I think trying to do pages as a single rendering is not going to be easy because of the way ckan has been created maybe we can change this over time.  One major issue for me is that ckan does lots of crazy stuff for some reasons but these reasons are not apparent from the code.  Maybe there is some documentation somewhere but I'm not convinced.

anyhow we should maybe close this ticket now.  You've added some stuff in the comment for me to do maybe that should be added as a new ticket?"
2445	1338982754000000	toby	closing as todos moved to other tickets and also completed
2446	1352206530000000	johnmartin	I can't get access to said project. Can someone please give me access so I can triage this?
2446	1352658819000000	shevski	gave john basecamp project access
2447	1343377924000000	toby	"@aron,

can we close this as being too general - and have  specific tickets?"
2448	1339669678000000	aron.carroll	Done. Any issues should be created as new tickets.
2449	1339670041000000	aron.carroll	Closing this as the page is up. Issues should be reported as new tickets.
2450	1339670997000000	aron.carroll	Closing this, issues should be created as new tickets
2451	1343378027000000	toby	"@aron,

can we close this as being too general - and have  specific tickets?"
2451	1352206567000000	johnmartin	I can't get access to said project. Can someone please give me access so I can triage this?
2452	1343377943000000	toby	"@aron,

can we close this as being too general - and have  specific tickets?"
2453	1343377952000000	toby	"@aron,

can we close this as being too general - and have  specific tickets?"
2454	1338993375000000	aron.carroll	Implemented the templates for this. There are currently no decent error messages for missing fields, would be nice if we could have more specific error messages. eg. invalid username, username required, password required etc.
2454	1338994536000000	toby	"I am against providing much more that you did something bad

things like invalid username leak info - people should not know if usernames exist.

Maybe I'm a bit mean about this.

I'd be happier to add some javascript check on the form post that checks for no password etc - maybe that's not so practical"
2454	1339431487000000	toby	"@aron,

I'd like to close this as a won't fix - your thoughts"
2454	1339493727000000	aron.carroll	"Hmm, I totally agree with you on the missing username front but it would be nice at least to provide the errors in the same way we do the other forms. Currently it just displays a flash message which is unexpected.

I'd suggest we add a generic ""failed to login, invalid fields"" in the error_summary block. Then more specific ""this field is required"" when a required field is left empty."
2454	1339495000000000	toby	"@aron,

I'm going to leave this open for the moment but not make the requested change as I need to think of the best way forward.  The flash message error is quite hard coded into the logic and I need to think of a nice solution."
2454	1340710442000000	toby	needs discussion and low importance
2455	1338998214000000	aron.carroll	Fixed as of 1dbe4df
2456	1339670080000000	aron.carroll	Closing this as the page is up. Issues should be reported as new tickets.
2457	1352206516000000	johnmartin	I can't get access to said project. Can someone please give me access so I can triage this?
2458	1343596843000000	shevski	Stats important for prototypes & be good to demo a key feature
2458	1343737692000000	shevski	Do we need a design for this? Or can we just use the same format as datahub.io/stats but within the new template?
2458	1343818531000000	aron.carroll	This will be up on s031 by the end of the day for feedback
2458	1344254847000000	shevski	"This looks great. 4 small things:

1. clicking on a tag in 'top tags' takes you to old unstyled page, e.g. http://s031.okserver.org:2375/en/tag/economics. Should take you to search faceted by that tag.
2. I'd love to be able to link directly to e.g. the 'top tags' view - any way to do this?
3. Is there any way to rate datasets at the moment? If not, can we hide that option for now?
4. On 'Revisions to Datasets per week' can we rename this 'Dataset revisions per week' and can we change the orange icon/index in the table to 'all dataset revisions' instead of referencing 'packages'
"
2458	1344262256000000	aron.carroll	"Made changes as of 9729f1c

 1. Clicking a tag now takes you to the search page
 2. When clicking the tabs the location now updates so you can bookmark pages.
 3. Not sure how datasets are rated.
 4. Text changes made."
2461	1344543838000000	toby	stop the error
2464	1338910189000000	johnglover	Fixed for now, but had to keep group type as 'organization' as the string is hardcoded into the publisher auth profile in 1.7.1.
2466	1338467285000000	seanh	Looks like we need to upgrade to Trac 0.12 and then install this plugin: http://trac.edgewall.org/wiki/SpamFilter
2467	1340981885000000	amercader	Fixed (mainly by Aron)
2468	1339757934000000	rgrp	DONE. (Closed on github)
2469	1340639702000000	seanh	Closing this, has been broken down into individual tickets, see ckanbuild milestone
2470	1338284041000000	johnglover	"Search results validated against schema.
    
Added a class implementing IPackageController, in after_search results are replaced with package dicts got from package_show. A bit heavy-handed, but works for now. Maybe we should just call package_show in the package_search logic function in core?"
2471	1352206679000000	johnmartin	I can't context on this. Closing.
2474	1338982780000000	aron.carroll	"Closing this as we've decided to go with Jinja.

There's some basic docs here:

https://github.com/okfn/ckan/blob/feature-2375-demo-theme/doc/templating.rst

And a template overview:

https://github.com/okfn/ckan/blob/feature-2375-demo-theme/doc/template-blocks.rst

Generally it's worth looking at the Groups pages to see how they're built.
"
2477	1343124123000000	seanh	See thread on ckan-dev for list of officially supported non-core extensions: http://lists.okfn.org/pipermail/ckan-dev/2012-June/002439.html
2479	1338468431000000	markw	An alternative (and better, but harder) way of dealing with the 'maintainer' issue would be to allow messages to be sent between CKAN accounts, and to have a field whose value is the maintainer's login.
2484	1340013145000000	toby	"merge requested

https://github.com/okfn/ckan/pull/17"
2484	1340285964000000	toby	merged into master
2487	1338892521000000	johnglover	https://github.com/okfn/ckanext-ecportal/commit/958208cfec1dfddb792b9b0ce0ac835fb1e2872a
2488	1339412538000000	johnglover	"Works for me on 1.7.1.

Perhaps floapps was using older groups (of type 'group' instead of 'organization') and/or didn't add a user to the group?"
2491	1338979614000000	toby	fixed by commit  e6554e7
2493	1338986768000000	aron.carroll	Editing ticket title (sorry Toby I know you hate it)
2493	1342774354000000	toby	"@aron,

I've removed the breadcrumb and got it to eat flash messages as these tend to be repeated at least
for some actions - maybe the flash messages is overkill.


Anyhow I think it's good enough for phase 3 and we should either say it is done or move to phase 3

I think this would benefit from some design from Sam at some point and I quite like a graphic on an error page to make it a little pretty but not any rush"
2494	1338994890000000	toby	this was due to out of date version of demo branch - updated
2495	1340624905000000	amercader	See #2467
2496	1339418832000000	toby	fixed in demo branch
2497	1339085489000000	toby	yes is ckan 1.7 issue
2498	1339660986000000	toby	fixed in the demo branch
2502	1339407123000000	toby	"{% snippet 'template_name', var=value, var2=value ... %}

{% url_for(controller='foo', action='bar', ...) %}

let me know if you want these changed eg remove need for () in url_for

merged into demo branch they are just available in jinja templates no need to do anything special

Let me know any problems or if you need some others added "
2502	1339493182000000	aron.carroll	"Works beautifully. Be great if we could remove the parens around url_for and add an extra one for h.nav_link but I think call it link_for instead.

{{{
{% url_for controller='foo', action='bar', ... %}
{% link_for controller='foo', action='bar', class='btn', icon='plus'... %}
}}}"
2502	1339494853000000	toby	"url_for no longer needs ()
link_for added but not tested - pretty certain it will just work"
2503	1339495333000000	toby	"@aron,

To clarify this a bit.

We want this so that a extension can create a new template say dataset/read.html but rather than rewriting the `core` template in ckan it can extend it in the same way as {% extends %}.

The main difference is that {% ckan_extends 'template.html' %} would `walk` the ckan template tree rather than the extensions template tree.

Is that what we are thinking?"
2503	1339498751000000	aron.carroll	Toby yeah, that's exactly it.
2503	1339580675000000	toby	implemented in commit 14067ff
2504	1339409776000000	aron.carroll	Closing this as there are just snippets remaining now and they're a lower priority.
2507	1339436591000000	aron.carroll	Fixed as of 2a5714b, pull request here: https://github.com/okfn/ckan/pull/22
2507	1339596399000000	seanh	merged
2509	1339419867000000	johnglover	https://github.com/okfn/ckan/pull/20
2510	1339516414000000	toby	"ok I've done this and also unified the tags

they are now tag/class

{{{
<ul 'tag-list'>
<li>
<a 'tag'>
}}}

on home page tag was on <li> not <a> slightly changes the spacing please review"
2510	1339670520000000	aron.carroll	Looks okay to me
2511	1339517817000000	aron.carroll	Fixed in b24d162
2512	1339576809000000	toby	This seems to be working now
2513	1340187230000000	ross	Have pushed back to 1.9 but if may be the the converter service will replace it in the meantime.
2514	1340959630000000	ross	I'm going to close this as it is not safely in Aron's hands for the new demo theme.
2514	1340959787000000	ross	s/not/now/ stupid keyboard
2519	1345565215000000	ross	Fixed by pull request from jpmckinney
2520	1340624831000000	seanh	Also see #2370
2523	1339679814000000	aron.carroll	"Added in 4f6d8b9

Toby, there's no form data being passed to this page yet, could you add that in?"
2523	1340368036000000	toby	there and working
2527	1339683264000000	toby	Do we have a specific usecase for this?
2527	1340116130000000	aron.carroll	Closing as this has been superceded by #2553
2528	1339687025000000	aron.carroll	Now implemented as of bc440d5. Doesn't seem to be successfully submitting, has something been setup wrong?
2528	1340380415000000	toby	"fixed in  109ec86

what else are we wanting with this?"
2532	1340874456000000	toby	see void now
2534	1340631124000000	amercader	See #2399
2536	1339770953000000	toby	"minor changes

All links now go to the item - before deleted ones didn't.  while this makes sense it is inconsistent and adds complexity.

Some wrapping spans eg <span class=""object"">.. have been removed again these add complication and feel wrong given the issues of i18n 


PS: why messing with my tickets???

"
2536	1340038712000000	toby	https://github.com/okfn/ckan/pull/25
2536	1340899218000000	toby	This need some changes to make it possible to add new activity stream bits - will look at doing for 1.9
2545	1344337973000000	ross	Up at http://datagm.ckanhosted.com
2548	1340626532000000	ross	Accepted to clarify requirements
2549	1350561840000000	seanh	Closing as we've gone forward with a different solution instead
2550	1340626589000000	ross	Clarify
2550	1341767370000000	icmurray	"I've done some initial work on this.  I think the best way is to define extra tables in the datahub extension.  (Rather than: using groups; or modifying the user table; or defining extras for users (in core)).

Initially, I've created a new domain object, PaidService, which captures the different levels of account a user may have.  And then attached users to this through a secondary table.  I think the advantages of this approach are:

 - the PaidService table can contain supplementary info about that account type: eg - amount of storage allowed; or cost to sign up etc...
 - allows us to use a modular payment system if biz decide that would be favourable. ie - users belong to multiple PaidServices which are independant of one another, rather than a linear hierarcy (eg - ""sign up for storage, but not for privacy"" vs. ""sign up for enterprise level rather than basic level"")

The thing that's held me up today is being able to run tests: I'm having a sqlalchemy issue with defining extra mappings on the User table; which then gets dropped when initializing the test setup.  I've gotten to the bottom of the problem, and will ask kindly's advice.

In the meantime, I could do with some user stories please.  I think I have a fairly good idea of what's likely to be needed by this ticket; but to what extent should this be exposed to a sysadmin (adding payment schemes; adding users to payment schemes; users seeing which payemtn services they're paying for (public to other users or not?); user's seeing history of payments?  sysadmins seeing list of users for each service level?) - should this be: through a dashboard?  through paster commands?  through the api? all 3?

Do we want modular payments or a linear hierarchy of payment schemes?

How does is this suppossed to fit in with organizations?  Do organizations purchase on behalf of users as well as individuals being able to make purchases?

Do we need to be able to deativate a user's paid service if their payment hasn't come through?"
2550	1341833460000000	ross	I think you've nailed the user stories already, but have added them to Description to be explicit.
2550	1342535924000000	rgrp	Sounds good. BTW all users stories if at all possible go in google docs now for permanence. Here is the template: https://docs.google.com/document/d/1U5yahDrvp_PKQMNjzI_8u3xixnALf4eNZWK2BdTXOVw/edit
2550	1342699856000000	icmurray	Awaiting merge: https://github.com/okfn/ckanext-datahub/pull/1
2550	1346669497000000	ross	Reassigned to icmurray rather than back to backlog.
2551	1343042712000000	johnglover	"All done (in master and release-v1.8 of ckanext-googleanalytics), with the exception of the download and data api buttons which should be tracked already in download stats.

Untested, but will probably remain so for the near future at least as this doesn't seem to be a high priority any more."
2552	1340626635000000	ross	Clarify
2553	1342090078000000	toby	different implementation but same effect
2554	1342518917000000	ross	Python based cartridges rely on the virtuoso python hosting, which appears to be broken on my self-built open source version.  This is likely to take a lot of time fighting with build setups.  Going to delay this.
2554	1344338036000000	ross	Reducing the priority of this at present, may become more relevant after the LOD3 plenary
2554	1346670433000000	ross	Shelved until LOD plenary/funding found. Longer term plans for an LOD hosted triplestore may make this unnecessary.
2555	1340373267000000	toby	non urgent moving milestone
2556	1340212090000000	aron.carroll	Fixed in 2b3b005
2557	1340185609000000	aron.carroll	Fixed in 123b914
2558	1340188906000000	aron.carroll	Started this as of 4d3c87a however tags need to be hooked up (apparently they can only be added on update at the moment). Also by moving the groups to the metadata form I now get integrity errors while saving. Toby could you please take a look at this.
2558	1340271359000000	toby	"@aron,

not quite sure what your problem was.  I had an integrity error on part 1 save which is fixed.

my issues

1) part 1 tags not saved

2) part 2 resources not saved

3) part 3 no form shown - i thought you had one showing where did it go?

will look at 1 & 2 for starters"
2558	1340280814000000	toby	1) tags save but don't show in dataset edit - will push fix soon
2558	1340284495000000	toby	"2) resources save but not sure if being validated etc needs testing but working to an extent

@aron,

I'm pushing this back to you now reassign as needed"
2558	1340301273000000	aron.carroll	"Metadata is back as of b20538f

Groups currently aren't showing because the {{{c.groups_available}} param isn't available.

https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/package/new_package_metadata.html#L7"
2558	1340359174000000	toby	groups available now is a helper function (templates updated) commit d0506f3
2558	1340367843000000	toby	"@aron,

metadata now saves pushing back to you - in branch"
2558	1340615257000000	aron.carroll	Marking as fixed. Will create new issues as they arise
2559	1340617445000000	aron.carroll	"This is looking good. A couple of things to do.

 1. Added resources should be displayed in the sidebar. See https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/package/pages/form_page.html#L36
 2. Clicking ""previous"" needs to take you back to the add dataset action not the edit dataset action.
 3. Clicking ""previous"" should take you back to stage one of the add dataset form but stage two should be active (green).
 4. Clicking ""previous"" should take you back to stage one of the add dataset form then clicking next should take you to the last resource you were editing.

"
2559	1342084940000000	toby	I'm closing this now we can open tickets for bugs when we qa the add dataset
2560	1340617540000000	aron.carroll	"Clicking ""previous"" should take you to the last edited resource.
Clicking ""previous"" should take you to the last edited resource but stage 3 should remain active.
Clicking ""previous"" should take you to the last edited resource, clicking next should take you to stage three with the same data as when you went back."
2560	1342084988000000	toby	again closing any problems can be bugfix tickets
2562	1342090168000000	toby	"@aron,

assigning to you so doesn't get lost

let me know if you need anything from me for this"
2562	1352206599000000	johnmartin	I'm closing this because I can't get context on this.
2563	1340106310000000	aron.carroll	Done in 73fe36c
2564	1340118952000000	aron.carroll	Fixed as of df8f82c
2565	1340116053000000	aron.carroll	Social links open in a new tab as of bb41d86
2566	1340119694000000	aron.carroll	Buttons are added in d15cf6f. Toby could you hook these up with appropriate routes.
2567	1340120404000000	aron.carroll	Fixed in 2564dfd
2568	1340108132000000	aron.carroll	Fixed in 4d3cd87
2569	1340123360000000	aron.carroll	"Templates added in 4e84622

Toby, the implementation in the resource form needs data passing to it.

https://github.com/okfn/ckan/blob/feature-2375-demo-theme/ckan/templates/package/pages/form_page.html#L35-36"
2569	1340362284000000	toby	"@aron,

which page is this on?  can you add a url - cheers"
2569	1340375156000000	toby	i'm assuming this is the add data part 2 add dataset form
2569	1340375595000000	shevski	Ticket itself is for resource pages, e.g. http://s031.okserver.org:2375/dataset/afterfibre/resource/f5d81da5-2e55-4302-8ed2-58401d2c139e - there are two other resources in that other dataset, should be able to navigate between
2569	1340376578000000	toby	"@ira,

that's fixed in the dev branch just not pushed to demo

we need the one i've suggested too"
2569	1340877069000000	toby	There is now the list in the sidebar but it points to view resource not edit - that will be part of phase 2
2569	1340878031000000	shevski	"Great!
Can we change it so that the resource name (if available) displays instead of the URL?"
2569	1342085235000000	toby	edit resources in add dataset is done anything else is a new ticket
2570	1340107841000000	aron.carroll	Closed in a3939a4
2571	1340369783000000	toby	this works so closing
2574	1342008841000000	toby	david I think this is a closed as we are using state= draft stuff
2574	1342092416000000	toby	this is all sorted so closing
2575	1340184557000000	toby	"@adria,

Do you have a url or some more info as I can't reproduce this"
2575	1340188954000000	toby	wtf I never added that I did write in an hour ago f****g trac
2575	1340899487000000	toby	"This should now have a fix

do a proper fix for 1.9 - needs a more thought out approach and quite a bit of re-factoring of that bit of code"
2575	1343216544000000	toby	merged for 1.8
2576	1340300413000000	aron.carroll	Fixed in fbeda87
2576	1340369674000000	toby	"@aron the resources sidebox is still broken

breadcrumb is fixed though"
2576	1340617688000000	aron.carroll	Fixed proper in 4bf158b
2577	1346669735000000	ross	Better info was provided by jmckinney
2579	1340899337000000	toby	This can move to 1.9 as will need agreement to be merged
2580	1342092353000000	toby	I'm closing this as now you need to add at least one resource
2581	1340287539000000	toby	"do before

data.pop(key)
"
2581	1340369369000000	toby	"fixed in commit 0f84d99  in the demo branch

david can you just look at this for a sanity check - I'm just concerned that only state benefits from this

if good reassign to me and i'll remove the fixme"
2581	1340711431000000	kindly	This looks fine, just make doubly sure that if this flag is set then whatever sets it explicitly sets the state i.e overrides what the user sent.
2581	1340714955000000	toby	"@kindly

we actually need an extra state for full functionality can we create a new 'draft-complete' state as well?  does that need any additional magic?

please answer and reassign"
2581	1340728155000000	kindly	No any state without active, pending or deleted in their name is fine.
2581	1340800263000000	toby	part of add dataset stages
2582	1340313961000000	rgrp	As this has been a serious UX issue for a while and it may take a while to be fixed I've taken the temporary step of fixing this directly on the datahub.
2583	1342086274000000	toby	moving to phase 3 as really a review of our code type stuff
2584	1340620576000000	aron.carroll	Implemented in 9bebf3d
2587	1340375763000000	shevski	If we have a name then yes, should be even without link.
2587	1340376975000000	toby	fixed by 99d14bd
2595	1342086346000000	toby	yadda, yadda, yadda - this should all be done any bugs are new tickets
2596	1345209485000000	toby	closing as too vague and probably done
2598	1340875020000000	aron.carroll	Fixed in 8dc7c56
2599	1340798251000000	aron.carroll	This is still broken in IE7 as of 543954b but pretty good in other browsers.
2599	1346236806000000	johnmartin	FYI: My methodology for getting the demo working in IE7 will be: get it functioning and not get it perfect
2599	1346756230000000	johnmartin	This is now closed and waiting pull request merge back in.
2600	1340721815000000	ross	Should do this as part of #2548
2601	1340723256000000	seanh	I think this happens whenever you try to edit a dataset that has no organization
2601	1340960128000000	ross	We've taken steps to make sure that users can't add datasets without a group, and can't remove a dataset from a group (without deleting it).  Will submit patch to restrict adding without group.
2602	1340805904000000	ross	After merging the 2601 fix the user can no longer set None as the group/organisation for a dataset
2605	1340874110000000	ross	"Seeing *very* strange behaviour here with the tests working fine when run individually, but when run as part of the entire suite it is returning an old group (called david) that is NOT in the database (set breakpoint, queried db, not there).

Hoping Mr Raznicks sqlalchemy skills will be able to see what is going on with this."
2605	1343126767000000	ross	Make a decision on how we can test this cleanly and get it into 1.8
2605	1343127369000000	ross	Code for the CTE fix is in master ready for 1.8 branch.
2608	1343125400000000	seanh	This seemed to be a problem in Firefox only and only when a certain Firefox extension was enabled, nothing quite got to the bottom of it, not worth fixing given the obscureness and difficulty
2609	1340900271000000	toby	fixed in demo branch
2610	1341501424000000	aron.carroll	Replaced by #2611
2611	1342008509000000	aron.carroll	Done aside from Change 'Groups' to 'Publishers' everywhere which is now #2658
2612	1342005674000000	toby	is this still valid?
2612	1342005971000000	shevski	This seems to be fixed, but needs proper testing
2612	1342007335000000	toby	"cool close when you are happy or reassign if you find it broken somewhere

I'm moving this to phase 2 "
2612	1342714613000000	shevski	All looks good for now. Need to review authorisation stuff as part of demo 3
2614	1343685572000000	aron.carroll	Done in 71aca07. Moving paster to a seperate ticket.
2616	1352206282000000	johnmartin	Old and not sure of context. Closing.
2619	1340884739000000	seanh	A thought about efficiency, you probably don't want to pass all the activities through the filter function since only the most recent 15 will be shown anyway. Suggest a filter function with an optional limit=15 argument, you pass it the whole activity list and it iterates over it until it has found 15 public ones then immediately returns those.
2619	1346670257000000	ross	"Have a push request with a privacy flag which might be useful in determining the status of the dataset (public/private) but no idea if it will be accepted yet.

Have assigned back to you for safe-keeping so it doesn't get lost in backlog."
2619	1351531137000000	seanh	I think we need a function that filters out all activities and activity details where the user doesn't have permission to read either the subject or object of the activity or any of its activity details. Each of the *_activity_list() functions can then use it.
2620	1342074737000000	toby	This got fixed at some point
2623	1341232433000000	seanh	Works if you remember to enable publisher_auth (the Authorization button never appears, Join is always there, can Edit the org and add users that way)
2624	1341583610000000	seanh	Moving into 1.8 and making high priority, needed for cmap
2624	1341599776000000	ross	Is likely just tags missing from the new schema in organizations.  Will add/test etc on Monday AM.
2624	1341609814000000	seanh	Thanks Ross!
2628	1343392717000000	seanh	Already done on another ticket, closing this as dup
2629	1343392596000000	seanh	New ticket #2771 encompasses this and related changes, closing this one as a dup
2630	1343392411000000	seanh	I made another ticket (#2771) to encompass this and related work, closing this one as dup
2631	1352205778000000	johnmartin	This has been fixed with the LOD2 work on activity streams.
2632	1342087027000000	toby	merged
2634	1342085656000000	toby	merged into master
2636	1342090614000000	toby	duplicate of http://trac.ckan.org/ticket/2631
2637	1342617226000000	toby	fixed
2638	1342112772000000	toby	merged
2639	1343297711000000	amercader	"Merged into master before 1.8.
There are a couple of issues with that need to be fixed on recline code base:

* Filter does not fire the state change event (Embed URL does not get updated)
https://github.com/okfn/recline/issues/195

* File format not saved in Dataproxy state (Embed fails with dataproxy files with no extension) 
https://github.com/okfn/recline/issues/196

When we fix these on recline we can update the build on ckan core."
2639	1345125290000000	rgrp	#196 is fixed. Not sure about #195. Otherwise think we are good to go.
2639	1345125344000000	rgrp	There is also an additional issue which is that recline no longer uses elasticsearch_url so we will need to patch this either in js or in the controller code for the embed ...
2639	1345146087000000	rgrp	Also found that previous recline setup used elasticsearch_url in recline 'state' (dataset part) when generating embed_url for dataset. But recline no longer supports this so move to url attribute of dataset attribute of state.
2639	1345146289000000	rgrp	"Port of fix for recline issue 196 in https://github.com/okfn/ckan/commit/fd1abd9d5701b4addf7e709c1766d6ffed1bb8bf

Fix of embed issue in https://github.com/okfn/ckan/commit/fd1abd9d5701b4addf7e709c1766d6ffed1bb8bf"
2639	1345221501000000	amercader	"Added some new comments to #195:

https://github.com/okfn/recline/issues/195"
2640	1342092306000000	toby	moving to phase 2
2641	1343737625000000	shevski	Design here: https://okfn.basecamphq.com/projects/9558659-demo-ckan-front-end/posts/65443876/comments
2641	1343738074000000	amercader	"It looks awesome, really nice!

Note that the ""Enter location"" box logic (geocoding) is not yet implemented, so first stage of the widget should not show it.
"
2641	1352206794000000	johnmartin	I can't get access to the project... can someone link me?
2642	1342092375000000	toby	moving to phase 2
2642	1344243797000000	shevski	Would like to have this for next week for a demo if possible
2642	1344601299000000	toby	"@ira,

can you review this http://s031.okserver.org:2375/harvest

The add/edit form isn't perfect

I have no idea how to use this extension so my testing has been limited

make a new ticket for any problems - Also for now we only care about major issues

@adriá

would be nice if you could also see if it's working correctly"
2642	1345113645000000	shevski	done
2644	1343925546000000	aron.carroll	Updated the theme in 2b81958, seems very similar in functionality to the profile page...
2644	1344255836000000	shevski	"I think this requires some thought & probably a discussion.

For example need to be clear on the purpose of a user dashboard vs say a publisher dashboard. I image a publisher dashboard would have the stats to datasets belonging to that group (e.g. views, downloads, comments, shares, ratings), issues reported (when we get that extension working), call to action to add a new dataset (that adds it to the group).

User dashboards I'm less clear about. May be we can talk about this on Tues/Wed? Or skype today"
2646	1342014170000000	toby	fixed in 2375-demo-theme-development
2647	1342169056000000	toby	"@aron this button is now working on core

http://localhost:5000/dataset/newcastle-city-council-payments-over-500/resource/0c2bd47a-6ac5-412e-a337-1b45a952e07e

please note it is hidden in ckanext-demo also your `modal` think stops the link working - can you get it so that we open the href in a lightbox or somesuch.

Also for now whilst waiting for the modal stuff to be implemented it'd be nice if it didn't block the link"
2647	1343229185000000	aron.carroll	Modal stuff is in.
2648	1342517191000000	aron.carroll	Assigning to Ira to QA
2648	1342714659000000	shevski	done
2651	1341930964000000	ross	"The pull request at https://github.com/okfn/ckan/pull/60 resolves the problem with the dataproxy (which has also been updated to handle .tsv files).

Still need to fix datastore."
2651	1341935288000000	ross	Need to update messytables and ckanext-datastore to make sure we can process tsv and store the data as tabular data in the datastore.
2651	1342084112000000	ross	Messytables has been updated. A new branch for ckanext-datastorer has been created, hoping to get someone with a fully working setup to help test.
2651	1342440899000000	ross	Have assigned to icmurray to test
2652	1343378442000000	toby	this should sort some resource format issues
2653	1342005167000000	toby	config issue resolved
2654	1343126740000000	ross	Has a dependency on the new themes.
2657	1342008765000000	toby	fixed by aron
2658	1343378208000000	toby	"@aron,

If we are doing this then we should just get it done asap.

I have to say I think it sucks as an idea as I know what a group and a publisher is in english and we have groups.  I'd like this  a wontfix"
2658	1343378309000000	toby	the mor i think about this the crapper it seems wtf - can we just close it and hope it goes away?
2658	1352205894000000	johnmartin	This is now invalid due to the work with orgs.
2659	1342022519000000	toby	looks like one for you aron
2659	1342089310000000	aron.carroll	Fixed in 9ff7a9b
2660	1342011096000000	toby	not reproducable
2660	1342090270000000	toby	this is sorted in master
2660	1342090301000000	toby	well not master but 2375-demo-theme-development which is good as
2661	1342014327000000	toby	"@aron,

we only can delete - see button if we have permission

if you make logic/auth/delete.py package_delete() return {'success': True} then it will give everyone the permission - useful for testing
"
2661	1342092578000000	aron.carroll	"Styled in c165639

Toby, it would be good to display a flash message once the dataset has been deleted."
2661	1342515034000000	toby	"@aron,

flash messages added

I've changed these to being done via form

javascript action:

on click delete button display dialog

confirm -> set hidden input name=confirm_delete value -> ""yes"" submit form

no -> stop form submit


hope that makes sense if not shout

need this for dataset/group will also need for resource/related at some point soon"
2661	1342524525000000	aron.carroll	Implemented in d980ec7. But we really need to go over the delete implementation as it could be much cleaner.
2661	1342685899000000	toby	"@aron

can you change this so that we now post to the href if confirmed

should then work for group, dataset, related

resource will pretend to work but not actually delete yet"
2662	1342018898000000	toby	this was actually an issue with form error anyhow fixed in both 2375 branches but needs pushing to the server
2664	1342181774000000	toby	branch 2664-tag-errors has some ideas - how do we deal with whole errors issue
2665	1342077077000000	toby	@aron I've done some of this I'll reassign to you when I'm done
2665	1342079165000000	toby	"@aron,

ok if you now pull 2375-demo... you will see I've moved the stages into the form and added some buttons - this should now be stable and ready for you to style"
2665	1342088650000000	aron.carroll	Fixed in fe1d9ec
2667	1342431877000000	aron.carroll	Okay added the form and created a pull request for this feature. See https://github.com/okfn/ckan/pull/68
2667	1342456802000000	toby	"@aron can you merge your branch into 2375-demo-theme-development - there are conflicts so i can't do a `git am patch`

then reassign thanks"
2667	1342525152000000	toby	"@aron,

Almost got this sucker - can you add an error summary to the top of the form - put in a crappy date to trigger an error

do that the close this unless you find something"
2667	1342530810000000	aron.carroll	Done in 63c193e. Assigning to Ira for QA
2667	1342714769000000	shevski	Waiting to see http://trac.ckan.org/ticket/2706 done
2667	1342773124000000	toby	@ira #2706 is done maybe this can be closed now
2668	1342172855000000	dread	Fix done, ready for pull into core: http://github.com/datagovuk/ckan/commit/7da4aba97639ac29642548f7fcdb1a50d6bce027
2668	1343130433000000	ross	Hmmm. dread, are you merging these into master yourself? 
2669	1343597264000000	shevski	I think they should be slightly greyed out. More importantly they should be hidden to everyone not a member of ownership group
2669	1343907572000000	aron.carroll	It's a nice blue tag now.
2670	1342435186000000	ross	https://github.com/okfn/ckan/pull/69
2671	1345209579000000	toby	I believe this is fixed in master/2375
2674	1342456931000000	toby	"this is some elastic search / nginx type issues - to be honest I know nothing about this.

niether are setup on s031 and our documentation didn't help much"
2675	1342461534000000	aron.carroll	Fixed in 9dbf936
2676	1342461123000000	aron.carroll	Does this actually offer any benefit over just visiting the related data page?
2676	1342512315000000	shevski	Yes. Not as important as getting functional bits of JS working, this is a pretty 'nice to have' that I think will bring value.
2676	1352205920000000	johnmartin	Fixed in master
2677	1342461576000000	aron.carroll	Fixed in f8da5b7
2678	1342461370000000	aron.carroll	I don't think there's actually any logic in CKAN to let you delete a related item at the moment. So assigning to Toby to take a look.
2678	1342512234000000	shevski	Worth checking with Ross on this
2678	1342512362000000	toby	No need it exists
2680	1342459451000000	toby	"@shevski,

delete button implemented on demo-development

reassigning to you till we decide on any rules - any decided should be added as new tickets and then close this one - chhers"
2680	1342529500000000	shevski	"Okay thanks.

Can we undelete groups?"
2680	1342541256000000	toby	we can do anything however in my opinion admin stuff like that should be phase 3 as not/really needed for the demos
2680	1344509493000000	toby	"closing this ticket as remaining work too vague

undelete group added as #2830"
2681	1342461453000000	aron.carroll	Okay, is format supposed to be a mime type eg. application/json, text/csv etc or a straight file format?
2681	1342512160000000	shevski	"I think just a file format, but want other perspectives. What do you think?

& David: what do you think?"
2681	1343115619000000	toby	"This should be just `basic` formats

csv html xls etc it's for non technical and what we output with the resources"
2681	1343135874000000	aron.carroll	Dupe of #2696
2682	1342447364000000	seanh	"Note that this commit fixes the double-counting for page views:

https://github.com/okfn/ckan/commit/5739818a528bb16748f67b6d57a16f575ae78144

but not for resource downloads (which look like they could have the exact same fix) but I'm not particularly happy about the fix because I don't fully understand the SQL.

It still needs unit tests and to be fixed properly, for both pages and resources"
2682	1342545573000000	seanh	Talked with kindly, seems the above fix is correct and should be applied to resources as well
2684	1342539637000000	aron.carroll	Implemented in 9ae7f13
2687	1342534855000000	aron.carroll	Fixed in 0a7f05e
2689	1342617293000000	toby	fixed on s031
2690	1342542394000000	aron.carroll	Improved spacing and alignment in 679e2d0
2691	1342538699000000	shevski	"Also weirdly after I removed all text from the tag field and clicked on 'next: add data' i got an 

404 Not Found
The resource could not be found.

Dataset not found

error message"
2691	1342541384000000	toby	"@shevski

closing as a duplicate http://trac.ckan.org/ticket/2664


- if you can work out how to get that 404 error please create a new ticket explaining how to reproduce - thanks"
2691	1342542047000000	shevski	"I can replicate the 404 error. Follow steps below

1. Click on add a new dataset
2. Name it and put an incorrect character in tag field ""e.g. "" :""
3. Click on 'Next: Add Data'
4. Error message shows, wipe tag field (i.e. delete "" : "" until field is blank
5. Click in 'Next: Add Data"" again"
2691	1342604273000000	toby	fixed and cherry picked into stable
2692	1342617328000000	toby	fixed on s031
2695	1343057477000000	aron.carroll	"This is up on s031 for QA. http://s031.okserver.org:2375/dataset/new

Ira please QA."
2695	1343059199000000	shevski	Looks good. Anything we can go about slowness? If i type & hit enter too quickly it doesn't catch the last 1/2 characters?
2695	1343121866000000	shevski	"I got a server error once updating long tags, but can't reproduce.

Look fine apart from slowness already mentioned - anything we can do about that?"
2695	1343138217000000	aron.carroll	Closed as of b661e75. Further improvements can be created as new tickets
2696	1343065979000000	aron.carroll	"Ira this is up on s031 needs some QA, I'm also going to be working on it tomorrow.

http://s031.okserver.org:2375/dataset/new_resource/my-awesome-stuff

"
2696	1343121485000000	shevski	"Tested.
Issues are http://trac.ckan.org/ticket/2737 and http://trac.ckan.org/ticket/2734

Also just to check: does the autocomplete only look through existing tags or things previously typed too? Should only be existing tags."
2696	1343138454000000	aron.carroll	Closing this ticket. Only completions returned by the CKAN API are shown (which are existing formats I believe)
2698	1343378378000000	toby	I think this would be really helpful/nice
2698	1343914688000000	aron.carroll	"We need an api endpoint that can render a markdown string on submission.

 * Client posts a string of text to the endpoint.
 * Server responds with a 200, text/html response containing the rendered markdown.
 * Server returns a 400 and empty body if the content is not valid markdown.
 * Server returns a 500 and empty body  if something else crashes.

Alternatively for better error handling we could use a JSON transport.

 * Client posts a blob of json containing a ""content"" key with the markdown string.
 * Server returns a 200 (application/json) and blob of json with a ""content"" key with the rendered markdown.
 * Server returns a 400 (application/json) and blob of json with a ""error"" key containing a useful message for the user.
 * Server returns a 500 (application/json) and blob of json with a ""error"" key containing a useful message for the user.
"
2699	1342788074000000	toby	We should look at this next weekish
2699	1343597746000000	shevski	"Groups & auth notes:

Datasets have an owner 
Dataset owner must be a group (not users) 

Actions on dataset are:
   Create: any logged in user who is a member of a group may create a dataset
Choose which group will be owner on create page
   Read (determined by public/private flag on dataset). Private means only readable by members of owner Group
   Edit: any member of the owner group
   Admin: (change state, change owner) only can be done by Admins of owner group

Resources: inherit permissions from dataset  
  
Groups:
   Create: Configurable whether creatable by any logged in user or just by sysadmins
   Edit: only group admin
   Read: public/private flag on group (?)
   Admin: (delete, update members / admins) Admin of Group

Groups have users with roles/capacities on the group
	Admin
	Member

System-wide sysadmin (boolean flag on your user account) who can do anything"
2699	1344507133000000	toby	"@ira,


This is probably void now due to yesterdays dev meeting but will keep alive - moving out of phase 3 as not happening anytime soon and dependent on ross's organisation work 


will probably move to ckan 2.0 milestone"
2700	1343378577000000	toby	"auto submit done

@shevski

can you elaborate on the other issues else will close this ticket"
2700	1343580145000000	aron.carroll	Needs pretty little flags, I think that's it.
2700	1343914288000000	aron.carroll	Added the flags in 06257ac. Ira can you sanity check that the flags are all correct. I need to get a proper German one from Sam as he used a European flag in the mockup.
2700	1344244373000000	shevski	"Language names should all start with a cap letter, seems random currently.

Slovenia flag (last one) missing a shield

Is the Suomi just Finnish? May be a darker blue. 

I would find some pointers useful: e.g. ""Shqipe (Albanian)"""
2700	1344245069000000	toby	"@ira,

languages are in their own language Capitalisation is English Imperialism so I think we shouldn't do this"
2700	1344254979000000	shevski	As long as languages are actually in their own standard of capitalisation, i don't mind. currently looks random
2700	1344256383000000	aron.carroll	Okay could you give me any pointers you want to add. Plus ask Sam to create a flags for the missing countries. Cheers.
2700	1344258748000000	toby	"@aron,

re flags it'd be nice to have more as the languages are not so fixed maybe that's too much work for this phase and is more wishlist

@shevski,

The language capitalisations should be correct they are from babel not us anyhow"
2700	1344358941000000	toby	"@aron

you should have the flags close if complete"
2700	1344505614000000	aron.carroll	Cool, done in bf23242
2701	1343920287000000	aron.carroll	"I've updated the disqus extension (in development branch) and added the snippet to the development branch of the demo plugin.

Toby, not sure about the way the disqus plugin is implemented via a helper vs the spacial plugin using a snippet. Would be good to decide on the ""one"" way to do this."
2701	1343920314000000	aron.carroll	BTW moved this to phase three as I consider it done.
2701	1343949850000000	toby	"> Would be good to decide on the ""one"" way to do this.

As the new extension guru/deity I say helper functions are the future - my word is the law


a) a missing helper just returns '' so they can be added to templates even when not implemented, a missing template gives a 500


b) helper functions hide the implementation which I think is a good thing


c) helpers are just soooooooo cool - plus they are new and shiny (what am I saying?)


As far as moving the phase I'm not too fussed we can be ahead on phase 4"
2701	1343949913000000	toby	track is shit - missing helpers return `''`
2702	1343378761000000	toby	"@shevski

can you rewrite this tickets so i can understand it - also is this several tickets?"
2702	1344255984000000	shevski	this is just a placeholder reminding me that need to create these tickets. Will pick out the main things and close this eventually
2703	1342624713000000	aron.carroll	Just needs a new action that loads the same resource_form.html template with an empty stages array.
2703	1342687332000000	toby	created on dev branch
2704	1342707398000000	toby	"@ira,

again not sure this makes sense from a ux perspective

@aron,

reassign to me if you want it doing should be trivial"
2704	1342709081000000	shevski	Not an ideal UX solution, but important in the interim!
2704	1342710830000000	toby	"@ira,

this isn't really needed then!  there is no point doing work if we need to do it again editing resources is easy enough now anyway

I suggest we just close this ticket as a won't fix and #2705 as well while we're at it.

I'm also not happy about these being added to the phase 2 milestone when we are at the end of finishing it and these are not bugfixes or critical functionality 

"
2704	1342716968000000	toby	need some thought
2704	1343914890000000	aron.carroll	"This relates to #2705. We need to decide what happens when the user clicks on one of the sidebar links.

At the moment they'll get a warning if they've edited the form telling them they'll lose thier changes. Perhaps we should submit the form using ajax, showing a spinner to the user, then send them on to the next resource.

This is the same situation as if we add an ""add new resource"" button to the listing."
2704	1343948227000000	toby	"@aron,

I don't like auto submit as people may think (reasonably) that their changes are discarded.

We could catch all clicks and then ask the user if they've changed something but this feels a little crazy - better than the browser dialog.  hmmm

maybe we should discuss this ticket with the other backlog of undecided/unsure

personally I think we need to review the whole edit/view/delete logic as it feels real poor from my perspective - I need to edit something to delete it - that is a wtf imho

let's work out what we are doing before wasting energy on this"
2704	1352205939000000	johnmartin	Fixed in master
2705	1342707341000000	toby	"@ira,

I'm not sure about this if some one is editing a resource moving to edit the dataset seems wrong -  a back to resource makes sense to me but not moving to the edit page

@aron,

If you want this then assign it to me if you're busy"
2705	1342716980000000	toby	need some thought
2705	1352205954000000	johnmartin	Fixed in master
2706	1342707718000000	toby	"@aron,

I've done this for you"
2707	1344504846000000	toby	"Formmating done other requests moved to new tickets as low priority for effort needed


Title fixes translations etc

http://trac.ckan.org/ticket/2822

Ordering of fields

http://trac.ckan.org/ticket/2823"
2709	1342626212000000	markw	"but some of the relevant info is here:

http://ckan.org/2012/05/30/atom-feeds/"
2710	1342630558000000	aron.carroll	Displayed in a lightbox as of f347f11
2710	1342779460000000	toby	"@aron,

we need to have this styled a little better when non-js user

maybe it needs a little thought so that the lightbox gets a snippet and the non-js user gets the snippet embedded in a page so consisten styling and looks like part of ckan"
2710	1342784018000000	toby	"@aron

I've done this - it needs a bit of work ie breadcrumb and you won't like what I did with the css classes/js- a better solution is needed but this gives a quick example that we can improve on

let me know your thoughts

https://github.com/okfn/ckan/commit/cec57f36094327611ff9bc8935c061a61ca3e961"
2710	1343233018000000	aron.carroll	"Fixed this up, assigning back to you for one small issue. The h.url_for('datastore_read') is returning a broken url:

https://github.com/okfn/ckan/blob/2710-nicer-api-page/ckan/controllers/package.py#L1139-1140

It looks like this:

{{{http://localhost:5000datastore_read?id=794dab29-703f-4ab5-9043-ace58c87a2ce}}}
"
2710	1343318314000000	aron.carroll	Ignore above comment, I didn't have datastore.enabled = 1 in the ini
2711	1352205968000000	johnmartin	Fixed in master
2713	1343656865000000	aron.carroll	Fixed in 32110e7
2714	1342706752000000	toby	"@ira,

this isn't a phase 2 item - moving to phase 3

can you view the document when you download it?  The message says it thinks it is corrupt"
2714	1342794133000000	shevski	Got it working http://demo.ckan.org/dataset/test-dataset/resource/14244c9c-7dcd-43f0-9df0-b363baa2fa8d 
2714	1342794216000000	toby	"@aron

what was the problem?"
2714	1352206138000000	johnmartin	This seems fixed... I'm closing this.
2715	1342716931000000	toby	live on s031
2716	1342716474000000	toby	fixed and on s031
2718	1342785406000000	toby	"@shevski

can you use links to s031 for stuff like this as it is the testing serve and i can play with the data more - unless the error is specific to demo.ckan.org

-------------

with this issue it is actually wider than you suggest as I cannot edit the group that the dataset is in either.  We need to discuss this one as I don't know the best approach should groups select datasets or datasets groups or both - how do we remove datasets from groups - who can do this etc - maybe next week?"
2718	1342788150000000	toby	related to #2699
2720	1343214149000000	toby	minor fix so seems good to do it now
2720	1343219999000000	aron.carroll	Padding fixed in 1b41a9b the user list is part of #2451
2721	1342948657000000	shevski	E.g. 'test-group' was created & deleted
2721	1343031299000000	toby	"@ira,

this is an issue for sysadmins only - i'll look at it anyhow"
2721	1343037422000000	toby	moving to phase 3 a s fundamental ckan issue needs team discussions
2722	1342948991000000	shevski	"In fact, this is the wrong bug. Search doesn't seem to work *at all* in groups

Tried to search http://s031.okserver.org:2375/group/data-explorer?q=&sort=views_recent+desc

Bug 1: no results
Bug 2: the text display covers the order by box"
2722	1343036871000000	toby	"@ira


I have disabled the sort order of group datasets in phase 2 as it is totally broken - I'll re-add it in phase 3

Also the comment you made you added bug2 - text covers order by box -PLEASE DO NOT DO THIS - all it does is make the tickets really hard to deal with - if this becomes a habit I will close all such tickets as INVALID as it makes trac unusable for developers - THIS IS REALLY IMPORTANT - cheers

@aron,

can you watch for feature creep in tickets and let me know if it happens - thanks"
2722	1343060105000000	shevski	"Hey, I only mentioned bug 2 here because I'm pretty certain this already exists as a separate ticket. Have definitely reported it before, but i think someone else created the ticket - so just wanted to remind that this hasn't been fixed either yet.

What's the best way to do this in future?"
2722	1343062752000000	toby	"@ira,

It is much easier to work with tickets that only cover one thing - If something is found then the easiest thing is to add a new ticket.  If you feel it's related to another ticket then you can add that to the new ticket eg related to #1234

If tickets need combining it is easy for us devs to do it.  Basically adding something to a ticket is generally a bad thing.  Sometimes it's fair enough if something is missing for a new feature being reviewed etc - but even then a new ticket is generally not a problem.  Small tickets are nice to work on as we can close them quick etc.  The old [super] style tickets have been banned as they generally lead to owners becoming demotivated and unproductive.

It's always nice if you can find if a ticket already exists but I don't mind you opening a few duplicates if you can't find the ticket - for the demo you can probably just skim the tickets in the milestones as there aren't too many - but as you know I try to review them quite often.

Also please don't reopen really old tickets just add a new one If it's been closed in the last month or so then feel free to re-open if you're sure it's not just waiting for release - you can always check with the last owner of the ticket.

hope that makes sense
"
2722	1344358667000000	toby	"@aron,

can you re-add the dropdown and sort the overlap issue not sure which template it's in"
2722	1344510010000000	aron.carroll	Done in 8769233. I think the overlap issue was fixed for the dataset search a while ago. Let me know if it remains.
2724	1343030687000000	toby	"1)  this is because it is an incomplete dataset that has not been fully added

2) please explain where you mean - we need a url

3) These should not be seen


reassigning to toby"
2725	1343030773000000	toby	"@ira,

This is a ckan issue not demo-theme

I think we need a ckan day - wider team to look at many of these style issues"
2726	1342949999000000	shevski	Point 2 relies on the Chrome previews of PDFs, but can we not use this ability?
2726	1343030906000000	toby	"@ira,

I think this is probably linked to the qa plugin and auto detecting formats rather than believing the user."
2727	1343031501000000	toby	i'll do this
2728	1343031111000000	toby	"@ira,

This is because you are a sysadmin - not sure why ckan does this but i'll look at it with the other group search tickets

moving to phase 3 as not a user viewable issue"
2728	1345023944000000	toby	Issue with not re-indexing datasets when group is updated - needs proper fix as part of phase 4
2729	1342951176000000	shevski	"Also, why does searchign for format:csv not work?
http://s031.okserver.org:2375/dataset?q=format%3ACSV&sort=relevance+asc"
2730	1343031481000000	toby	i'll do this
2730	1343032612000000	toby	fixed will put on demo site later today
2731	1343051608000000	markw	"Also, http://offener.datenkatalog.at, also called http://at.ckan.net, gives me a 500 error, including the words ""Please contact the server administrator, [no address given]""."
2734	1343061727000000	toby	"Shevski,

I think this is an old dataset it works fine with new ones.  I think this is a corrupt data issue.

also HTML, is fine as a format

please reopen if you can reproduce with a dataset that has been created since the update today

"
2734	1343061994000000	shevski	"I did this with a dataset I just created, 5 mins before creating this ticket
Tried it again with a new datasrt, happened again. It's when you're editing a resource"
2734	1343063266000000	toby	"@ira,

can you try to work out exactly how to cause this problem starting with `add a dataset` and let me know how you break things

tell me all the fields you filled in - also try to get it to happen using as little effort as possible  eg 
add dataset http://s031.okserver.org:2375/dataset/new

title = mooooo

click next:add data

resource = moo
format = csv

click `save & add another`


click on resource just created in sidebar to edit

change format to `HTML,`  

click `Save & add another`


etc


that all works fine for me what am i doing wrong?
thanks

also please try using a non sysadmin account"
2734	1343121017000000	shevski	"Wierd. It always breaks for me. Maybe we go through this on skype. I just did it with a non-admin account.

Steps:
1. Create new dataset. Name whatever, resource it a link (I use http://trac.ckan.org/ticket/2734) e.g. http://s031.okserver.org:2375/dataset/format-error-test
2. Once you've *finished* the dataset creation process you are on the main dataset page. Click on the resource you added.
3. Click on ""edit""
4. Change resource field to ""html,"" for example and click on ""update resource""
5. Error shows, clicking on ""update resource"" doesn't do anything.

How about I do it and you watch via screen share?"
2734	1343121694000000	toby	cool I can reproduce fix will be today
2734	1343126896000000	toby	"@ira,

fixed and uploaded to s031 re-open if still broken"
2734	1343127101000000	shevski	ace!
2736	1346670097000000	ross	Going to be reworked without celery.
2737	1343135305000000	toby	"@ira,

that url is broken.  I'll fix this"
2737	1343136141000000	aron.carroll	Done in bc93031
2738	1343124741000000	toby	"the resource has no webstore_url and therefore no data api

I assume that some data is in the datastore but personnaly I don't know the data

closing as this is the correct behaviour as far as is known - Ie complete guess ;p but that is how it is done in ckan core"
2738	1343125335000000	shevski	"in CKAN core there is a tickbox to add to datastore (which we don't have anywhere)

David: how should this work?"
2739	1343135348000000	toby	we need all the help text - moving to phase 3 
2739	1343817919000000	aron.carroll	Added in 038f4f2
2740	1343123431000000	shevski	breadcrumb should be /datasets/ dataset name / add data
2740	1343135455000000	toby	i'll fix this
2741	1346841059000000	johnmartin	Awaiting merge into demo branch
2741	1352205988000000	johnmartin	Fixed in master
2742	1352206081000000	johnmartin	Fixed in master
2743	1343130830000000	toby	"@ira,

I've changed the wording on the button too 'Add Dataset to Group'

Adds the group auto-magically

this is live on s031 for testing fun"
2743	1343131092000000	shevski	brill, works great, thanks!
2744	1343211810000000	shevski	should probably be same width of format field, e.g. here: http://s031.okserver.org:2375/en/dataset/new_resource/gold-prices
2744	1343219298000000	aron.carroll	Fixed in 9472a94
2746	1343211146000000	aron.carroll	For some reason the test servers aren't serving the demo.js file. Assigning to Toby for investigation. 
2748	1344503744000000	aron.carroll	Moving this to phase 4 until we decide what to do about the edit/save workflow
2749	1343229716000000	aron.carroll	"Fixed in 27af570. Fix was simple just don't define a title in the base template. An alternative would have been to wrap the title portion in a block

{{{
{% block title %}{% block page_title %}My Subtitle{% endblock %} - {{ super() }}{% endblock %}
}}}"
2749	1343232304000000	toby	I like the block page_title approach but not too fussed as long as this instance is working
2751	1343597577000000	shevski	"Do we need two versions?
1 for thedatahub - where we stick to having ""groups"" resources etc and 1 for datasuite where groups are re-named as ""publishers"" and more emphasis on data files vs resources?"
2751	1344015002000000	toby	"This is now possible via the `paster trans mangler`

the initial verdict is that our translation coverage is extremely poor and we need a full template review - maybe there is a jinja2 i18n solution but I think not without `{% trans %}`

Moving to phase 4 - also I'm just holding this ticket and will be allocating to aron's successor

Publishers vs Groups is more complex than I think is appreciated, is it really worth the time and effort just to make everyone using ckan confused?  Anyhow that discussion is not part of this ticket as it is not in-scope"
2751	1344240974000000	aron.carroll	"I tried {{{paster trans mangler -c datahub.ini}}

I also had to {{{ pip install polib }}} and run {{{ python setup.py egg_inf }}}

I find it hard to believe out coverage is that poor, I've just been through a random selection of templates and they all have appropriate calls to {{{_()}} or {{{ {% trans %} }}}. Will look once I get this running."
2751	1344243046000000	toby	"@aron,

The pip install polib is needed this is a deployment requirement so not in the pip-requirements.txt
Not sure where it should live we use it elsewhere so may already be in there somewhere

not sure why you needed the egg_inf"
2752	1343219871000000	aron.carroll	Assigning to toby to look at this crazyness
2752	1343222618000000	toby	fixed in stable
2754	1343226309000000	toby	"@shevski as a reminder url please - I'll find the page but it makes my job harder
"
2755	1344505304000000	toby	"this is dependent on #2790 (pending) and #2356 (waiting merge)

other fixes have been done therefore closing this even if the effects won't be seen till those fixes are merged"
2756	1343231863000000	seanh	See commits: f5043a2, 2280428, a8eedda (the ticket number wasn't in the commit messages, sorry)
2759	1343651082000000	aron.carroll	Fixed in 16bb516
2764	1343320440000000	rgrp	Duplicate of #2732
2765	1343735917000000	toby	"@aron,

I've added a data summary

The data errors for empty fields are not happening due to our use of repoze.who for logins which is crap and doesn't provide feedback re loggin details so not possible without hacking repoze which i'm not doing.


Could you look at cleaning up the error summary we don't supply a field name (key) as not relevant it would be nice if we could hide the :  also removing the invalid fields message would be good to hide maybe add this as an option to the macro"
2765	1343817858000000	aron.carroll	Cool, closed as of 99b8c4f. I fixed the error summary display and highlighted the fields in red to show they were incorrect.
2766	1343318862000000	shevski	"e.g. see 'ff' dataset http://s031.okserver.org:2375/en/user/shevski

shows up in activity stream"
2767	1343645517000000	aron.carroll	"Closed as of 25d7499. All form.select() calls now require a tuple/list in the form.

{{{
options = (
  {""value"": ""opt1-value"", ""text"": ""Option One Text""},
  {""value"": ""opt2-value"", ""text"": ""Option Two Text""}
)
}}"
2769	1343328989000000	ross	You can view this at http://test.ckan.org/apps to get an idea of how simple the form is.  Have also moved the templates out of the package folder into their own now.
2769	1343377760000000	toby	"@shevski,

we will probably want a design for this - maybe wait till we have the basics up and running"
2769	1343734083000000	toby	"rough cut down needs some design love but new ticket for that


http://trac.ckan.org/ticket/2778"
2770	1343389747000000	seanh	Done (but not log messages on history page, won't do those)
2771	1343392265000000	seanh	I've started working on this on a branch, will get it finished as soon as I can
2771	1350303564000000	seanh	Branch is here, but not finished yet: https://github.com/okfn/ckan/tree/2750-add-docs-and-examples-for-idatasetform-and-igroupform
2772	1345027445000000	seanh	Transifex was updated and translators notified, translations were made and pulled into 1.8
2774	1343993956000000	toby	"@aron

I've created some js translations note that they are untranslated except for zh_TW which is mangled.  At the moment they are just a json blob in public/base/i18n/<locale>.js


What more do you need? It seems to me that you just need either


`some_var = {json}`  or  `some_function({json})`


let me know your preference or do we want this purely as an ajax call?  If it's ajax I think we want a common approach like in http://trac.ckan.org/ticket/2698 which I prefer to a unhelpful response"
2774	1344008312000000	aron.carroll	"I'm happy to just make ajax requests to public/base/i18n/<locale>.js, however this will use the language set in the <html lang> attribute. So if this file doesn't exist then we'll get a 404 and show the english.

If we want something more sophisticated, determine an appropriate fallback etc, then I think the API is the way to go. Or we could get CKAN to determine the appropriate language file and include it in the page source..."
2774	1344009350000000	toby	"for now shall we just include it in the page?

let me know how you want it included eg

var = {}, fn({}),  $(fn({})) etc"
2776	1343824375000000	aron.carroll	"Done in f24fcd9. This will require the demo site to be updated.

This line needs to be added to the config.ini to get the CKAN logo back.

{{{
ckan.site_logo = /base/images/ckan-logo.png
}}}

For other local sites remove the logo and the site title and description will be used. Currently the design doesn't handle a long description so beware."
2778	1343841130000000	aron.carroll	Tidied up in a55523175a95f2fc5c0ddddf9fa9579aa7111e39
2779	1343737270000000	shevski	Related ticket for undeleting datasets - http://trac.ckan.org/ticket/2780
2779	1343818300000000	aron.carroll	Toby is there a flag on the dataset object that tells me if it has been deleted?
2779	1343818990000000	toby	"@aron,

pkg_dict.state

I think the options are

active -  all good
draft/draft-complete - partially created dataset
deleted - deleted"
2779	1343903455000000	aron.carroll	Done in d17358f
2780	1345023811000000	toby	This is a new feature moving to phase 4
2781	1343901395000000	toby	"@aron,

This is possible via /ckan-admin/config

but renders badly with the demo theme disabled due to hiding behind that black rectangle - maybe we can do something?"
2781	1343907075000000	aron.carroll	"What do you mean by ""hiding behind that black rectangle""? Just tried it locally with the text ""Welcome to the CKAN demo Try out standard CKAN functionality in a sandbox environment. Search for datasets directly from the homepage or by navigating to the Datasets search page where you can facet by tags, groups and format."" and it renders okay…"
2781	1343947526000000	toby	"@aron

please try with

ckan.plugins = stats

in your .ini ie without the demo theme being used"
2781	1344510922000000	aron.carroll	"Fixed as of 7c86e31
"
2782	1343805253000000	toby	"@ira,

I'm just closing this

a) Because the ticket doesn't really mean anything what is `properly` also a link to some random website does not help.  The ticket should tell me exactly what is wanted not be some sort of treasure hunt.

b) This is major feature creep - we have agreed the tickets for phase 3 small things/bug fixes are fine but this possibly a massive thing.  For weird stuff like this maybe you should save them up for when we have a meet up.  You need to get buy-in from developers I need to have some sort of pride in what I do.

c) I don't think this is a good idea from a technical perspective - maybe if you create a meaningful ticket it may make more sense.

d) Also I'm not doing anything involving maps till we have proper attribution of the map we are using on the demo site because I have morals, I thought okfn did too but I'm not sure any more.

Sorry to have to do this but it is for my sanity.  As I have repeatedly said the tickets are really important as they are the basis of all the work that I do.  They need to be of a reasonable standard."
2782	1343810353000000	shevski	"@toby

I added this post discussion about attribution. Sam says that if we actually use the app itself (currently we're using the maps from it - but primarily by taking screenshots instead of actually integrating) then the attribution would automatically show.

In terms of ticket creating, I added this so people could see it and have a think about whether it's phase 3 or phase 4 (& move where necc) & whether you wanted more detail from me etc or whether it needed to be a more generic kind of ticket (i.e. 'need some low cost / low maintenance way to create backgrounds for demos').

In future, shall I email instead? Call on skype? IRC? before any tickets are created?"
2782	1343811113000000	toby	"@ira,


I'm happy to discuss things on irc/email if you are unsure about things.


If There are tickets that you are not sure about when they are wanted, then add them to phase 4 as they can then be ignored for now - anything added to phase 3 is a ""this needs doing now"" thing and as we have agreed exactly what we are doing in this phase (last week) then adding new features will likely get a negative reaction.  So if not sure add it to phase 4 - aron and I may do some phase 4 tickets if we feel they will be quick and easy.


As I've said small things like the breadcrumb is wrong on page xxx or bugfix tickets are fine as broken stuff needs fixing.  Sometimes it may not be clear how much work something will be or who the person who needs to fix it is - so just ask first.


The main problem with this ticket is that it is unclear what the ticket is about.


cheers
 "
2783	1343814401000000	rgrp	My 2c: this is very low priority atm (it will also be hard to do). What I'd vote for is some decent default patterned background or similar (what we have originally wasn't *that* bad ...)
2783	1343817744000000	toby	closing after discussion with kindly
2783	1343818702000000	toby	Milestone ckanhosted deleted
2785	1344243731000000	shevski	"I think it's a nice to have, esp if we give it an intuitive UI
Rufus is keen for this also"
2785	1344256089000000	shevski	I would say leave as phase 4 for now
2787	1344543473000000	toby	Closing as too general and part of any plugin update
2791	1343906884000000	aron.carroll	I've added no-wrap as of 1db2037. Not sure what we should do about short titles/long tag lines though.
2792	1343901501000000	aron.carroll	Fixed in 1a83a77
2793	1343897811000000	toby	fixed but commit tagged as 2650 in error
2794	1343903064000000	aron.carroll	Done in 11f3b6297c
2796	1345129471000000	shevski	Some notes already here: http://ckan.okfnpad.org/datahub-faq
2796	1345129495000000	shevski	and here: http://wiki.ckan.org/Using_the_Web_Interface
2797	1344250973000000	aron.carroll	Just a classname issue. Fixed in f927598 and documented
2801	1344526607000000	shevski	@Aron / Ross is it worth having a separate page for related items? E.g. like on pd.eu http://publicdata.eu/app/irail
2801	1344526719000000	aron.carroll	Not sure it is. I'm just implementing a toggle on description so it works the same way as on the datahub.
2801	1344531016000000	aron.carroll	Now able to display the full text of related items as of e83df46
2802	1344258233000000	toby	"@aron

I've done most of this

to test

get strings
{{{ python setup.py extract_messages }}}


mangle the zh_TW creates .po/.mo files - I may need to fix plurals
{{{ paster trans mangle -c .ini }}}


create .js files only zh_TW will be correct due to other .po/.mo files being 1.7 ones
{{{ paster trans js -c .ini }}}


/api/i18n/zh_TW should be correct


please note we do not have en.js I'm returning {} I think this is the correct response (maybe something else as we should just use the default _('...') strings - maybe we need to do something else


for what it's worth pojson does not provide the format you wanted so I adapted it


reassign if you need fixes"
2802	1344269446000000	aron.carroll	Cool, this is in as of 8b72d1f8e9ba
2803	1344256274000000	aron.carroll	Done in 3b2427e
2804	1344269865000000	aron.carroll	Done in 38f824b
2805	1344254760000000	toby	Arg I think this is my fault
2806	1352206005000000	johnmartin	Fixed with new group pages.
2807	1344270190000000	aron.carroll	Fixed in 9a6d0be
2808	1344944258000000	aron.carroll	Close in 97d92ba
2809	1344347814000000	aron.carroll	Fixed in 84a4123
2811	1349869110000000	amercader	Fixed on master, 1.8 and 1.7.2
2812	1344445200000000	toby	"@ira,

do you want this change?"
2812	1344507240000000	shevski	"Current text does need updating, but I think we need an explanation along the lines of:

""Groups allow you to group together datasets under a organisation (for example, the Department of Health) or topic (e.g. Transport, Health) so make it easier for users to browse datasets by theme.

Groups also enable you to assign roles and authorisation to members of the group - i.e. individuals can be given the right to publish datasets from a particular organisation.""

But even that could be clearer. 

Mark's text could be misleading since we haven't currently implemented private datasets or the right auth settings."
2812	1344509156000000	toby	changed
2812	1344521102000000	markw	"That's still fairly terrible. Also surely the auth stuff is part of Ross's Organizations stuff? It doesn't matter much if it's implemented yet, that's why this is a demo. But anyway, here is a more generic but readable version based on Ira's text above:


Groups allow you to group users and data together so that they are easier to manage. Group owners can assign roles and authorisations, giving each project or department control of its own data publishing.

Users can browse or search by group, making it easier to find the data they are looking for.
"
2812	1344523785000000	toby	"@markw

I think you are talking about a different ticket
closing "
2812	1344524290000000	toby	"@markw,

Actually I see you also want some text changes

please don't add unrelated discussions to tickets as it causes noise is disruptive and I just end up closing tickets as won't fix etc.

I have updated the text as it was assigned to me and so i am still keeping this closed as I did as requested. Can you an ira sort this out between yourselves and create a new ticket when you have agreement

Thanks

"
2813	1344445419000000	toby	"http://demo.ckan.org/dataset/afterfibre


group box wants a title


link is not clickable


maybe reorder stuff"
2814	1346670381000000	ross	Have assigned to client team to decide what they want to do about this.
2817	1344544901000000	toby	"works in dev branch - may not be on s031 yet

also please include urls in bug reports if possible - thanks"
2818	1344545331000000	toby	check schema
2818	1345482572000000	toby	"@ross,

This is an issue with the related items schema - I'm not quite sure what all the rules should be 

eg does visulisation need image url? or is normal url ok?

Could you review the schema and ensure that we require/don't require the correct items.  If you provide the rules I can help do the schema if you want but I don't know them

cheers

Toby"
2818	1345485131000000	ross	URL should be required, image url isn't required.
2818	1346231718000000	ross	"Has been suggested that we are clearer on why the URL is required, as this related items are really just 'Links'.  We should consider the name change, and also possibly make the types configurable in config somewhere as they are currently almost content free.

Assigned to Sean to keep an eye on this ticket until we get a reasonable chance to action it."
2819	1344545479000000	toby	"works in dev branch for 

/apps

http://localhost:5000/dataset/1-kmwaterfractionfromnationaltopographicdatabasemapscanada/related"
2824	1344527130000000	shevski	@aron any ideas?
2824	1344532640000000	aron.carroll	All fixed
2826	1344527309000000	shevski	@Toby do you know what's happened? Don't think this was the case before. Should pre-fill with standard image when there's no group image URL
2826	1344528004000000	toby	"fixed,  issue was url_for_static

@ira,

good to test the site in english ie url like /en/dataset change language to something then english

it will help catch these issues "
2827	1344549139000000	toby	Fixed and pushed to s031
2828	1344507533000000	toby	"@ira


this is the correct behaviour as this is a partially added dataset - rewritten ticket as it has a nice number :)"
2832	1344542984000000	toby	duplicate of #2718 closing
2834	1344856692000000	aron.carroll	Done in 092d257
2836	1344852009000000	aron.carroll	"Yeah you can pass an html block into a macro like so:

https://github.com/okfn/ckan/blob/2375-demo-theme-development/ckan/templates/package/snippets/resource_form.html#L44-48

What do you think? If it's useful I'll document it."
2836	1344853957000000	toby	"@aron,

I'd love it if we could pass it as an arg ie

form.input(...., extra_info=<something escaped if not literal()>)

also while we're at it I'd also really like

form.input(...., help_info=<something>) that would give a (?) icon with a :hover {display:block} div - that make sense?"
2836	1344859911000000	toby	"I'd quite like some general css like this

<span class=""hover-for-help"">[thing to hover over]
   <div class=""help-text"">Help text</div>
</span>

This is for the qa extension but seems like a general need


      .hover-for-help .help-text{
          display:none;
      }
      .hover-for-help:hover .help-text{
          display:block;
          position:absolute;
          padding:3px;
      }"
2837	1344847463000000	aron.carroll	Checkboxes created with {{{ form.checkbox() }}} should be styled correctly. Got a link to an example?
2837	1344847819000000	toby	"http://localhost:5000/testing/primer

essentially it's a black not grey outline also errored one isn't red"
2837	1344851271000000	aron.carroll	Fixed alignment issues in Firefox as of a6fa5a0. Can't do anything about visual display of checkboxes as they're controlled by the vendor. We could replace them with images, if this is going to be required then please create a new ticket for the next phase.
2839	1344854522000000	toby	"this is fixed in

https://github.com/okfn/ckan/pull/88"
2840	1344852538000000	aron.carroll	Fixed in f7bc1c9. This can be flipped back by adding a class of {{{.tagline-right}}} to the hgoup element.
2841	1344857415000000	aron.carroll	Fixed in a317fb9
2843	1345035045000000	ross	Add existing dataset doesn't make a lot of sense because they can only belong to a single organization. Best would be to fix the organisation template to remove Add Existing.
2844	1345454527000000	toby	paster db clean fixed in https://github.com/okfn/ckan/pull/107
2852	1345103409000000	toby	"@ira,

Please review the fix I think adriá did"
2852	1345103634000000	toby	I think it should stay red but you can argue
2852	1345104027000000	shevski	"Red is fine here

Can we amend the message to:

Cannot create new harvest jobs on inactive sources. First, please change the source status to 'active'."
2852	1345106515000000	toby	text updated and red again
2853	1345049201000000	amercader	"The message it is pretty self-explanatory, but I'm happy to lower it to warning.

We can't know the scheduled time because it depends on how is set up on the server (generally a cron job every x minutes). "
2853	1345103841000000	toby	"@ira,

I'll change to notice will do for the other one too"
2853	1345104231000000	toby	@both notices now blue
2855	1345103314000000	toby	"@ira,

this works for me at the given link

try refreshing the page in case it's a cache issue"
2855	1345104178000000	shevski	I cleared my cache and it's working now
2856	1345049793000000	shevski	server error URL: http://s031.okserver.org:2375/apps/49a509f7-4eb6-456f-b1fc-87cfde90c60d
2856	1345107503000000	toby	"fixed now gives 404

The issue of not wanting a 404 is outside the scope of this ticket as it's a whole activity stream issue and needs dev buy in etc"
2857	1345107097000000	toby	"dashboard hidden in phase 3

we can fix up in phase 4"
2863	1345122384000000	toby	"@ira,

This is actually working correctly but the permissions on the server s031 are not what you want

I do not know how or where these are defined - he has package_update permissions from somewhere

maybe ross or someone knows"
2863	1345122876000000	ross	"This is changeable in config.  The default permissions are specified in there I believe.
"
2863	1345123824000000	shevski	"If by default it doesn't happen, then that's fine & we can close this.

Any way for me to see how permissions are set?"
2863	1345123978000000	ross	"No idea :|

The perms are commented out by default in the template ini file.  You should take a look at the ini file and see how it is setup, search for ckan.default_roles.Package but I can't see how Daniel would have been granted read access without the auth pages being implemented."
2863	1345201502000000	toby	"@ira,

I am moving this to phase 4 as it's not going to be looked at till the new permissions stuff is agreed"
2865	1345131215000000	ross	"Can't replicate locally in either master or release-v1.8

/el/ isn't a valid locale, and so the problem is unicode in urls where ckan is trying to generate a 404."
2872	1350304179000000	seanh	Just tested and this seems fixed so closing
2873	1345129315000000	danieljohnlewis	"For example see:
http://s031.okserver.org:2375/qa/dataset/five_stars

Which has:
Example dataset as a score of: 4
After examination of the dataset ( http://s031.okserver.org:2375/dataset/example-dataset ) it is made up of a CSV and an HTML file."
2873	1345136489000000	toby	"This is a problem with the summary data not the resource qa score it is almost certainly due to stale data.

keeping here till resolved"
2873	1345208283000000	toby	qa extension is crap and needs fixing to work properly due to where it stores data (in the task status - wtf)
2877	1345600430000000	kindly	"1.
This is fixed need to reload data to test though.

2.
Fixed as far as I am concerned, limit 0 now returns correct total.  If there are no results in filter return total of 0.

3.
Want to keep postgres types. This will stop the need for mappings in both directions and makes everything simpler.  We are currently not storing any metadata on tables and would like it to stay that way.
"
2878	1350561906000000	seanh	Closing as we've gone forward with a slightly different approach instead
2879	1350562096000000	seanh	Closing as we've moved forward with a slightly different approach to organizations
2880	1350561968000000	seanh	Closing as we've moved forward with a slightly different approach to organizations in core instead.
2881	1345626056000000	rgrp	"@seanh - this was the material from the wiki moved to the docs. I agree it is somewhat incomplete but we certainly shouldn't remove it without something better in place.

Also, IMO this is currently very low priority ..."
2883	1345629890000000	seanh	"Also see the thread here:

http://lists.okfn.org/pipermail/ckan-discuss/2012-August/002382.html

the questions asked in the thread should give ideas what to add to the overview"
2885	1345625524000000	seanh	authz_form_table() in ckan/templates/package/authz.html creates a table with non-translatable labels (anon_editor, admin, editor, reader...)
2890	1346175867000000	rgrp	"I know this is tricky. The issue is that Datastore does not exist *just* to provided data views - it also provides a bunch of other stuff like a Data API and, well, a Datastore. I also think there are different audiences. Data view info is about publishers and (viewing) users, while the Data API is for (non-CKAN) devs and CKAN devs and the Datastore sysadmin section is for deployers.

My feeling is therefore keeping things as is but with more stuff in the Data View seciton about it all works:

 * Data viewer: explanation for publisher, links to next 2 sections 
 * Datastore page (as we have it)
  * Includes datastorer 
 * Using Data API page (as we have it)

So main change is a better data viewer page ..."
2900	1346335788000000	seanh	Why does this only happen on user profile pages and not dataset search page or group read page? Looks like maybe only user profile page uses the package_list.html snippet
2906	1346862889000000	shevski	fixed by removing custom css from the stylesheet, but should look into why it happened
2907	1352206307000000	johnmartin	Fixed in master
2913	1350303779000000	seanh	Moving into 2.0 milestone. Also affects 1.8.
2931	1347891378000000	seanh	Also set_global() seems to have the wrong docstring
2934	1347969321000000	dominik	This looks promising but seems to be discontinued: http://twill.idyll.org/python-api.html
2934	1348060201000000	dread	"The functional tests actually do cover a logged in person editing a dataset and then checking it displays correctly in the view page again.

The webtest framework we use in CKAN has form filling and link click() function which allows navigation between pages like you describe these other ones having too.

Having said that, there is no reason why a newer library shouldn't be introduced if webtest is not sufficient. And if there are stories without tests then it would be good to add them."
2937	1348157780000000	seanh	This is fixed on master (commit e97b5c70e9325a1095778fef8e0d27c84e881b30) needs to be cherry-picked into 1.8
2937	1348238875000000	seanh	Cherry-picked into 1.8
2942	1348610791000000	dread	"Unfortunately with a few hours hacking I couldn't find a way to get this version of WebOb to cope with this header. 

The line I think it goes wrong is {{{ctype = env.get('CONTENT_TYPE', 'application/x-www-form-urlencoded')}}} in request.py, and the commented line above looks right, but wipes the request data for some reason. I tried intercepting the bad header and deleting it, but I couldn't do that before WebOb processed it, and couldn't persuade WebOb to reprocess it once the header was edited.

I did write a failing test though if that is useful to someone in the future:
{{{
diff --git a/ckan/tests/functional/api/test_api.py b/ckan/tests/functional/api/t
index 539d184..b4cc4ce 100644
--- a/ckan/tests/functional/api/test_api.py
+++ b/ckan/tests/functional/api/test_api.py
@@ -49,6 +49,18 @@ class TestApi3(Api3TestCase, ApiTestCase):
         assert_in('Bad request - JSON Error: No request body data',
                   res.body)
 
+    def test_content_type_headers_can_be_sent(self):
+        '''#2942 Webob can only cope with very specific Content-Type header
+        values, so this tests that a work-around is in place.
+
+        This particular header value is the default for 'requests' 0.14.
+        '''
+        offset = self.offset('/action/package_search')
+        params = '%s=1' % json.dumps({'q': 'russian'})
+        headers = {'Content-Type': '; charset=utf-8'}
+        res = self.app.post(offset, params=params, headers=headers,
+                            status=[200])
+
}}}
There is a clear error to the user:

{{{
>>> requests.post('http://datahub.io/api/action/package_list', data='{}').content
'""Bad request - JSON Error: Could not extract request body data: Bad content type: \'; charset=utf-8\'""'
}}}

The advice to users of requests would be to ensure they specify the content-type as follows:
{{{
>>> requests.post('http://datahub.io/api/action/package_list', data='{}', headers={'content-type': 'application/x-www-form-urlencoded'}).content
}}}"
2942	1348611144000000	dread	"
> {{{
> >>> requests.post('http://datahub.io/api/action/package_list', data='{}', headers={'content-type': 'application/x-www-form-urlencoded'}).content
> }}}

Or even better:

{{{
>>> requests.post('http://datahub.io/api/action/package_list', data='{}', headers={'content-type': 'application/json'}).content
}}}"
2950	1349168838000000	toby	just a note to say fanstatic will serve minified files if it finds them in production even if they are old so we need to make sure they  are up to date.
2951	1349168981000000	toby	the files like red.css should also be done as part of this. and before minification of files - should really be part of same process
2953	1349257893000000	toby	"awaiting merge

https://github.com/okfn/ckan/pull/145"
2956	1349278531000000	johnmartin	"OK, this was simple... I just added an already made snippet to the page. 

Ira: Can you confirm that the attached screenshots satisfy fixing the problem?"
2956	1349346442000000	shevski	This needs to be a navigation menu item that includes both the name & link to the dataset edit page and then underneath (nested) the links to it's resources - so that the user can easily move between the dataset edit pages and resource edit pages and know where they currently are (using the selected pointer style)
2968	1350297070000000	seanh	This also applies to other pages such as /member_new and /member_delete
2980	1350560137000000	seanh	Won't do unless required by a specific client
3007	1351517019000000	seanh	Only happens if you create a dataset through the web UI, creating a dataset through the API still produces just one activity.
3018	1355140950000000	seanh	https://github.com/okfn/ckan/pull/171
3021	1353411968000000	johnmartin	In code review
3029	1355243824000000	dread	"Fix done here: https://github.com/datagovuk/ckan/commit/b6ad63d58dd6c0cc51677fa66c575179f908d050
which you're welcome to pull."
