本文整理汇总了Python中website.models.Node.find方法的典型用法代码示例。如果您正苦于以下问题:Python Node.find方法的具体用法?Python Node.find怎么用?Python Node.find使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类website.models.Node
的用法示例。
在下文中一共展示了Node.find方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: search_projects_by_title
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def search_projects_by_title(**kwargs):
""" Search for nodes by title. Can pass in arguments from the URL to modify the search
:arg term: The substring of the title.
:arg category: Category of the node.
:arg isDeleted: yes, no, or either. Either will not add a qualifier for that argument in the search.
:arg isFolder: yes, no, or either. Either will not add a qualifier for that argument in the search.
:arg isRegistration: yes, no, or either. Either will not add a qualifier for that argument in the search.
:arg includePublic: yes or no. Whether the projects listed should include public projects.
:arg includeContributed: yes or no. Whether the search should include projects the current user has
contributed to.
:arg ignoreNode: a list of nodes that should not be included in the search.
:return: a list of dictionaries of projects
"""
# TODO(fabianvf): At some point, it would be nice to do this with elastic search
user = kwargs['auth'].user
term = request.args.get('term', '')
max_results = int(request.args.get('maxResults', '10'))
category = request.args.get('category', 'project').lower()
is_deleted = request.args.get('isDeleted', 'no').lower()
is_folder = request.args.get('isFolder', 'no').lower()
is_registration = request.args.get('isRegistration', 'no').lower()
include_public = request.args.get('includePublic', 'yes').lower()
include_contributed = request.args.get('includeContributed', 'yes').lower()
ignore_nodes = request.args.getlist('ignoreNode', [])
matching_title = (
Q('title', 'icontains', term) & # search term (case insensitive)
Q('category', 'eq', category) # is a project
)
matching_title = conditionally_add_query_item(matching_title, 'is_deleted', is_deleted)
matching_title = conditionally_add_query_item(matching_title, 'is_folder', is_folder)
matching_title = conditionally_add_query_item(matching_title, 'is_registration', is_registration)
if len(ignore_nodes) > 0:
for node_id in ignore_nodes:
matching_title = matching_title & Q('_id', 'ne', node_id)
my_projects = []
my_project_count = 0
public_projects = []
if include_contributed == "yes":
my_projects = Node.find(
matching_title &
Q('contributors', 'eq', user._id) # user is a contributor
).limit(max_results)
my_project_count = my_project_count
if my_project_count < max_results and include_public == "yes":
public_projects = Node.find(
matching_title &
Q('is_public', 'eq', True) # is public
).limit(max_results - my_project_count)
results = list(my_projects) + list(public_projects)
ret = process_project_search_results(results, **kwargs)
return ret
示例2: set_tag_many_to_many_on_nodes
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def set_tag_many_to_many_on_nodes(page_size=10000):
print 'Starting {}...'.format(sys._getframe().f_code.co_name)
node_count = 0
m2m_count = 0
start = datetime.now()
total = MODMNode.find(build_query(m2m_tag_fields, MODMNode)).count()
print '{} Nodes'.format(total)
while node_count < total:
with transaction.atomic():
for modm_node in MODMNode.find(build_query(
m2m_tag_fields, MODMNode)).sort('-date_modified')[
node_count:page_size + node_count]:
django_node = Node.objects.get(
pk=modm_to_django[modm_node._id])
for m2m_tag_field in m2m_tag_fields:
try:
attr = getattr(django_node, m2m_tag_field)
except AttributeError as ex:
# node field doesn't exist on node
pass
else:
# node field exists, do the stuff
django_pks = []
for modm_m2m_value in getattr(modm_node, m2m_tag_field,
[]):
suffix = 'system' if m2m_tag_field == 'system_tags' else 'not_system'
if isinstance(modm_m2m_value, MODMTag):
django_pks.append(modm_to_django[
'{}:{}'.format(modm_m2m_value._id,
suffix)])
elif isinstance(modm_m2m_value, basestring):
django_pks.append(modm_to_django[
'{}:{}'.format(modm_m2m_value, suffix)])
elif modm_m2m_value is None:
print 'Tag of None found on Node {}'.format(
modm_node._id)
else:
# wth
print '\a' # bells!
print '\a'
print '\a'
print '\a'
print '\a'
print '\a'
print '\a'
import bpdb
bpdb.set_trace()
if len(django_pks) > 0:
attr.add(*django_pks)
m2m_count += len(django_pks)
node_count += 1
if node_count % page_size == 0 or node_count == total:
print 'Through {} nodes and {} m2m'.format(node_count,
m2m_count)
print 'Done with {} in {} seconds...'.format(
sys._getframe().f_code.co_name,
(datetime.now() - start).total_seconds())
示例3: set_node_many_to_many_on_nodes
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def set_node_many_to_many_on_nodes(page_size=5000):
print 'Starting {}...'.format(sys._getframe().f_code.co_name)
node_count = 0
m2m_count = 0
start = datetime.now()
total = MODMNode.find(
build_query(m2m_node_fields, MODMNode),
allow_institution=True).count()
print '{} Nodes'.format(total)
while node_count < total:
with transaction.atomic():
for modm_node in MODMNode.find(
build_query(m2m_node_fields, MODMNode),
allow_institution=True).sort('-date_modified')[
node_count:page_size + node_count]:
django_node = Node.objects.get(
pk=modm_to_django[modm_node._id])
for m2m_node_field in m2m_node_fields:
attr = getattr(django_node, m2m_node_field)
django_pks = []
for modm_m2m_value in getattr(modm_node, m2m_node_field,
[]):
if isinstance(modm_m2m_value, MODMNode):
django_pks.append(modm_to_django[
modm_m2m_value._id])
elif isinstance(modm_m2m_value, basestring):
django_pks.append(modm_to_django[modm_m2m_value])
elif isinstance(modm_m2m_value, Pointer):
django_pks.append(modm_to_django[
modm_m2m_value.node._id])
else:
# wth
print '\a'
print '\a'
print '\a'
print '\a'
print '\a'
print '\a'
print '\a'
import bpdb
bpdb.set_trace()
if len(django_pks) > 0:
attr.add(*django_pks)
m2m_count += len(django_pks)
node_count += 1
if node_count % page_size == 0 or node_count == total:
print 'Through {} nodes and {} m2m'.format(node_count,
m2m_count)
print 'Done with {} in {} seconds...'.format(
sys._getframe().f_code.co_name,
(datetime.now() - start).total_seconds())
示例4: save_bare_nodes
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def save_bare_nodes(page_size=20000):
print 'Starting {}...'.format(sys._getframe().f_code.co_name)
count = 0
start = datetime.now()
total = MODMNode.find(allow_institution=True).count()
while count < total:
with transaction.atomic():
nids = []
for modm_node in MODMNode.find(
allow_institution=True).sort('-date_modified')[
count:count + page_size]:
guid = Guid.objects.get(guid=modm_node._id)
node_fields = dict(_guid_id=guid.pk, **modm_node.to_storage())
# remove fields not yet implemented
cleaned_node_fields = {key: node_fields[key]
for key in node_fields
if key not in node_key_blacklist}
# make datetimes not naive
for k, v in cleaned_node_fields.iteritems():
if isinstance(v, datetime):
cleaned_node_fields[k] = pytz.utc.localize(v)
# remove null fields, postgres hate null fields
cleaned_node_fields = {k: v
for k, v in
cleaned_node_fields.iteritems()
if v is not None}
nids.append(Node(**cleaned_node_fields))
count += 1
if count % page_size == 0 or count == total:
then = datetime.now()
print 'Saving nodes {} through {}...'.format(
count - page_size, count)
woot = Node.objects.bulk_create(nids)
for wit in woot:
modm_to_django[wit._guid.guid] = wit.pk
now = datetime.now()
print 'Done with {} nodes in {} seconds...'.format(
len(woot), (now - then).total_seconds())
nids = []
trash = gc.collect()
print 'Took out {} trashes'.format(trash)
print 'Modm Nodes: {}'.format(total)
print 'django Nodes: {}'.format(Node.objects.all().count())
print 'Done with {} in {} seconds...'.format(
sys._getframe().f_code.co_name,
(datetime.now() - start).total_seconds())
示例5: get_projects_public
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects_public():
projects_public = Node.find(
Q('parent_node', 'eq', None) &
Q('is_public', 'eq', True) &
CONTENT_NODE_QUERY
)
return projects_public
示例6: get_projects_registered
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects_registered():
projects_registered = Node.find(
Q('parent_node', 'eq', None) &
Q('is_registration', 'eq', True) &
CONTENT_NODE_QUERY
)
return projects_registered
示例7: conference_submissions
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def conference_submissions(**kwargs):
"""Return data for all OSF4M submissions.
The total number of submissions for each meeting is calculated and cached
in the Conference.num_submissions field.
"""
submissions = []
# TODO: Revisit this loop, there has to be a way to optimize it
for conf in Conference.find():
# For efficiency, we filter by tag first, then node
# instead of doing a single Node query
projects = set()
tags = Tag.find(Q('lower', 'eq', conf.endpoint.lower())).get_keys()
nodes = Node.find(
Q('tags', 'in', tags) &
Q('is_public', 'eq', True) &
Q('is_deleted', 'ne', True)
)
projects.update(list(nodes))
for idx, node in enumerate(projects):
submissions.append(_render_conference_node(node, idx, conf))
num_submissions = len(projects)
# Cache the number of submissions
conf.num_submissions = num_submissions
conf.save()
if num_submissions < settings.CONFERENCE_MIN_COUNT:
continue
submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True)
return {'submissions': submissions}
示例8: save_bare_system_tags
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def save_bare_system_tags(page_size=10000):
print 'Starting save_bare_system_tags...'
start = datetime.now()
things = list(MODMNode.find(MQ('system_tags', 'ne', [])).sort(
'-_id')) + list(MODMUser.find(MQ('system_tags', 'ne', [])).sort(
'-_id'))
system_tag_ids = []
for thing in things:
for system_tag in thing.system_tags:
system_tag_ids.append(system_tag)
unique_system_tag_ids = set(system_tag_ids)
total = len(unique_system_tag_ids)
system_tags = []
for system_tag_id in unique_system_tag_ids:
system_tags.append(Tag(_id=system_tag_id,
lower=system_tag_id.lower(),
system=True))
woot = Tag.objects.bulk_create(system_tags)
print 'MODM System Tags: {}'.format(total)
print 'django system tags: {}'.format(Tag.objects.filter(system=
True).count())
print 'Done with {} in {} seconds...'.format(
sys._getframe().f_code.co_name,
(datetime.now() - start).total_seconds())
示例9: conference_view
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def conference_view(**kwargs):
meetings = []
submissions = []
for conf in Conference.find():
query = (
Q('tags', 'iexact', conf.endpoint)
& Q('is_public', 'eq', True)
& Q('is_deleted', 'eq', False)
)
projects = Node.find(query)
for idx, node in enumerate(projects):
submissions.append(_render_conference_node(node, idx, conf))
num_submissions = projects.count()
if num_submissions < settings.CONFERNCE_MIN_COUNT:
continue
meetings.append({
'name': conf.name,
'active': conf.active,
'url': web_url_for('conference_results', meeting=conf.endpoint),
'count': num_submissions,
})
submissions.sort(key=lambda submission: submission['dateCreated'], reverse=True)
meetings.sort(key=lambda meeting: meeting['count'], reverse=True)
return {'meetings': meetings, 'submissions': submissions}
示例10: get_projects_forked
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects_forked():
projects_forked = Node.find(
Q('parent_node', 'eq', None) &
Q('is_fork', 'eq', True) &
CONTENT_NODE_QUERY
)
return projects_forked
示例11: get_projects
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects():
projects = Node.find(
Q('category', 'eq', 'project') &
Q('is_deleted', 'eq', False) &
Q('is_folder', 'ne', True)
)
return projects
示例12: migrate_registrations
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def migrate_registrations():
PREREG_CHALLENGE_METASCHEMA = get_prereg_schema()
registrations = Node.find(
Q('is_registration', 'eq', True) &
Q('registered_schema', 'eq', PREREG_CHALLENGE_METASCHEMA)
)
count = 0
for reg in registrations:
data = reg.registered_meta[PREREG_CHALLENGE_METASCHEMA._id]
migrated = False
logger.debug('Reading preregistration with id: {0}'.format(reg._id))
for question in data.values():
if isinstance(question.get('value'), dict):
for value in question['value'].values():
migrated_one = migrate_file_meta(value)
if migrated_one and not migrated:
migrated = True
else:
migrated_one = migrate_file_meta(question)
if migrated_one and not migrated:
migrated = True
if migrated:
reg.save()
count += 1
logger.info('Migrated preregistration with id: {0}'.format(reg._id))
logger.info('Done with {0} prereg registrations migrated.'.format(count))
示例13: get_projects
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects():
# This count includes projects, forks, and registrations
projects = Node.find(
Q('parent_node', 'eq', None) &
CONTENT_NODE_QUERY
)
return projects
示例14: find_file_mismatch_nodes
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def find_file_mismatch_nodes():
"""Find nodes with inconsistent `files_current` and `files_versions` field
keys.
"""
return [
node for node in Node.find()
if set(node.files_versions.keys()) != set(node.files_current.keys())
]
示例15: get_projects_forked
# 需要导入模块: from website.models import Node [as 别名]
# 或者: from website.models.Node import find [as 别名]
def get_projects_forked():
projects_forked = list(Node.find(
Q('category', 'eq', 'project') &
Q('is_deleted', 'eq', False) &
Q('is_collection', 'ne', True) &
Q('is_fork', 'eq', True)
))
return projects_forked