Пример #1
0
    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()
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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
Пример #5
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()
Пример #6
0
    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)