[ckan-dev] How to load Ckan configuration inside extension?

Sean Hammond sean.hammond at okfn.org
Mon Jul 9 08:34:46 UTC 2012


Hi Eduardo, are you sure you don't want to use ckanext-harvest for this?

https://github.com/okfn/ckanext-harvest

It's an officially supported extension that might do just what you want.

Alternatively, if you could put your extension as a whole on github I
could take a look at it for you

On Thu, Jul 05, 2012 at 07:01:01PM -0300, Eduardo Santos wrote:
> Hi everybody,
> 
> I'm sure this is a slilly doubt, but I'm working on it for weeks and still
> don't know the answer. Maybe the problem is that I'm not the best Python
> programmer myself. :)
> 
> The problem is: I'm creating a Ckan extension that will run as daemon to
> import data from external sources and load it into Ckan as resources. I
> know there are a lot of extensions to do it, but the fastest way was to
> build my own. I have the following code:
> 
> 
> <code>
> from logging import getLogger
> from sqlalchemy import event
> from sqlalchemy import distinct
> from sqlalchemy import Table
> from sqlalchemy import Column
> from sqlalchemy.engine.reflection import Inspector
> from sqlalchemy.orm import backref, relation
> 
> from ckan.lib.base import config
> from ckan import model
> from ckan.model.meta import *
> from ckan.model.domain_object import DomainObject
> 
> def setup():
> 
>     if datadaemon_table is None or error_table is None:
>         define_tables()
>         log.debug('Spatial tables defined in memory')
> 
>     if model.repo.are_tables_created():
> 
>         if not datadaemon_table.exists():
>             try:
>                 datadaemon_table.create()
>             except Exception,e:
>                 # Make sure the table does not remain incorrectly created
>                 # (eg without geom column or constraints)
>                 if datadaemon_table.exists():
>                     Session.execute('DROP TABLE dt_files')
>                     Session.commit()
> 
>                 raise e
> 
>             log.debug('Datadaemon tables created')
>         else:
>             log.debug('Datadaemon tables already exist')
>             # Future migrations go here
> 
>     def __repr__(self):
>         return "<DataRepository('%s','%s', '%s')>" % (self.hash,
> self.original_file, self.creation_date)
> 
> 
> class DataRepository(DomainObject):
>     """
>     The repository will hold information about every uploaded files
>     """
>     __tablename__ = 'dt_files'
> 
>     hash = Column(UnicodeText, primary_key=True,nullable=False)
>     original_file = Column(UnicodeText,nullable=False)
>     creation_date = Column(DateTime(timezone=True),server_default='now()')
> 
>     def __init__(self, hash, original_file, creation_date):
>         self.hash = hash
>         self.original_file = original_file
>         self.creation_date = creation_date
> </code>
> 
> 
> I'm creating a class that will add some tables to the system. In another
> file there's the following code:
> 
> 
> <code>
> from ckan import plugins
> from ckanext.datadaemon.model import setup as setup_model
> from ckan.logic import get_action
> from ckan import model
> 
>  <goog_989364852>
> from ckanext.datadaemon.model import setup as setup_model
> from ckanext.datadaemon.model import DataRepository
> 
> <goog_989364840>
> setup_model()
> </code>
> 
> At that point, when I call setup_model(), I get the following error:
> 
> UnboundExecutionError: The MetaData is not bound to an Engine or
> Connection.  Execution can not proceed without a database to execute
> against.  Either execute with an explicit connection or assign the
> MetaData's .bind to enable implicit execution.
> 
> It seems like the script is not loading pylons configuration containing
> database connections.
> 
> Can somebody point me how I can load configuration parameters from ckan
> development.ini file?
> 
> -- 
> Eduardo Santos
> Analista de Sistemas
> 
> http://www.eduardosan.com
> http://twitter.com/eduardosan

> _______________________________________________
> ckan-dev mailing list
> ckan-dev at lists.okfn.org
> http://lists.okfn.org/mailman/listinfo/ckan-dev





More information about the ckan-dev mailing list