本文整理汇总了Python中ckan.model.meta.Session.add方法的典型用法代码示例。如果您正苦于以下问题:Python Session.add方法的具体用法?Python Session.add怎么用?Python Session.add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ckan.model.meta.Session
的用法示例。
在下文中一共展示了Session.add方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: sync_irods
# 需要导入模块: from ckan.model.meta import Session [as 别名]
# 或者: from ckan.model.meta.Session import add [as 别名]
def sync_irods(params, id):
"""
Fetches a resource from database with the same path as user specified and
that matches an existing resource in CKAN.
"""
from irods import getFileUserMetadata, rcModAccessControl
rev = model.repo.new_revision()
conn = get_connection_from_params(params)
resource = Resource.get(id)
path = params['path']
extras = {}
# Lets handle only resources with file names
if resource.name:
fname = "%s/%s" % (path, resource.name.split('/')[-1])
log.debug(fname)
i = 0
access = rcModAccessControl()
log.debug(access.getPath())
if conn:
for met in getFileUserMetadata(conn, fname):
i += 1
key, value, _ = met
extras[key] = value
resource.extras = extras
Session.add(resource)
conn.disconnect()
model.repo.commit()
rev.message = "Update from iRODS, matched file %s" % fname
h.flash_success("iRODS import to resource OK! Imported %s metadatas" % i)
else:
h.flash_error("Could not connect to iRODS!")
else:
h.flash_error("Resource is an URL, cannot import!")
h.redirect_to(controller='package', action='resource_read', \
id=resource.resource_group.package.name, \
resource_id=resource.id)
示例2: import_collection_to_package
# 需要导入模块: from ckan.model.meta import Session [as 别名]
# 或者: from ckan.model.meta.Session import add [as 别名]
def import_collection_to_package(params, id):
"""
Import a collection to dataset. Does not import whole file data but
rather the metadata.
"""
from irods import irodsCollection
path = params['path']
pkg = Package.get(id)
conn = get_connection_from_params(params)
if (conn):
coll = irodsCollection(conn, path)
from irods import iRodsOpen
rev = model.repo.new_revision()
i = 0
for obj in coll.getObjects():
extras = {}
fname, _ = obj
fpath = "%s/%s" % (coll.getCollName(), fname)
f = iRodsOpen(conn, fpath, 'r')
if f:
i += 1
res = Resource.by_name(fname)
if not res:
res = Resource(url = '', name=fname, extras=extras, \
resource_type='file')
for met in f.getUserMetadata():
key, value, _ = met
extras[key] = value
res.extras = extras
resgrp = pkg.resource_groups[0]
resgrp.resources.append(res)
Session.add(res)
Session.add(resgrp)
rev.message = "Update from iRODS, matched file %s" % fname
for met in coll.getUserMetadata():
key, value, _ = met
pkg.extras[key] = value
Session.add(pkg)
model.repo.commit()
conn.disconnect()
h.flash_success("iRODS import to dataset OK! Imported %s resources." % i)
else:
h.flash_error("Could not connect to iRODS!")
h.redirect_to(controller='package', action='read', id=id)
示例3: create
# 需要导入模块: from ckan.model.meta import Session [as 别名]
# 或者: from ckan.model.meta.Session import add [as 别名]
def create(cls, **kwargs):
instance = cls(**kwargs)
Session.add(instance)
Session.commit()
return instance.as_dict()
示例4: __call__
# 需要导入模块: from ckan.model.meta import Session [as 别名]
# 或者: from ckan.model.meta.Session import add [as 别名]
def __call__(self, environ, start_response):
if self.drupal_client is None:
self.drupal_client = DrupalClient()
# establish from the cookie whether ckan and drupal are signed in
ckan_signed_in = [False]
drupal_signed_in = [False]
for k, v in environ.items():
key = k.lower()
if key == 'http_cookie':
ckan_signed_in[0] = is_ckan_signed_in(v)
drupal_signed_in[0] = drupal_extract_cookie(v)
ckan_signed_in = ckan_signed_in[0]
drupal_signed_in = drupal_signed_in[0]
environ['drupal.uid'] = None
environ['drupal.publishers'] = None
new_start_response = start_response
if drupal_signed_in and not ckan_signed_in:
# get info about the user from drupal and store in environ for
# use by main CKAN app
user_id = self.drupal_client.get_user_id_from_session_id(drupal_signed_in)
res = self.drupal_client.get_user_properties(user_id)
environ['drupal.uid'] = res['uid']
environ['drupal.publishers'] = res['publishers']
environ['drupal.name'] = res['name']
from ckan import model
from ckan.model.meta import Session
def munge(username):
username.lower().replace(' ', '_')
return username
# Add the new Drupal user if they don't already exist.
query = Session.query(model.User).filter_by(name=unicode(environ['drupal.uid']))
if not query.count():
user = model.User(
name=munge(unicode(environ['drupal.uid'])),
fullname=unicode(environ['drupal.name']),
about=u'Drupal auto-generated user',
)
Session.add(user)
Session.commit()
else:
user = query.one()
# We want to store values in the user's cookie, so
# prepare the response header with this value,
# using auth_tkt to sign it.
new_header = environ['repoze.who.plugins']['auth_tkt'].remember(
environ,
{
'repoze.who.userid': environ['drupal.uid'],
'tokens': '',
'userdata': '',
}
)
# e.g. new_header = [('Set-Cookie', 'bob=ab48fe; Path=/;')]
cookie_template = new_header[0][1].split('; ')
cookie_string = ''
for name, value in [
('ckan_apikey', user.apikey),
('ckan_display_name', user.fullname),
('ckan_user', user.name),
]:
cookie_string += '; %s="%s"'%(name, value)
new_cookie = cookie_template[:]
new_cookie[0] = '%s="%s"'%(name, value)
new_header.append(('Set-Cookie', str('; '.join(new_cookie))))
# Also need these cookies to work too:
# ckan_apikey
# Value "3a51edc6-6461-46b8-bfe2-57445cbdeb2b"
# Host catalogue.dev.dataco.coi.gov.uk
# Path /
# Secure No
# Expires At End Of Session
#
#
# Name ckan_display_name
# Value "James Gardner"
# Host catalogue.dev.dataco.coi.gov.uk
# Path /
# Secure No
# Expires At End Of Session
#
#
# Name ckan_user
# Value "4466"
# Host catalogue.dev.dataco.coi.gov.uk
# Path /
# Secure No
# Expires At End Of Session
# @@@ Need to add the headers to the request too so that the rest of the stack can sign the user in.
#.........这里部分代码省略.........
示例5: _do_wordpress_login
# 需要导入模块: from ckan.model.meta import Session [as 别名]
# 或者: from ckan.model.meta.Session import add [as 别名]
def _do_wordpress_login(self, environ, wordpress_session_id, new_headers):
'''Given a WordPress cookie\'s session ID, check it with WordPress, create/modify
the equivalent CKAN user with properties copied from WordPress and log the
person in with auth_tkt and its cookie.
'''
if self.wordpress_client is None:
self.wordpress_client = WordPressClient(environ)
else:
# Warning! These must be called, or the user data will quite often be wrong.
# self.wordpress_client may sometimes be a properly set up object with wrong data.
self.wordpress_client.reset_data()
self.wordpress_client.update_cookies(environ)
# ask wp for the wordpress_user_id for this session
wordpress_user_id = self.wordpress_client.get_user_id()
if not wordpress_user_id:
log.error('WordPress said the session ID found in the cookie is not valid.')
return
# ask wp about this user
user_properties = self.wordpress_client.get_user_properties()
# see if user already exists in CKAN
ckan_user_name = WordPressUserMapping.wordpress_id_to_ckan_user_name(wordpress_user_id)
log.debug('_do_wordpress_login ->')
log.debug(str(wordpress_session_id))
log.debug(str(wordpress_user_id))
log.debug(str(ckan_user_name))
log.debug('<- _do_wordpress_login')
from ckan import model
from ckan.model.meta import Session
query = Session.query(model.User).filter_by(name=unicode(ckan_user_name))
if not query.count():
# need to add this user to CKAN
#raise Exception('Got this userdata:' + str(user_properties))
# http://stackoverflow.com/questions/1697815/how-do-you-convert-a-python-time-struct-time-object-into-a-datetime-object
def convertSQLDateTimeToDatetime(value):
return datetime.datetime.fromtimestamp(time.mktime(time.strptime(value, '%Y-%m-%d %H:%M:%S')))
date_created = convertSQLDateTimeToDatetime(user_properties['data']['user_registered'])
user = model.User(
name=ckan_user_name,
fullname=unicode(user_properties['data']['display_name']), # NB may change in WordPress db
about=u'User account imported from WordPress system.',
email=user_properties['data']['user_email'], # NB may change in WordPress db
created=date_created,
)
Session.add(user)
Session.commit()
log.debug('WordPress user added to CKAN as: %s', user.name)
else:
user = query.one()
log.debug('WordPress user found in CKAN: %s for ckan_user_name: %s', user.name, ckan_user_name)
self.set_roles(ckan_user_name, user_properties['roles'])
# There is a chance that on this request we needed to get authtkt
# to log-out. This would have created headers like this:
# 'Set-Cookie', 'auth_tkt="INVALID"...'
# but since we are about to login again, which will create a header
# setting that same cookie, we need to get rid of the invalidation
# header first.
new_headers[:] = [(key, value) for (key, value) in new_headers \
if (not (key=='Set-Cookie' and value.startswith('auth_tkt="INVALID"')))]
#log.debug('Headers reduced to: %r', new_headers)
# Ask auth_tkt to remember this user so that subsequent requests
# will be authenticated by auth_tkt.
# auth_tkt cookie template needs to also go in the response.
identity = {'repoze.who.userid': str(ckan_user_name),
'tokens': '',
'userdata': wordpress_session_id}
headers = environ['repoze.who.plugins']['hri_auth_tkt'].remember(environ, identity)
if headers:
new_headers.extend(headers)
# Tell app during this request that the user is logged in
environ['REMOTE_USER'] = user.name
log.debug('Set REMOTE_USER = %r', user.name)