def command(self): self._load_config() import ckan.model as model model.Session.remove() model.Session.configure(bind=model.meta.engine) model.repo.new_revision() self.log.info("Database access initialised") root_url = config.get('ckan.site_url', 'http://data.gov.uk') self.log.debug("Root url is " + root_url) if toolkit.asbool(config.get('debug')): root_url = "http://data.gov.uk" self.log.debug("Overriding root_url in DEBUG ") data = self._make_request() for d in data: # Eventually we might handle other types. if d['type'] != 'App': continue related_url = urljoin(root_url, d['path']) package = model.Package.get(d['ckan_id']) if not package: continue found = False current_related = model.Related.get_for_dataset(package) for current in current_related: if current.related.url == related_url: self.log.info("Skipping existing related") found = True if not found: self.log.info("Adding related item [%s] to dataset [%s]" % (d['title'], package.name)) related = model.Related() related.type = 'App' related.title = d['title'] related.description = "" related.url = related_url thumb = d.get('thumbnail', '').replace("://", "/") if thumb: thumb_url = urljoin(root_url, "/sites/default/files/styles/medium/") thumb_url = urljoin(thumb_url, thumb) else: thumb_url = '' related.image_url = thumb_url model.Session.add(related) model.Session.commit() related_item = model.RelatedDataset(dataset_id=package.id, related_id=related.id) model.Session.add(related_item) model.Session.commit()
def test_related_list(self): p = model.Package.get('warandpeace') r = model.Related(title="Title", type="idea") p.related.append(r) r = model.Related(title="Title 2", type="idea") p.related.append(r) model.Session.add(r) model.Session.commit() assert len(p.related) == 2 assert p.related_count == 2, p.related_count usr = logic.get_action('get_site_user')({'model':model,'ignore_auth': True},{}) context = dict(model=model, user=usr['name'], session=model.Session) data_dict = {'id': p.id} result = logic.get_action('related_list')(context,data_dict) assert len(result) == len(p.related)
def test_api_list(self): p = model.Package.get('warandpeace') one = model.Related(type="idea", title="one") two = model.Related(type="idea", title="two") p.related.append(one) p.related.append(two) model.Session.commit() r = {"id": p.id} postparams = '%s=1' % json.dumps(r) res = self.app.post("/api/3/action/related_list", params=postparams, status=self.STATUS_200_OK, extra_environ=self.extra_environ) r = json.loads(res.body) assert r['success'] == True, r assert r['result'][0]['type'] == "idea" assert r['result'][0]['title'] == "two", r p.related.remove(one) p.related.remove(two) model.Session.delete(one) model.Session.delete(two)
def test_create(self): p = model.Package.get('warandpeace') r = model.Related() p.related.append(r) assert len(p.related) == 1, p.related assert len(r.datasets) == 1, r.datasets model.Session.add(p) model.Session.add(r) model.Session.commit() # To get the RelatedDataset objects (for state change) assert len(model.Related.get_for_dataset(p)) == 1 assert len(model.Related.get_for_dataset(p, status='inactive')) == 0 p.related.remove(r) model.Session.delete(r) assert len(p.related) == 0
def _add_related(self, package, app_title, app_url, image_url=''): stats.add("Adding related item", "[%s] -> [%s]" % (package.name, app_title)) related = model.Related() related.type = 'App' related.title = app_title related.description = "" related.url = app_url related.image_url = image_url model.Session.add(related) model.Session.commit() related_item = model.RelatedDataset(dataset_id=package.id, related_id=related.id) model.Session.add(related_item) model.Session.commit()
def test_inactive_related(self): p = model.Package.get('warandpeace') r = model.Related() p.related.append(r) assert len(p.related) == 1, p.related model.Session.add(r) model.Session.commit() # To get the RelatedDataset objects (for state change) assert len(model.Related.get_for_dataset(p, status='active')) == 1 assert len(model.Related.get_for_dataset(p, status='inactive')) == 0 r.deactivate(p) r.deactivate(p) # Does nothing. model.Session.refresh(p) assert len(model.Related.get_for_dataset(p, status='active')) == 0 assert len(model.Related.get_for_dataset(p, status='inactive')) == 1 model.Session.refresh(p) # Would like to get rid of the need for this assert len(p.related) == 0, p.related # not sure inactive item ... model.Session.delete(r)