Merge branch 'master' of github.com:okfn/ckanext-harvest into migration-states
This commit is contained in:
commit
46f7b32b04
|
@ -0,0 +1,9 @@
|
|||
[main]
|
||||
host = https://www.transifex.com
|
||||
|
||||
[ckanext-harvest.ckanext-harvestpot]
|
||||
file_filter = i18n/<lang>/LC_MESSAGES/ckanext-harvest.po
|
||||
source_file = i18n/ckanext-harvest.pot
|
||||
source_lang = en
|
||||
type = PO
|
||||
|
86
README.rst
86
README.rst
|
@ -32,25 +32,9 @@ Installation
|
|||
ckan.harvest.mq.type = rabbitmq
|
||||
|
||||
|
||||
2. Install the extension into your python environment.
|
||||
2. Install the extension into your python environment::
|
||||
|
||||
*Note:* Depending on the CKAN core version you are targeting you will need to
|
||||
use a different branch from the extension.
|
||||
|
||||
For a production site, use the `stable` branch, unless there is a specific
|
||||
branch that targets the CKAN core version that you are using.
|
||||
|
||||
To target the latest CKAN core release::
|
||||
|
||||
(pyenv) $ pip install -e git+https://github.com/okfn/ckanext-harvest.git@stable#egg=ckanext-harvest
|
||||
|
||||
To target an old release (if a release branch exists, otherwise use `stable`)::
|
||||
|
||||
(pyenv) $ pip install -e git+https://github.com/okfn/ckanext-harvest.git@release-v1.8#egg=ckanext-harvest
|
||||
|
||||
To target CKAN `master`, use the extension `master` branch (ie no branch defined)::
|
||||
|
||||
(pyenv) $ pip install -e git+https://github.com/okfn/ckanext-harvest.git#egg=ckanext-harvest
|
||||
(pyenv) $ pip install -e git+https://github.com/ckan/ckanext-harvest.git#egg=ckanext-harvest
|
||||
|
||||
3. Install the rest of python modules required by the extension::
|
||||
|
||||
|
@ -66,6 +50,23 @@ Installation
|
|||
|
||||
ckan.harvest.mq.type = redis
|
||||
|
||||
There are a number of configuration options available for the backends. These don't need to
|
||||
be modified at all if you are using the default Redis or RabbitMQ install (step 1). The list
|
||||
below shows the available options and their default values:
|
||||
|
||||
* Redis:
|
||||
- ``ckan.harvest.mq.hostname`` (localhost)
|
||||
- ``ckan.harvest.mq.port`` (6379)
|
||||
- ``ckan.harvest.mq.redis_db`` (0)
|
||||
|
||||
* RabbitMQ:
|
||||
- ``ckan.harvest.mq.user_id`` (guest)
|
||||
- ``ckan.harvest.mq.password`` (guest)
|
||||
- ``ckan.harvest.mq.hostname`` (localhost)
|
||||
- ``ckan.harvest.mq.port`` (5672)
|
||||
- ``ckan.harvest.mq.virtual_host`` (/)
|
||||
|
||||
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
@ -96,7 +97,10 @@ The following operations can be run from the command line using the
|
|||
- create new harvest source
|
||||
|
||||
harvester rmsource {id}
|
||||
- remove (inactivate) a harvester source
|
||||
- remove (deactivate) a harvester source, whilst leaving any related datasets, jobs and objects
|
||||
|
||||
harvester clearsource {id}
|
||||
- clears all datasets, jobs and objects related to a harvest source, but keeps the source itself
|
||||
|
||||
harvester sources [all]
|
||||
- lists harvest sources
|
||||
|
@ -398,8 +402,8 @@ interface:
|
|||
|
||||
Here you can also find other examples of custom harvesters:
|
||||
|
||||
* https://github.com/okfn/ckanext-pdeu/tree/master/ckanext/pdeu/harvesters
|
||||
* https://github.com/okfn/ckanext-inspire/ckanext/inspire/harvesters.py
|
||||
* https://github.com/ckan/ckanext-dcat/tree/master/ckanext/dcat/harvesters
|
||||
* https://github.com/ckan/ckanext-spatial/tree/master/ckanext/spatial/harvesters
|
||||
|
||||
|
||||
Running the harvest jobs
|
||||
|
@ -446,7 +450,7 @@ have already installed and configured the harvesting extension (See
|
|||
`Installation` if not).
|
||||
|
||||
Note: It is recommended to run the harvest process from a non-root user
|
||||
(generally the one you are running CKAN with). Replace the user `okfn` in the
|
||||
(generally the one you are running CKAN with). Replace the user `ckan` in the
|
||||
following steps with the one you are using.
|
||||
|
||||
1. Install Supervisor::
|
||||
|
@ -474,10 +478,10 @@ following steps with the one you are using.
|
|||
|
||||
[program:ckan_gather_consumer]
|
||||
|
||||
command=/var/lib/ckan/std/pyenv/bin/paster --plugin=ckanext-harvest harvester gather_consumer --config=/etc/ckan/std/std.ini
|
||||
command=/usr/lib//ckan/default/bin/paster --plugin=ckanext-harvest harvester gather_consumer --config=/etc/ckan/std/std.ini
|
||||
|
||||
; user that owns virtual environment.
|
||||
user=okfn
|
||||
user=ckan
|
||||
|
||||
numprocs=1
|
||||
stdout_logfile=/var/log/ckan/std/gather_consumer.log
|
||||
|
@ -488,10 +492,10 @@ following steps with the one you are using.
|
|||
|
||||
[program:ckan_fetch_consumer]
|
||||
|
||||
command=/var/lib/ckan/std/pyenv/bin/paster --plugin=ckanext-harvest harvester fetch_consumer --config=/etc/ckan/std/std.ini
|
||||
command=/usr/lib//ckan/default/bin/paster --plugin=ckanext-harvest harvester fetch_consumer --config=/etc/ckan/std/std.ini
|
||||
|
||||
; user that owns virtual environment.
|
||||
user=okfn
|
||||
user=ckan
|
||||
|
||||
numprocs=1
|
||||
stdout_logfile=/var/log/ckan/std/fetch_consumer.log
|
||||
|
@ -554,20 +558,44 @@ following steps with the one you are using.
|
|||
that will run the `run` harvester command periodically. To do so, edit the cron table with
|
||||
the following command (it may ask you to choose an editor)::
|
||||
|
||||
sudo crontab -e -u okfn
|
||||
sudo crontab -e -u ckan
|
||||
|
||||
Note that we are running this command as the same user we configured the processes to be run with
|
||||
(`okfn` in our example).
|
||||
(`ckan` in our example).
|
||||
|
||||
Paste this line into your crontab, again replacing the paths to paster and the ini file with yours::
|
||||
|
||||
# m h dom mon dow command
|
||||
*/15 * * * * /var/lib/ckan/std/pyenv/bin/paster --plugin=ckanext-harvest harvester run --config=/etc/ckan/std/std.ini
|
||||
*/15 * * * * /usr/lib/ckan/default/bin/paster --plugin=ckanext-harvest harvester run --config=/etc/ckan/std/std.ini
|
||||
|
||||
This particular example will check for pending jobs every fifteen minutes.
|
||||
You can of course modify this periodicity, this `Wikipedia page <http://en.wikipedia.org/wiki/Cron#CRON_expression>`_
|
||||
has a good overview of the crontab syntax.
|
||||
|
||||
Community
|
||||
=========
|
||||
|
||||
* Developer mailing list: `ckan-dev@lists.okfn.org <http://lists.okfn.org/mailman/listinfo/ckan-dev>`_
|
||||
* Developer IRC channel: `#ckan on irc.freenode.net <http://webchat.freenode.net/?channels=ckan>`_
|
||||
* `Issue tracker <https://github.com/ckan/ckanext-harvest/issues>`_
|
||||
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
||||
For contributing to ckanext-spatial or its documentation, follow the same
|
||||
guidelines that apply to CKAN core, described in
|
||||
`CONTRIBUTING <https://github.com/ckan/ckan/blob/master/CONTRIBUTING.rst>`_.
|
||||
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
This extension is open and licensed under the GNU Affero General Public License (AGPL) v3.0.
|
||||
Its full text may be found at:
|
||||
|
||||
http://www.fsf.org/licensing/licenses/agpl-3.0.html
|
||||
|
||||
|
||||
.. _Supervisor: http://supervisord.org
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ from pprint import pprint
|
|||
|
||||
from ckan import model
|
||||
from ckan.logic import get_action, ValidationError
|
||||
from ckanext.harvest.logic import NoNewHarvestJobError
|
||||
|
||||
from ckan.lib.cli import CkanCommand
|
||||
|
||||
|
@ -18,7 +19,10 @@ class Harvester(CkanCommand):
|
|||
- create new harvest source
|
||||
|
||||
harvester rmsource {id}
|
||||
- remove (inactivate) a harvester source
|
||||
- remove (deactivate) a harvester source, whilst leaving any related datasets, jobs and objects
|
||||
|
||||
harvester clearsource {id}
|
||||
- clears all datasets, jobs and objects related to a harvest source, but keeps the source itself
|
||||
|
||||
harvester sources [all]
|
||||
- lists harvest sources
|
||||
|
@ -110,8 +114,10 @@ class Harvester(CkanCommand):
|
|||
cmd = self.args[0]
|
||||
if cmd == 'source':
|
||||
self.create_harvest_source()
|
||||
elif cmd == "rmsource":
|
||||
elif cmd == 'rmsource':
|
||||
self.remove_harvest_source()
|
||||
elif cmd == 'clearsource':
|
||||
self.clear_harvest_source()
|
||||
elif cmd == 'sources':
|
||||
self.list_harvest_sources()
|
||||
elif cmd == 'job':
|
||||
|
@ -122,17 +128,19 @@ class Harvester(CkanCommand):
|
|||
self.run_harvester()
|
||||
elif cmd == 'gather_consumer':
|
||||
import logging
|
||||
from ckanext.harvest.queue import get_gather_consumer, gather_callback
|
||||
from ckanext.harvest.queue import (get_gather_consumer,
|
||||
gather_callback, get_gather_queue_name)
|
||||
logging.getLogger('amqplib').setLevel(logging.INFO)
|
||||
consumer = get_gather_consumer()
|
||||
for method, header, body in consumer.consume(queue='ckan.harvest.gather'):
|
||||
for method, header, body in consumer.consume(queue=get_gather_queue_name()):
|
||||
gather_callback(consumer, method, header, body)
|
||||
elif cmd == 'fetch_consumer':
|
||||
import logging
|
||||
logging.getLogger('amqplib').setLevel(logging.INFO)
|
||||
from ckanext.harvest.queue import get_fetch_consumer, fetch_callback
|
||||
from ckanext.harvest.queue import (get_fetch_consumer, fetch_callback,
|
||||
get_fetch_queue_name)
|
||||
consumer = get_fetch_consumer()
|
||||
for method, header, body in consumer.consume(queue='ckan.harvest.fetch'):
|
||||
for method, header, body in consumer.consume(queue=get_fetch_queue_name()):
|
||||
fetch_callback(consumer, method, header, body)
|
||||
elif cmd == 'purge_queues':
|
||||
from ckanext.harvest.queue import purge_queues
|
||||
|
@ -248,6 +256,16 @@ class Harvester(CkanCommand):
|
|||
get_action('harvest_source_delete')(context,{'id':source_id})
|
||||
print 'Removed harvest source: %s' % source_id
|
||||
|
||||
def clear_harvest_source(self):
|
||||
if len(self.args) >= 2:
|
||||
source_id = unicode(self.args[1])
|
||||
else:
|
||||
print 'Please provide a source id'
|
||||
sys.exit(1)
|
||||
context = {'model': model, 'user': self.admin_user['name'], 'session':model.Session}
|
||||
get_action('harvest_source_clear')(context,{'id':source_id})
|
||||
print 'Cleared harvest source: %s' % source_id
|
||||
|
||||
def list_harvest_sources(self):
|
||||
if len(self.args) >= 2 and self.args[1] == 'all':
|
||||
data_dict = {}
|
||||
|
@ -284,9 +302,10 @@ class Harvester(CkanCommand):
|
|||
|
||||
def run_harvester(self):
|
||||
context = {'model': model, 'user': self.admin_user['name'], 'session':model.Session}
|
||||
jobs = get_action('harvest_jobs_run')(context,{})
|
||||
|
||||
#print 'Sent %s jobs to the gather queue' % len(jobs)
|
||||
try:
|
||||
jobs = get_action('harvest_jobs_run')(context,{})
|
||||
except NoNewHarvestJobError:
|
||||
print 'There are no new harvest jobs to run.'
|
||||
|
||||
def import_stage(self):
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ import uuid
|
|||
|
||||
from sqlalchemy.sql import update,and_, bindparam
|
||||
from sqlalchemy.exc import InvalidRequestError
|
||||
from pylons import config
|
||||
|
||||
from ckan import plugins as p
|
||||
from ckan import model
|
||||
|
@ -38,6 +39,8 @@ class HarvesterBase(SingletonPlugin):
|
|||
|
||||
config = None
|
||||
|
||||
_user_name = None
|
||||
|
||||
def _gen_new_name(self, title):
|
||||
'''
|
||||
Creates a URL friendly name from a title
|
||||
|
@ -80,6 +83,46 @@ class HarvesterBase(SingletonPlugin):
|
|||
log_message = '{0}, line {1}'.format(message,line) if line else message
|
||||
log.debug(log_message)
|
||||
|
||||
def _get_user_name(self):
|
||||
'''
|
||||
Returns the name of the user that will perform the harvesting actions
|
||||
(deleting, updating and creating datasets)
|
||||
|
||||
By default this will be the old 'harvest' user to maintain
|
||||
compatibility. If not present, the internal site admin user will be
|
||||
used. This is the recommended setting, but if necessary it can be
|
||||
overridden with the `ckanext.harvest.user_name` config option:
|
||||
|
||||
ckanext.harvest.user_name = harvest
|
||||
|
||||
'''
|
||||
if self._user_name:
|
||||
return self._user_name
|
||||
|
||||
config_user_name = config.get('ckanext.harvest.user_name')
|
||||
if config_user_name:
|
||||
self._user_name = config_user_name
|
||||
return self._user_name
|
||||
|
||||
context = {'model': model,
|
||||
'ignore_auth': True,
|
||||
}
|
||||
|
||||
# Check if 'harvest' user exists and if is a sysadmin
|
||||
try:
|
||||
user_harvest = p.toolkit.get_action('user_show')(
|
||||
context, {'id': 'harvest'})
|
||||
if user_harvest['sysadmin']:
|
||||
self._user_name = 'harvest'
|
||||
return self._user_name
|
||||
except p.toolkit.ObjectNotFound:
|
||||
pass
|
||||
|
||||
context['defer_commit'] = True # See ckan/ckan#1714
|
||||
self._site_user = p.toolkit.get_action('get_site_user')(context, {})
|
||||
self._user_name = self._site_user['name']
|
||||
|
||||
return self._user_name
|
||||
|
||||
def _create_harvest_objects(self, remote_ids, harvest_job):
|
||||
'''
|
||||
|
@ -135,13 +178,10 @@ class HarvesterBase(SingletonPlugin):
|
|||
api_version = int(self.config.get('api_version', 2))
|
||||
except ValueError:
|
||||
raise ValueError('api_version must be an integer')
|
||||
|
||||
#TODO: use site user when available
|
||||
user_name = self.config.get('user', u'harvest')
|
||||
else:
|
||||
api_version = 2
|
||||
user_name = u'harvest'
|
||||
|
||||
user_name = self._get_user_name()
|
||||
context = {
|
||||
'model': model,
|
||||
'session': Session,
|
||||
|
|
|
@ -253,6 +253,8 @@ class CKANHarvester(HarvesterBase):
|
|||
|
||||
def import_stage(self,harvest_object):
|
||||
log.debug('In CKANHarvester import_stage')
|
||||
|
||||
context = {'model': model, 'session': Session, 'user': self._get_user_name()}
|
||||
if not harvest_object:
|
||||
log.error('No harvest object received')
|
||||
return False
|
||||
|
@ -288,7 +290,6 @@ class CKANHarvester(HarvesterBase):
|
|||
|
||||
# check if remote groups exist locally, otherwise remove
|
||||
validated_groups = []
|
||||
context = {'model': model, 'session': Session, 'user': 'harvest'}
|
||||
|
||||
for group_name in package_dict['groups']:
|
||||
try:
|
||||
|
@ -309,6 +310,7 @@ class CKANHarvester(HarvesterBase):
|
|||
|
||||
for key in ['packages', 'created', 'users', 'groups', 'tags', 'extras', 'display_name']:
|
||||
group.pop(key, None)
|
||||
|
||||
get_action('group_create')(context, group)
|
||||
log.info('Group %s has been newly created' % group_name)
|
||||
if self.api_version == 1:
|
||||
|
@ -318,7 +320,6 @@ class CKANHarvester(HarvesterBase):
|
|||
|
||||
package_dict['groups'] = validated_groups
|
||||
|
||||
context = {'model': model, 'session': Session, 'user': 'harvest'}
|
||||
|
||||
# Local harvest source organization
|
||||
source_dataset = get_action('package_show')(context, {'id': harvest_object.source.id})
|
||||
|
|
|
@ -7,3 +7,7 @@ except ImportError:
|
|||
|
||||
class HarvestJobExists(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class NoNewHarvestJobError(Exception):
|
||||
pass
|
||||
|
|
|
@ -26,7 +26,7 @@ from ckanext.harvest.plugin import DATASET_TYPE_NAME
|
|||
from ckanext.harvest.queue import get_gather_publisher, resubmit_jobs
|
||||
|
||||
from ckanext.harvest.model import HarvestSource, HarvestJob, HarvestObject
|
||||
from ckanext.harvest.logic import HarvestJobExists
|
||||
from ckanext.harvest.logic import HarvestJobExists, NoNewHarvestJobError
|
||||
from ckanext.harvest.logic.schema import harvest_source_show_package_schema
|
||||
|
||||
from ckanext.harvest.logic.action.get import harvest_source_show, harvest_job_list, _get_sources_for_user
|
||||
|
@ -154,6 +154,10 @@ def harvest_source_clear(context,data_dict):
|
|||
delete from package_revision where id in (select id from package where state = 'to_delete');
|
||||
delete from package_tag where package_id in (select id from package where state = 'to_delete');
|
||||
delete from package_extra where package_id in (select id from package where state = 'to_delete');
|
||||
delete from package_relationship_revision where subject_package_id in (select id from package where state = 'to_delete');
|
||||
delete from package_relationship_revision where object_package_id in (select id from package where state = 'to_delete');
|
||||
delete from package_relationship where subject_package_id in (select id from package where state = 'to_delete');
|
||||
delete from package_relationship where object_package_id in (select id from package where state = 'to_delete');
|
||||
delete from member where table_id in (select id from package where state = 'to_delete');
|
||||
delete from related_dataset where dataset_id in (select id from package where state = 'to_delete');
|
||||
delete from related where id in {related_ids};
|
||||
|
@ -361,7 +365,7 @@ def harvest_jobs_run(context,data_dict):
|
|||
jobs = harvest_job_list(context,{'source_id':source_id,'status':u'New'})
|
||||
if len(jobs) == 0:
|
||||
log.info('No new harvest jobs.')
|
||||
raise Exception('There are no new harvesting jobs')
|
||||
raise NoNewHarvestJobError('There are no new harvesting jobs')
|
||||
|
||||
# Send each job to the gather queue
|
||||
publisher = get_gather_publisher()
|
||||
|
|
|
@ -64,14 +64,25 @@ def get_connection_redis():
|
|||
port=int(config.get('ckan.harvest.mq.port', REDIS_PORT)),
|
||||
db=int(config.get('ckan.harvest.mq.redis_db', REDIS_DB)))
|
||||
|
||||
|
||||
def get_gather_queue_name():
|
||||
return 'ckan.harvest.{0}.gather'.format(config.get('ckan.site_id',
|
||||
'default'))
|
||||
|
||||
|
||||
def get_fetch_queue_name():
|
||||
return 'ckan.harvest.{0}.fetch'.format(config.get('ckan.site_id',
|
||||
'default'))
|
||||
|
||||
|
||||
def purge_queues():
|
||||
|
||||
backend = config.get('ckan.harvest.mq.type', MQ_TYPE)
|
||||
connection = get_connection()
|
||||
if backend in ('amqp', 'ampq'):
|
||||
channel = connection.channel()
|
||||
channel.queue_purge(queue='ckan.harvest.gather')
|
||||
channel.queue_purge(queue='ckan.harvest.fetch')
|
||||
channel.queue_purge(queue=get_gather_queue_name())
|
||||
channel.queue_purge(queue=get_fetch_queue_name())
|
||||
return
|
||||
if backend == 'redis':
|
||||
connection.flushall()
|
||||
|
@ -339,12 +350,12 @@ def fetch_and_import_stages(harvester, obj):
|
|||
obj.save()
|
||||
|
||||
def get_gather_consumer():
|
||||
consumer = get_consumer('ckan.harvest.gather','harvest_job_id')
|
||||
consumer = get_consumer(get_gather_queue_name(), 'harvest_job_id')
|
||||
log.debug('Gather queue consumer registered')
|
||||
return consumer
|
||||
|
||||
def get_fetch_consumer():
|
||||
consumer = get_consumer('ckan.harvest.fetch','harvest_object_id')
|
||||
consumer = get_consumer(get_fetch_queue_name(), 'harvest_object_id')
|
||||
log.debug('Fetch queue consumer registered')
|
||||
return consumer
|
||||
|
||||
|
|
|
@ -18,15 +18,15 @@
|
|||
{% block primary %}
|
||||
<article class="module">
|
||||
<div class="module-content">
|
||||
<h1>Harvesting Sources</h1>
|
||||
<h1>{% trans %}Harvesting Sources{% endtrans %}</h1>
|
||||
{% if c.status %}
|
||||
<div class="status">
|
||||
<h3>Status:</h3>
|
||||
<h3>{{ _('Status') }}:</h3>
|
||||
{{ h.literal(c.status) }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="new-harvest-source"><a href="harvest/new">Add a harvesting source</a></div>
|
||||
<div id="new-harvest-source"><a href="harvest/new">{% trans %}Add a harvesting source{% endtrans %}</a></div>
|
||||
|
||||
{% if c.sources %}
|
||||
<div id="show-inactive-sources-content">
|
||||
|
@ -36,15 +36,19 @@
|
|||
|
||||
<table id="harvest-sources" class="table table-bordered table-condensed ${'publishers' if c.publisher_auth else ''}" >
|
||||
<tr>
|
||||
<th class="action">View</th>
|
||||
<th class="action">Edit</th>
|
||||
<th class="action">Refresh</th>
|
||||
<th class="action">{{ _('View') }}</th>
|
||||
<th class="action">{{ _('Edit') }}</th>
|
||||
<th class="action">{{ _('Refresh'}}</th>
|
||||
<th class="url">URL</th>
|
||||
<th>Type</th>
|
||||
<th>Active</th>
|
||||
<th>Statistics</th>
|
||||
<th>Next Harvest</th>
|
||||
<th>Created</th>
|
||||
{# TRANSLATORS: Appears in harvest source table for the type of harvester #}
|
||||
<th>{{ _('Type')}}</th>
|
||||
{# TRANSLATORS: Appears in harvest source table 'is Active' #}
|
||||
<th>{{ _('Active')}}</th>
|
||||
<th>{{ _('Statistics') }}</th>
|
||||
{# TRANSLATORS: Appears in harvest source table 'date of next harvest #}
|
||||
<th>{{ _('Next Harvest') }}</th>
|
||||
{# TRANSLATORS: Appears in harvest source table date created #}
|
||||
<th>{{ _('Created') }}</th>
|
||||
</tr>
|
||||
{% set old_publisher = None %}
|
||||
{% for source in c.sources %}
|
||||
|
@ -78,7 +82,7 @@
|
|||
{% endfor %}
|
||||
</table>
|
||||
{% else %}
|
||||
<div id="no-harvest-sources">No harvest sources defined yet.</div>
|
||||
<div id="no-harvest-sources">{% trans %}No harvest sources defined yet.{% endtrans %}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</article>
|
||||
|
|
|
@ -50,15 +50,27 @@ Example:
|
|||
</tr>
|
||||
<tr>
|
||||
<th>{{ _('Created') }}</th>
|
||||
<td>{{ h.render_datetime(job.created, with_hours=True) }}</td>
|
||||
<td>
|
||||
<span class="datetime" data-datetime="{{ h.render_datetime(job.created, date_format='%Y-%m-%dT%H:%M:%S%z') }}">
|
||||
{{ h.render_datetime(job.created, with_hours=True) }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ _('Started') }}</th>
|
||||
<td>{{ h.render_datetime(job.gather_started, with_hours=True) }}</td>
|
||||
<td>
|
||||
<span class="datetime" data-datetime="{{ h.render_datetime(job.gather_started, date_format='%Y-%m-%dT%H:%M:%S%z') }}">
|
||||
{{ h.render_datetime(job.gather_started, with_hours=True) }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ _('Finished') }}</th>
|
||||
<td>{{ h.render_datetime(job.finished, with_hours=True) }}</td>
|
||||
<td>
|
||||
<span class="datetime" data-datetime="{{ h.render_datetime(job.finished, date_format='%Y-%m-%dT%H:%M:%S%z') }}">
|
||||
{{ h.render_datetime(job.finished, with_hours=True) }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{{ _('Status') }}</th>
|
||||
|
|
|
@ -1 +1 @@
|
|||
<p class="empty">There are no datasets associated to this harvest source.</p>
|
||||
<p class="empty">{% trans %}There are no datasets associated to this harvest source.{% endtrans %}</p>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{% block primary_content_inner %}
|
||||
<section class="module-content">
|
||||
<h1>Last Harvest Job</h1>
|
||||
<h1>{{ _('Last Harvest Job') }}</h1>
|
||||
{% if source.status and source.status.last_job %}
|
||||
{% snippet "snippets/job_details.html", job=source.status.last_job %}
|
||||
<div class="form-actions">
|
||||
|
|
|
@ -25,9 +25,15 @@
|
|||
{% endif %}
|
||||
</h3>
|
||||
<p>
|
||||
{{ _('Started:') }} {{ h.render_datetime(job.gather_started, with_hours=True) or _('Not yet') }}
|
||||
{{ _('Started:') }}
|
||||
<span class="datetime" data-datetime="{{ h.render_datetime(job.gather_started, date_format='%Y-%m-%dT%H:%M:%S%z') }}">
|
||||
{{ h.render_datetime(job.gather_started, with_hours=True) or _('Not yet') }}
|
||||
</span>
|
||||
—
|
||||
{{ _('Finished:') }} {{ h.render_datetime(job.finished, with_hours=True) or _('Not yet') }}
|
||||
{{ _('Finished:') }}
|
||||
<span class="datetime" data-datetime="{{ h.render_datetime(job.finished, date_format='%Y-%m-%dT%H:%M:%S%z') }}">
|
||||
{{ h.render_datetime(job.finished, with_hours=True) or _('Not yet') }}
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
{% if job.status == 'Finished' %}
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
|
||||
<form id="source-new" class="form-horizontal" method="post">
|
||||
{{ autoform.generate(form_items, data, errors, error_summary) }}
|
||||
<input id="save" name="save" value="Save" type="submit" class="btn"/> or <a href="/harvest">Return to the harvest sources list</a>
|
||||
<input id="save" name="save" value="Save" type="submit" class="btn"/> or <a href="/harvest">{% trans %}Return to the harvest sources list{% endtrans %}</a>
|
||||
</form>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{% block primary_content_inner %}
|
||||
<section class="module-content">
|
||||
<h1 class="hide-heading">Datasets</h1>
|
||||
<h1 class="hide-heading">{{ _('Datasets') }}</h1>
|
||||
{{ h.package_list_for_source(source.id) }}
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
|
|
@ -45,8 +45,8 @@
|
|||
{% endfor %}
|
||||
</div>
|
||||
{% if request.params and c.page.item_count == 0 %}
|
||||
<p class="extra">Try another search term,
|
||||
browse the sources below or <a href="{{ h.url_for('{0}_new'.format(c.dataset_type)) }}">{{ _('add a new one') }}</a>.
|
||||
<p class="extra">{% trans %}Try another search term,
|
||||
browse the sources below or {% endtrans %}<a href="{{ h.url_for('{0}_new'.format(c.dataset_type)) }}">{{ _('add a new one') }}</a>.
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
|
@ -92,10 +92,10 @@ class TestHarvestQueue(object):
|
|||
def test_01_basic_harvester(self):
|
||||
|
||||
### make sure queues/exchanges are created first and are empty
|
||||
consumer = queue.get_consumer('ckan.harvest.gather','harvest_job_id')
|
||||
consumer_fetch = queue.get_consumer('ckan.harvest.fetch','harvest_object_id')
|
||||
consumer.queue_purge(queue='ckan.harvest.gather')
|
||||
consumer_fetch.queue_purge(queue='ckan.harvest.fetch')
|
||||
consumer = queue.get_consumer('ckan.harvest.test.gather', 'harvest_job_id')
|
||||
consumer_fetch = queue.get_consumer('ckan.harvest.test.fetch', 'harvest_object_id')
|
||||
consumer.queue_purge(queue='ckan.harvest.test.gather')
|
||||
consumer_fetch.queue_purge(queue='ckan.harvest.test.fetch')
|
||||
|
||||
|
||||
user = logic.get_action('get_site_user')(
|
||||
|
|
|
@ -0,0 +1,567 @@
|
|||
# Translations template for ckanext-harvest.
|
||||
# Copyright (C) 2015 ORGANIZATION
|
||||
# This file is distributed under the same license as the ckanext-harvest
|
||||
# project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2015.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ckanext-harvest 0.2\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2015-06-10 12:12+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 0.9.6\n"
|
||||
|
||||
#: ckanext/harvest/helpers.py:70
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:41
|
||||
msgid "Group not found"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:43
|
||||
#, python-format
|
||||
msgid "Unauthorized to read group %s"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:69
|
||||
msgid "Cannot render description"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:151
|
||||
msgid "Groups"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:152
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:153
|
||||
msgid "Formats"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:154
|
||||
msgid "Licence"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:27
|
||||
msgid "Not authorized to see this page"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:44
|
||||
msgid "Harvesting source successfully cleared"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:46
|
||||
msgid "Harvesting source successfully inactivated"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:50 ckanext/harvest/controllers/view.py:61
|
||||
#: ckanext/harvest/controllers/view.py:82 ckanext/harvest/controllers/view.py:143
|
||||
#: ckanext/harvest/controllers/view.py:181 ckanext/harvest/controllers/view.py:192
|
||||
#: ckanext/harvest/controllers/view.py:218 ckanext/harvest/logic/auth/create.py:34
|
||||
#: ckanext/harvest/logic/auth/delete.py:18 ckanext/harvest/logic/auth/get.py:33
|
||||
#: ckanext/harvest/logic/auth/update.py:19
|
||||
msgid "Harvest source not found"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:59
|
||||
msgid "Refresh requested, harvesting will take place within 15 minutes."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:66
|
||||
msgid ""
|
||||
"Cannot create new harvest jobs on inactive sources. First, please change the "
|
||||
"source status to 'active'."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:69
|
||||
msgid "A harvest job has already been scheduled for this source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:80
|
||||
msgid "Harvest source cleared"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:108
|
||||
msgid "No content found"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:168
|
||||
msgid "Harvest job not found"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:201
|
||||
#: ckanext/harvest/templates_new/source/admin.html:15
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:13
|
||||
msgid "No jobs yet for this source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:19
|
||||
msgid "User {0} not authorized to create harvest sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:42
|
||||
msgid "User not authorized to create a job for source {0}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:52
|
||||
msgid "Only sysadmins can create harvest jobs for all sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:63
|
||||
msgid "Only the sysadmins can create harvest objects"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/delete.py:27
|
||||
msgid "User {0} not authorized to delete harvest source {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:42
|
||||
msgid "User {0} not authorized to read harvest source {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:82
|
||||
msgid "User {0} not authorized to see jobs from source {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:104
|
||||
msgid "User {0} not authorized to list jobs for source {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:28
|
||||
msgid "User {0} not authorized to update harvest source {1}"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:45
|
||||
msgid "Only sysadmins can reimport all harvest objects"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:57
|
||||
msgid "Only sysadmins can run the pending harvest jobs"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:68
|
||||
msgid "Only sysadmins can reindex all harvest sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/add_source_button.html:6
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:11
|
||||
msgid "Add Harvest Source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:26
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:38
|
||||
msgid "errors"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:41
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:48
|
||||
msgid "Id"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:52
|
||||
msgid "Created"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:56
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:60
|
||||
msgid "Finished"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:64
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_error_summary.html:18
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_error_summary.html:19
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/package_list_empty.html:1
|
||||
msgid "There are no datasets associated to this harvest source."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:4
|
||||
msgid "{number} harvest source found for \"{query}\""
|
||||
msgid_plural "{number} harvest sources found for \"{query}\""
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:5
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:17
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:27
|
||||
msgid "Sorry no harvest sources found for \"{query}\""
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:6
|
||||
msgid "{number} harvest source found"
|
||||
msgid_plural "{number} harvest sources found"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:7
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:25
|
||||
msgid "Sorry no harvest sources found"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:28
|
||||
msgid "Draft"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:30
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:83
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:37
|
||||
#: ckanext/harvest/templates_new/source/about.html:9
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:25
|
||||
msgid "There is no description for this harvest source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:42
|
||||
#: ckanext/harvest/templates_new/source/read.html:5
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:30
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:53
|
||||
msgid "Datasets"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:45
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:63
|
||||
msgid "Organization"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin.html:5
|
||||
msgid "Last Harvest Job"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin.html:11
|
||||
msgid "View full job report"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:7
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:4
|
||||
msgid "Admin"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:15
|
||||
msgid ""
|
||||
"This will re-run the harvesting for this source. Any updates at the source "
|
||||
"will overwrite the local datasets. Sources with a large number of datasets "
|
||||
"may take a significant amount of time to finish harvesting. Please confirm "
|
||||
"you would like us to start reharvesting."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:18
|
||||
msgid "Start a new harvesting job for this harvest source now"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:20
|
||||
msgid "Reharvest"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:24
|
||||
msgid ""
|
||||
"Warning: This will remove all datasets for this source, as well as all "
|
||||
"previous job reports. Are you sure you want to continue?"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:27
|
||||
msgid "Delete all harvest jobs and existing datasets from this source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:28
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:32
|
||||
msgid "View harvest source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:48
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:49
|
||||
msgid "Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:50
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/base.html:17
|
||||
msgid "Organizations"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/base.html:19
|
||||
#: ckanext/harvest/templates_new/source/base.html:22
|
||||
#: ckanext/harvest/templates_new/source/new.html:4
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:3
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:7
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:19
|
||||
#: ckanext/harvest/templates_new/source/search.html:7
|
||||
msgid "Harvest Sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/edit.html:3
|
||||
msgid "Edit harvest source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:5
|
||||
msgid "Create Harvest Source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:11
|
||||
msgid "Create harvest source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:23
|
||||
#: ckanext/harvest/templates_new/source/search.html:3
|
||||
msgid "Harvest sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:26
|
||||
msgid ""
|
||||
" Harvest sources allow importing remote metadata into this catalog. Remote "
|
||||
"sources can be other catalogs such as other CKAN instances, CSW servers or "
|
||||
"Web Accessible Folders (WAF) (depending on the actual harvesters enabled for "
|
||||
"this instance). "
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:8
|
||||
msgid "URL"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:10
|
||||
msgid "This should include the http:// part of the URL"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:14
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:14
|
||||
msgid "eg. A descriptive title"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:21
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:21
|
||||
msgid "eg. my-dataset"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:23
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:43
|
||||
msgid "Update frequency"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:46
|
||||
msgid "Configuration"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:66
|
||||
msgid "No organization"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:79
|
||||
msgid "State"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:82
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:92
|
||||
msgid ""
|
||||
"This will flag the source as deleted but keep all its datasets and previous "
|
||||
"jobs. Are you sure you want to delete this harvest source?"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:93
|
||||
msgid ""
|
||||
"Warning: Apart from deleting this source, this command will remove all its "
|
||||
"datasets, as well as all previous job reports. Are you sure you want to "
|
||||
"continue?"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:96
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:102
|
||||
msgid "Delete source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:107
|
||||
msgid "Delete and clear source"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/old_new_source_form.html:5
|
||||
msgid "Return to the harvest sources list"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:15
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:25
|
||||
msgid " found for \"{query}\""
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:31
|
||||
msgid "Search sources..."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:32
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:8
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:22
|
||||
msgid "read more"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:54
|
||||
msgid "About"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:44
|
||||
msgid "Relevance"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:45
|
||||
msgid "Name Ascending"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:46
|
||||
msgid "Name Descending"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:47
|
||||
msgid "Last Modified"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:48
|
||||
msgid "Popular"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:50
|
||||
msgid "Search harvest sources..."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:7
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:29
|
||||
msgid "All harvest sources"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:42
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:48
|
||||
msgid "Try another search term, browse the sources below or "
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:49
|
||||
msgid "add a new one"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:55
|
||||
msgid ""
|
||||
" <p><strong>There was an error while searching.</strong> Please try "
|
||||
"again.</p> "
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:5
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:10
|
||||
msgid "Harvest Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:21
|
||||
msgid "Job: "
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:28
|
||||
msgid "Started:"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:28
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:30
|
||||
msgid "Not yet"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:30
|
||||
msgid "Finished:"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:3
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:12
|
||||
msgid "Job Report"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:9
|
||||
msgid "Back to job list"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:18
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:22
|
||||
msgid "Error Summary"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:19
|
||||
msgid "No errors for this job"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:23
|
||||
msgid "Only the 20 most frequent errors are shown"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:26
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:40
|
||||
msgid "Job Errors"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:30
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:57
|
||||
msgid "Document Errors"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:37
|
||||
msgid "Error Report"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:58
|
||||
msgid "documents with errors"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:69
|
||||
msgid "Remote content"
|
||||
msgstr ""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:73
|
||||
msgid "Local content"
|
||||
msgstr ""
|
||||
|
Binary file not shown.
|
@ -0,0 +1,573 @@
|
|||
# Translations template for ckanext-harvest.
|
||||
# Copyright (C) 2015 ORGANIZATION
|
||||
# This file is distributed under the same license as the ckanext-harvest
|
||||
# project.
|
||||
#
|
||||
# Translators:
|
||||
# Börje Lewin <borjelewin@gmail.com>, 2015
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: ckanext-harvest\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2015-06-10 12:12+0100\n"
|
||||
"PO-Revision-Date: 2015-06-11 17:28+0000\n"
|
||||
"Last-Translator: Börje Lewin <borjelewin@gmail.com>\n"
|
||||
"Language-Team: Swedish (http://www.transifex.com/projects/p/ckanext-harvest/language/sv/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 0.9.6\n"
|
||||
"Language: sv\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ckanext/harvest/helpers.py:70
|
||||
msgid "title"
|
||||
msgstr "rubrik"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:41
|
||||
msgid "Group not found"
|
||||
msgstr "Hittar inte grupp"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:43
|
||||
#, python-format
|
||||
msgid "Unauthorized to read group %s"
|
||||
msgstr "Obehörig att läsa grupp %s"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:69
|
||||
msgid "Cannot render description"
|
||||
msgstr "Kan inte generera beskrivning"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:151
|
||||
msgid "Groups"
|
||||
msgstr "Grupper"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:152
|
||||
msgid "Tags"
|
||||
msgstr "Taggar"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:153
|
||||
msgid "Formats"
|
||||
msgstr "Format"
|
||||
|
||||
#: ckanext/harvest/controllers/organization.py:154
|
||||
msgid "Licence"
|
||||
msgstr "Licens"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:27
|
||||
msgid "Not authorized to see this page"
|
||||
msgstr "Obehörig att se denna sida"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:44
|
||||
msgid "Harvesting source successfully cleared"
|
||||
msgstr "Källan för skördning har raderats"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:46
|
||||
msgid "Harvesting source successfully inactivated"
|
||||
msgstr "Källan för skördning har avaktiverats"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:50
|
||||
#: ckanext/harvest/controllers/view.py:61
|
||||
#: ckanext/harvest/controllers/view.py:82
|
||||
#: ckanext/harvest/controllers/view.py:143
|
||||
#: ckanext/harvest/controllers/view.py:181
|
||||
#: ckanext/harvest/controllers/view.py:192
|
||||
#: ckanext/harvest/controllers/view.py:218
|
||||
#: ckanext/harvest/logic/auth/create.py:34
|
||||
#: ckanext/harvest/logic/auth/delete.py:18
|
||||
#: ckanext/harvest/logic/auth/get.py:33
|
||||
#: ckanext/harvest/logic/auth/update.py:19
|
||||
msgid "Harvest source not found"
|
||||
msgstr "Hittar inte källan"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:59
|
||||
msgid "Refresh requested, harvesting will take place within 15 minutes."
|
||||
msgstr "Uppdatering har begärts, skördning sker inom 15 minuter."
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:66
|
||||
msgid ""
|
||||
"Cannot create new harvest jobs on inactive sources. First, please change the"
|
||||
" source status to 'active'."
|
||||
msgstr "Kan inte skapa nya skördningsjobb för inaktiva källor. Ändra först källans status till 'aktiv'."
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:69
|
||||
msgid "A harvest job has already been scheduled for this source"
|
||||
msgstr "Ett skördningsjobb har redan schemalagts för denna källa"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:80
|
||||
msgid "Harvest source cleared"
|
||||
msgstr "Skördningskällan har rensats"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:108
|
||||
msgid "No content found"
|
||||
msgstr "Hittar inget innehåll"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:168
|
||||
msgid "Harvest job not found"
|
||||
msgstr "Hittar inte skördningsjobbet"
|
||||
|
||||
#: ckanext/harvest/controllers/view.py:201
|
||||
#: ckanext/harvest/templates_new/source/admin.html:15
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:13
|
||||
msgid "No jobs yet for this source"
|
||||
msgstr "Det finns inga jobb för denna källa"
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:19
|
||||
msgid "User {0} not authorized to create harvest sources"
|
||||
msgstr "Användaren {0} är inte behörig att skapa källor för skördning"
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:42
|
||||
msgid "User not authorized to create a job for source {0}"
|
||||
msgstr "Användaren är inte behörig att skapa jobb för källan {0}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:52
|
||||
msgid "Only sysadmins can create harvest jobs for all sources"
|
||||
msgstr "Endast systemadministratörer kan skapa skördningsjobb för alla källor"
|
||||
|
||||
#: ckanext/harvest/logic/auth/create.py:63
|
||||
msgid "Only the sysadmins can create harvest objects"
|
||||
msgstr "Endast systemadministratörer kan skapa skördningsobjekt"
|
||||
|
||||
#: ckanext/harvest/logic/auth/delete.py:27
|
||||
msgid "User {0} not authorized to delete harvest source {1}"
|
||||
msgstr "Användaren {0} är inte behörig att ta bort skördningskällan {1}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:42
|
||||
msgid "User {0} not authorized to read harvest source {1}"
|
||||
msgstr "Användaren {0} är inte behörig att läsa skördningskällan {1}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:82
|
||||
msgid "User {0} not authorized to see jobs from source {1}"
|
||||
msgstr "Användaren {0} är inte behörig att se jobb från källan {1}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/get.py:104
|
||||
msgid "User {0} not authorized to list jobs for source {1}"
|
||||
msgstr "Användaren {0} är inte behörig att lista jobb för källan {1}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:28
|
||||
msgid "User {0} not authorized to update harvest source {1}"
|
||||
msgstr "Användaren {0} är inte behörig att uppdater skördingskällan {1}"
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:45
|
||||
msgid "Only sysadmins can reimport all harvest objects"
|
||||
msgstr "Endast systemadministratörer kan importera om skördningsobjekt"
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:57
|
||||
msgid "Only sysadmins can run the pending harvest jobs"
|
||||
msgstr "Endast systemadministratörer kan köra väntande skördningsjobb"
|
||||
|
||||
#: ckanext/harvest/logic/auth/update.py:68
|
||||
msgid "Only sysadmins can reindex all harvest sources"
|
||||
msgstr "Endast systemadministratörer kan omindexera skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/add_source_button.html:6
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:11
|
||||
msgid "Add Harvest Source"
|
||||
msgstr "Lägg till skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:26
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:38
|
||||
msgid "errors"
|
||||
msgstr "fel"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:41
|
||||
msgid "Details"
|
||||
msgstr "Detaljer"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:48
|
||||
msgid "Id"
|
||||
msgstr "Id"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:52
|
||||
msgid "Created"
|
||||
msgstr "Skapad"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:56
|
||||
msgid "Started"
|
||||
msgstr "Påbörjad"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:60
|
||||
msgid "Finished"
|
||||
msgstr "Avslutad"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_details.html:64
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_error_summary.html:18
|
||||
msgid "Count"
|
||||
msgstr "Antal"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/job_error_summary.html:19
|
||||
msgid "Message"
|
||||
msgstr "Meddelande"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/package_list_empty.html:1
|
||||
msgid "There are no datasets associated to this harvest source."
|
||||
msgstr "Det finns inga dataset kopplade till denna skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:4
|
||||
msgid "{number} harvest source found for \"{query}\""
|
||||
msgid_plural "{number} harvest sources found for \"{query}\""
|
||||
msgstr[0] "{number} skördningskälla hittades för \"{query}\""
|
||||
msgstr[1] "{number} skördningskällor hittades för \"{query}\""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:5
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:17
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:27
|
||||
msgid "Sorry no harvest sources found for \"{query}\""
|
||||
msgstr "Hittar inga skördningskällor för \"{query}\""
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:6
|
||||
msgid "{number} harvest source found"
|
||||
msgid_plural "{number} harvest sources found"
|
||||
msgstr[0] "{number} skördningskälla hittades"
|
||||
msgstr[1] "{number} skördningskällor hittades"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/search_result_text.html:7
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:25
|
||||
msgid "Sorry no harvest sources found"
|
||||
msgstr "Hittade inga skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:28
|
||||
msgid "Draft"
|
||||
msgstr "Utkast"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:30
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:83
|
||||
msgid "Deleted"
|
||||
msgstr "Borttagen"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:37
|
||||
#: ckanext/harvest/templates_new/source/about.html:9
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:25
|
||||
msgid "There is no description for this harvest source"
|
||||
msgstr "Det finns ingen beskrivning för denna skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:42
|
||||
#: ckanext/harvest/templates_new/source/read.html:5
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:30
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:53
|
||||
msgid "Datasets"
|
||||
msgstr "Dataset"
|
||||
|
||||
#: ckanext/harvest/templates_new/snippets/source_item.html:45
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:63
|
||||
msgid "Organization"
|
||||
msgstr "Organisation"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin.html:5
|
||||
msgid "Last Harvest Job"
|
||||
msgstr "Sista skördningsjobb"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin.html:11
|
||||
msgid "View full job report"
|
||||
msgstr "Visa fullständig jobbrapport"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:7
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:4
|
||||
msgid "Admin"
|
||||
msgstr "Admin"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:15
|
||||
msgid ""
|
||||
"This will re-run the harvesting for this source. Any updates at the source "
|
||||
"will overwrite the local datasets. Sources with a large number of datasets "
|
||||
"may take a significant amount of time to finish harvesting. Please confirm "
|
||||
"you would like us to start reharvesting."
|
||||
msgstr "Skördningen kommer att köras igen för denna källa. Alla uppdateringar från källan kommer att ersätta lokala dataset. Källor med många dataset kan ta lång tid att skörda. Bekräfta om du vill starta en omskördning."
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:18
|
||||
msgid "Start a new harvesting job for this harvest source now"
|
||||
msgstr "Starta ett nytt skördningsjobb för denna skördningskälla nu."
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:20
|
||||
msgid "Reharvest"
|
||||
msgstr "Skörda om"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:24
|
||||
msgid ""
|
||||
"Warning: This will remove all datasets for this source, as well as all "
|
||||
"previous job reports. Are you sure you want to continue?"
|
||||
msgstr "Varning: Alla dataset för denna källa tas bort, liksom tidigare jobbrapporter. Vill du fortsätta?"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:27
|
||||
msgid "Delete all harvest jobs and existing datasets from this source"
|
||||
msgstr "Ta bort alla skördningsjobb och befintliga dataset från denna källa"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:28
|
||||
msgid "Clear"
|
||||
msgstr "Rensa"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:32
|
||||
msgid "View harvest source"
|
||||
msgstr "Visa skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:48
|
||||
msgid "Dashboard"
|
||||
msgstr "Kontrollpanel"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:49
|
||||
msgid "Jobs"
|
||||
msgstr "Jobb"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/admin_base.html:50
|
||||
msgid "Edit"
|
||||
msgstr "Redigera"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/base.html:17
|
||||
msgid "Organizations"
|
||||
msgstr "Organisationer"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/base.html:19
|
||||
#: ckanext/harvest/templates_new/source/base.html:22
|
||||
#: ckanext/harvest/templates_new/source/new.html:4
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:3
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:7
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:19
|
||||
#: ckanext/harvest/templates_new/source/search.html:7
|
||||
msgid "Harvest Sources"
|
||||
msgstr "Skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/edit.html:3
|
||||
msgid "Edit harvest source"
|
||||
msgstr "Redigera skördningskällo"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:5
|
||||
msgid "Create Harvest Source"
|
||||
msgstr "Skapa skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:11
|
||||
msgid "Create harvest source"
|
||||
msgstr "Skapa skördningskälla"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:23
|
||||
#: ckanext/harvest/templates_new/source/search.html:3
|
||||
msgid "Harvest sources"
|
||||
msgstr "Skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new.html:26
|
||||
msgid ""
|
||||
" Harvest sources allow importing remote metadata into this catalog. Remote "
|
||||
"sources can be other catalogs such as other CKAN instances, CSW servers or "
|
||||
"Web Accessible Folders (WAF) (depending on the actual harvesters enabled for"
|
||||
" this instance). "
|
||||
msgstr "Skördningskällor kan användas för att importera metadata till katalogen. Källor kan vara kataloger (t ex CKAN-instanser), CSW-servrar eller Web Accessible Folders (WAF), beroende på antalet aktiverade skördningsformat för instansen. "
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:8
|
||||
msgid "URL"
|
||||
msgstr "URL"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:10
|
||||
msgid "This should include the http:// part of the URL"
|
||||
msgstr "Denna URL ska börja med http://"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:14
|
||||
msgid "Title"
|
||||
msgstr "Rubrik"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:14
|
||||
msgid "eg. A descriptive title"
|
||||
msgstr "t ex Beskrivande rubrik"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:21
|
||||
msgid "Name"
|
||||
msgstr "Namn"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:21
|
||||
msgid "eg. my-dataset"
|
||||
msgstr "t ex mitt-dataset"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:23
|
||||
msgid "Description"
|
||||
msgstr "Beskrivning"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:43
|
||||
msgid "Update frequency"
|
||||
msgstr "Uppdateringsfrekvens"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:46
|
||||
msgid "Configuration"
|
||||
msgstr "Konfiguration"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:66
|
||||
msgid "No organization"
|
||||
msgstr "Ingen organisation"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:79
|
||||
msgid "State"
|
||||
msgstr "Status"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:82
|
||||
msgid "Active"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:92
|
||||
msgid ""
|
||||
"This will flag the source as deleted but keep all its datasets and previous "
|
||||
"jobs. Are you sure you want to delete this harvest source?"
|
||||
msgstr "Källan markeras som borttagen men alla dataset och tidigare jobb sparas. Vill du markera skördningskällan som borttagen?"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:93
|
||||
msgid ""
|
||||
"Warning: Apart from deleting this source, this command will remove all its "
|
||||
"datasets, as well as all previous job reports. Are you sure you want to "
|
||||
"continue?"
|
||||
msgstr "Varning. Förutom att källan tas bort, raderas även alla källans dataset och tidigare jobbrapporter. Vill du fortsätta med raderingen?"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:96
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:102
|
||||
msgid "Delete source"
|
||||
msgstr "Ta bort källa"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/new_source_form.html:107
|
||||
msgid "Delete and clear source"
|
||||
msgstr "Ta bort och rensa källa"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/old_new_source_form.html:5
|
||||
msgid "Return to the harvest sources list"
|
||||
msgstr "Återgå till listan med skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:15
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:25
|
||||
msgid " found for \"{query}\""
|
||||
msgstr " hittades för \"{query}\""
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:31
|
||||
msgid "Search sources..."
|
||||
msgstr "Sök källor..."
|
||||
|
||||
#: ckanext/harvest/templates_new/source/org_source_list.html:32
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:8
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:22
|
||||
msgid "read more"
|
||||
msgstr "läs mer"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/read_base.html:54
|
||||
msgid "About"
|
||||
msgstr "Om"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:44
|
||||
msgid "Relevance"
|
||||
msgstr "Relevans"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:45
|
||||
msgid "Name Ascending"
|
||||
msgstr "Namn (stigande)"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:46
|
||||
msgid "Name Descending"
|
||||
msgstr "Namn (fallande)"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:47
|
||||
msgid "Last Modified"
|
||||
msgstr "Senast ändrad"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:48
|
||||
msgid "Popular"
|
||||
msgstr "Populär"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search.html:50
|
||||
msgid "Search harvest sources..."
|
||||
msgstr "Sök skördningskällor..."
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:7
|
||||
msgid "Search..."
|
||||
msgstr "Sök..."
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:29
|
||||
msgid "All harvest sources"
|
||||
msgstr "Alla skördningskällor"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:42
|
||||
msgid "Remove"
|
||||
msgstr "Radera"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:48
|
||||
msgid "Try another search term, browse the sources below or "
|
||||
msgstr "Försök med en annan sökning, välj bland källorna nedan eller "
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:49
|
||||
msgid "add a new one"
|
||||
msgstr "lägg till en ny"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/search_2.0.html:55
|
||||
msgid ""
|
||||
" <p><strong>There was an error while searching.</strong> Please try "
|
||||
"again.</p> "
|
||||
msgstr " <p><strong>Fel vid sökning.</strong> Försök igen.</p> "
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:5
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:10
|
||||
msgid "Harvest Jobs"
|
||||
msgstr "Skördningsjobb"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:21
|
||||
msgid "Job: "
|
||||
msgstr "Jobb:"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:28
|
||||
msgid "Started:"
|
||||
msgstr "Påbörjade:"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:28
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:30
|
||||
msgid "Not yet"
|
||||
msgstr "Inte ännu"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/list.html:30
|
||||
msgid "Finished:"
|
||||
msgstr "Avslutade:"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:3
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:12
|
||||
msgid "Job Report"
|
||||
msgstr "Jobbrapport"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:9
|
||||
msgid "Back to job list"
|
||||
msgstr "Tillbaka till jobblistan"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:18
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:22
|
||||
msgid "Error Summary"
|
||||
msgstr "Översikt för felaktigheter"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:19
|
||||
msgid "No errors for this job"
|
||||
msgstr "Inga felaktigheter för detta jobb"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:23
|
||||
msgid "Only the 20 most frequent errors are shown"
|
||||
msgstr "Endast de 20 vanligaste felen visas"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:26
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:40
|
||||
msgid "Job Errors"
|
||||
msgstr "Jobbfel"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:30
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:57
|
||||
msgid "Document Errors"
|
||||
msgstr "Dokumentfel"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:37
|
||||
msgid "Error Report"
|
||||
msgstr "Felrapport"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:58
|
||||
msgid "documents with errors"
|
||||
msgstr "dokument med fel"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:69
|
||||
msgid "Remote content"
|
||||
msgstr "Fjärrinnehåll"
|
||||
|
||||
#: ckanext/harvest/templates_new/source/job/read.html:73
|
||||
msgid "Local content"
|
||||
msgstr "Lokalt innehåll"
|
22
setup.cfg
22
setup.cfg
|
@ -1,2 +1,24 @@
|
|||
[nosetests]
|
||||
with-pylons = test.ini
|
||||
|
||||
[extract_messages]
|
||||
keywords = translate isPlural
|
||||
add_comments = TRANSLATORS:
|
||||
output_file = i18n/ckanext-harvest.pot
|
||||
width = 80
|
||||
|
||||
[init_catalog]
|
||||
domain = ckanext-harvest
|
||||
input_file = i18n/ckanext-harvest.pot
|
||||
output_dir = i18n
|
||||
|
||||
[update_catalog]
|
||||
domain = ckanext-harvest
|
||||
input_file = i18n/ckanext-harvest.pot
|
||||
output_dir = i18n
|
||||
previous = true
|
||||
|
||||
[compile_catalog]
|
||||
domain = ckanext-harvest
|
||||
directory = i18n
|
||||
statistics = true
|
||||
|
|
9
setup.py
9
setup.py
|
@ -39,5 +39,14 @@ setup(
|
|||
test_action_harvester=ckanext.harvest.tests.test_action:MockHarvesterForActionTests
|
||||
[paste.paster_command]
|
||||
harvester = ckanext.harvest.commands.harvester:Harvester
|
||||
[babel.extractors]
|
||||
ckan = ckan.lib.extract:extract_ckan
|
||||
""",
|
||||
message_extractors={
|
||||
'ckanext': [
|
||||
('**.py', 'python', None),
|
||||
('**.js', 'javascript', None),
|
||||
('**/templates_new/**.html', 'ckan', None),
|
||||
],
|
||||
}
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue