You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2014/09/09 16:28:21 UTC
[01/18] git commit: [#7589] ticket:622 Tasks for indexing users
Repository: allura
Updated Branches:
refs/heads/je/42cc_7656 [created] d7df14a09
[#7589] ticket:622 Tasks for indexing users
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/88a8e014
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/88a8e014
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/88a8e014
Branch: refs/heads/je/42cc_7656
Commit: 88a8e0142bdfabfecf79f39c0987344217d098d9
Parents: 9176543
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Aug 4 14:50:18 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:25:27 2014 +0300
----------------------------------------------------------------------
Allura/allura/model/session.py | 4 +++-
Allura/allura/tasks/index_tasks.py | 12 ++++++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/88a8e014/Allura/allura/model/session.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/session.py b/Allura/allura/model/session.py
index 8e0f551..eb1f4ba 100644
--- a/Allura/allura/model/session.py
+++ b/Allura/allura/model/session.py
@@ -68,7 +68,9 @@ class IndexerSessionExtension(ManagedSessionExtension):
TASKS = {
'allura.model.project.Project': {'add': index_tasks.add_projects,
- 'del': index_tasks.del_projects}
+ 'del': index_tasks.del_projects},
+ 'allura.model.auth.User': {'add': index_tasks.add_users,
+ 'del': index_tasks.del_users},
}
def _objects_by_types(self, obj_list):
http://git-wip-us.apache.org/repos/asf/allura/blob/88a8e014/Allura/allura/tasks/index_tasks.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tasks/index_tasks.py b/Allura/allura/tasks/index_tasks.py
index 3f02cef..c9e853d 100644
--- a/Allura/allura/tasks/index_tasks.py
+++ b/Allura/allura/tasks/index_tasks.py
@@ -57,6 +57,18 @@ def del_projects(project_solr_ids):
@task
+def add_users(user_ids):
+ from allura.model import User
+ users = User.query.find(dict(_id={'$in': user_ids})).all()
+ __add_objects(users)
+
+
+@task
+def del_users(user_solr_ids):
+ __del_objects(user_solr_ids)
+
+
+@task
def add_artifacts(ref_ids, update_solr=True, update_refs=True, solr_hosts=None):
'''
Add the referenced artifacts to SOLR and shortlinks.
[04/18] git commit: [#7589] ticket:622 Add command to reindex all
users
Posted by je...@apache.org.
[#7589] ticket:622 Add command to reindex all users
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d5d2b3f5
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d5d2b3f5
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d5d2b3f5
Branch: refs/heads/je/42cc_7656
Commit: d5d2b3f56e64476c5c33ad01127a9eeb988e6cb1
Parents: 7b61cd5
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Aug 4 17:16:51 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:25:28 2014 +0300
----------------------------------------------------------------------
Allura/allura/scripts/reindex_users.py | 89 +++++++++++++++++++++++++++++
1 file changed, 89 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/d5d2b3f5/Allura/allura/scripts/reindex_users.py
----------------------------------------------------------------------
diff --git a/Allura/allura/scripts/reindex_users.py b/Allura/allura/scripts/reindex_users.py
new file mode 100644
index 0000000..8a0762b
--- /dev/null
+++ b/Allura/allura/scripts/reindex_users.py
@@ -0,0 +1,89 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+import argparse
+import logging
+
+from pymongo.errors import InvalidDocument
+
+from allura.scripts import ScriptTask
+from allura import model as M
+from allura.tasks.index_tasks import add_users
+from allura.lib.utils import chunked_find, chunked_list
+from allura.lib.exceptions import CompoundError
+
+
+log = logging.getLogger(__name__)
+
+
+class ReindexUsers(ScriptTask):
+
+ @classmethod
+ def execute(cls, options):
+ for chunk in chunked_find(M.User, {}):
+ user_ids = []
+ for u in chunk:
+ log.info('Reindex user %s', u.username)
+ if options.dry_run:
+ continue
+ user_ids.append(u._id)
+ try:
+ for chunk in chunked_list(user_ids, options.max_chunk):
+ if options.tasks:
+ cls._post_add_users(chunk)
+ else:
+ add_users(chunk)
+ except CompoundError, err:
+ log.exception('Error indexing users:\n%r', err)
+ log.error('%s', err.format_error())
+ M.main_orm_session.flush()
+ M.main_orm_session.clear()
+ log.info('Reindex %s', 'queued' if options.tasks else 'done')
+
+ @classmethod
+ def _post_add_users(cls, chunk):
+ """
+ Post task, recursively splitting and re-posting if the resulting
+ mongo document is too large.
+ """
+ try:
+ add_users.post(chunk)
+ except InvalidDocument as e:
+ # there are many types of InvalidDocument, only recurse if its
+ # expected to help
+ if e.args[0].startswith('BSON document too large'):
+ cls._post_add_users(chunk[:len(chunk) // 2])
+ cls._post_add_users(chunk[len(chunk) // 2:])
+ else:
+ raise
+
+ @classmethod
+ def parser(cls):
+ parser = argparse.ArgumentParser(description='Reindex all users')
+ parser.add_argument('--dry-run', action='store_true', dest='dry_run',
+ default=False, help='Log names of projects that would be reindexed, '
+ 'but do not perform the actual reindex.')
+ parser.add_argument('--tasks', action='store_true', dest='tasks',
+ help='Run each individual index operation as a background task.')
+ parser.add_argument(
+ '--max-chunk', dest='max_chunk', type=int, default=100 * 1000,
+ help='Max number of artifacts to index in one Solr update command')
+ return parser
+
+
+if __name__ == '__main__':
+ ReindexUsers.main()
[02/18] git commit: [#7589] ticket:622 Make User indexable
Posted by je...@apache.org.
[#7589] ticket:622 Make User indexable
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/91765437
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/91765437
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/91765437
Branch: refs/heads/je/42cc_7656
Commit: 917654372e450f95005323dbc26bf33a265f7851
Parents: e790049
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Aug 4 14:16:46 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:25:27 2014 +0300
----------------------------------------------------------------------
Allura/allura/lib/plugin.py | 8 ++++++++
Allura/allura/model/auth.py | 38 ++++++++++++++++++++++++++++++++++++--
2 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/91765437/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index 7f34559..e5a1fc3 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -279,6 +279,10 @@ class AuthenticationProvider(object):
return True
return False
+ def index_user(self, user):
+ """Put here additional fields for user index in SOLR."""
+ return {}
+
class LocalAuthenticationProvider(AuthenticationProvider):
@@ -370,6 +374,10 @@ class LocalAuthenticationProvider(AuthenticationProvider):
d = datetime.utcfromtimestamp(calendar.timegm(d.utctimetuple()))
return d
+ def index_user(self, user):
+ fields = super(LocalAuthenticationProvider, self).index_user(user)
+ return dict(user_registration_date_dt=self.user_registration_date(user), **fields)
+
def ldap_conn(who=None, cred=None):
'''
http://git-wip-us.apache.org/repos/asf/allura/blob/91765437/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index b7ea34b..fb59d0e 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -46,6 +46,7 @@ import allura.tasks.mail_tasks
from allura.lib import helpers as h
from allura.lib import plugin
from allura.lib.decorators import memoize
+from allura.lib.search import SearchIndexable
from .session import main_orm_session, main_doc_session
from .session import project_orm_session
@@ -210,7 +211,7 @@ class FieldPropertyDisplayName(FieldProperty):
return display_name
-class User(MappedClass, ActivityNode, ActivityObject):
+class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
SALT_LEN = 8
class __mongometa__:
@@ -219,6 +220,8 @@ class User(MappedClass, ActivityNode, ActivityObject):
indexes = ['tool_data.sfx.userid', 'tool_data.AuthPasswordReset.hash']
unique_indexes = ['username']
+ type_s = 'User'
+
_id = FieldProperty(S.ObjectId)
sfx_userid = FieldProperty(S.Deprecated)
username = FieldProperty(str)
@@ -227,7 +230,7 @@ class User(MappedClass, ActivityNode, ActivityObject):
last_password_updated = FieldProperty(datetime)
projects = FieldProperty(S.Deprecated)
# full mount point: prefs dict
- tool_preferences = FieldProperty({str: {str: None}})
+ tool_preferences = FieldProperty(S.Deprecated)
tool_data = FieldProperty({str: {str: None}}) # entry point: prefs dict
disabled = FieldProperty(bool, if_missing=False)
@@ -280,6 +283,37 @@ class User(MappedClass, ActivityNode, ActivityObject):
session_ip=str,
session_ua=str))
+ def index(self):
+ provider = plugin.AuthenticationProvider.get(None) # no need in request here
+ localization = '%s/%s' % (
+ self.get_pref('localization')['country'],
+ self.get_pref('localization')['city'])
+ fields = dict(
+ id=self.index_id(),
+ title='User %s' % self.username,
+ type_s=self.type_s,
+ username_s=self.username,
+ email_addresses=self.email_addresses,
+ last_password_updated_dt=self.last_password_updated,
+ disabled_b=self.disabled,
+ results_per_page_i=self.get_pref('results_per_page'),
+ email_address_s=self.get_pref('email_address'),
+ email_format_s=self.get_pref('email_format'),
+ disable_user_messages_b=self.get_pref('disable_user_messages'),
+ display_name_s=self.get_pref('display_name'),
+ sex_s=self.get_pref('sex'),
+ birthday_dt=self.get_pref('birthday'),
+ localization_s=localization,
+ timezone_s=self.get_pref('timezone'),
+ socialnetworks=self.get_pref('socialnetworks'),
+ telnumbers=self.get_pref('telnumbers'),
+ skypeaccount_s=self.get_pref('skypeaccount'),
+ webpages=self.get_pref('webpages'),
+ skills=self.get_skills(),
+ last_access=self.last_access,
+ )
+ return dict(provider.index_user(self), **fields)
+
def track_login(self, req):
user_ip = req.headers.get('X_FORWARDED_FOR', req.remote_addr)
user_agent = req.headers.get('User-Agent')
[10/18] git commit: [#7656] ticket:648 Refactor controller & template
to reuse as much as we can
Posted by je...@apache.org.
[#7656] ticket:648 Refactor controller & template to reuse as much as we can
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/3577c180
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/3577c180
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/3577c180
Branch: refs/heads/je/42cc_7656
Commit: 3577c180445516e50b8530039c8574f4783d25a9
Parents: 7a6ccbd
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 14:09:55 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 14:09:55 2014 +0300
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 74 ++++++++++++--------
Allura/allura/templates/site_admin_search.html | 49 +++++++++++++
.../templates/site_admin_search_projects.html | 74 --------------------
.../site_admin_search_projects_results.html | 27 +++++++
.../templates/site_admin_search_users.html | 25 -------
.../site_admin_search_users_results.html | 7 ++
6 files changed, 126 insertions(+), 130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 5913411..b19b84b 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -290,41 +290,35 @@ class SiteAdminController(object):
flash('Can not add comment "%s" for user %s' % (comment, user))
redirect(request.referer)
- @without_trailing_slash
- @expose('jinja:allura:templates/site_admin_search_projects.html')
- @validate(validators=dict(q=validators.UnicodeString(if_empty=None),
- limit=validators.Int(if_invalid=None),
- page=validators.Int(if_empty=0, if_invalid=0)))
- def search_projects(self, q=None, f=None, page=0, limit=None, **kw):
- fields = [('shortname', 'shortname'), ('name', 'full name')]
- fields.extend(aslist(tg.config.get('search.project.additional_fields'), ','))
- c.search_form = W.admin_search_form(fields)
+ def _search(self, model, fields, add_fields, q=None, f=None, page=0, limit=None, **kw):
+ all_fields = fields + [(fld, fld) for fld in add_fields]
+ c.search_form = W.admin_search_form(all_fields)
c.page_list = W.page_list
c.page_size = W.page_size
count = 0
- projects = []
+ objects = []
limit, page, start = g.handle_paging(limit, page, default=25)
if q:
- match = search.search_projects(q, f, rows=limit, start=start)
+ match = search.site_admin_search(model, q, f, rows=limit, start=start)
if match:
count = match.hits
- projects = match.docs
- pids = [bson.ObjectId(p['id'].split('#')[1]) for p in projects]
- mongo_projects = {}
- for p in M.Project.query.find({'_id': {'$in': pids}}):
- mongo_projects[str(p._id)] = p
-
- for i in range(len(projects)):
- p = projects[i]
- _id = p['id'].split('#')[1]
- p['project'] = mongo_projects.get(_id)
- # Some projects can be deleted, but still have index in solr, should skip those
- projects = [p for p in projects if p.get('project')]
-
- def convert_fields(p):
+ objects = match.docs
+ ids = [bson.ObjectId(obj['id'].split('#')[1]) for obj in objects]
+ mongo_objects = {}
+ for obj in model.query.find({'_id': {'$in': ids}}):
+ mongo_objects[str(obj._id)] = obj
+
+ for i in range(len(objects)):
+ obj = objects[i]
+ _id = obj['id'].split('#')[1]
+ obj['object'] = mongo_objects.get(_id)
+ # Some objects can be deleted, but still have index in solr, should skip those
+ objects = [obj for obj in objects if obj.get('object')]
+
+ def convert_fields(obj):
# throw the type away (e.g. '_s' from 'url_s')
result = {}
- for k,v in p.iteritems():
+ for k,v in obj.iteritems():
name = k.rsplit('_', 1)
if len(name) == 2:
name = name[0]
@@ -336,21 +330,39 @@ class SiteAdminController(object):
return {
'q': q,
'f': f,
- 'projects': map(convert_fields, projects),
+ 'objects': map(convert_fields, objects),
'count': count,
'page': page,
'limit': limit,
- 'additional_fields': aslist(config.get('search.project.additional_fields'), ','),
- 'provider': ProjectRegistrationProvider.get(),
+ 'fields': fields,
+ 'additional_fields': add_fields,
+ 'type_s': model.type_s,
}
@without_trailing_slash
- @expose('jinja:allura:templates/site_admin_search_users.html')
+ @expose('jinja:allura:templates/site_admin_search.html')
+ @validate(validators=dict(q=validators.UnicodeString(if_empty=None),
+ limit=validators.Int(if_invalid=None),
+ page=validators.Int(if_empty=0, if_invalid=0)))
+ def search_projects(self, q=None, f=None, page=0, limit=None, **kw):
+ fields = [('shortname', 'shortname'), ('name', 'full name')]
+ add_fields = aslist(tg.config.get('search.project.additional_fields'), ',')
+ r = self._search(M.Project, fields, add_fields, q, f, page, limit, **kw)
+ r['search_results_template'] = 'allura:templates/site_admin_search_projects_results.html'
+ r['provider'] = ProjectRegistrationProvider.get()
+ return r
+
+ @without_trailing_slash
+ @expose('jinja:allura:templates/site_admin_search.html')
@validate(validators=dict(q=validators.UnicodeString(if_empty=None),
limit=validators.Int(if_invalid=None),
page=validators.Int(if_empty=0, if_invalid=0)))
def search_users(self, q=None, f=None, page=0, limit=None, **kw):
- return {}
+ fields = []
+ add_fields = aslist(tg.config.get('search.user.additional_fields'), ',')
+ r = self._search(M.User, fields, add_fields, q, f, page, limit, **kw)
+ r['search_results_template'] = 'allura:templates/site_admin_search_users_results.html'
+ return r
class TaskManagerController(object):
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/templates/site_admin_search.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search.html b/Allura/allura/templates/site_admin_search.html
new file mode 100644
index 0000000..685f65b
--- /dev/null
+++ b/Allura/allura/templates/site_admin_search.html
@@ -0,0 +1,49 @@
+{#-
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-#}
+{% extends 'allura:templates/site_admin.html' %}
+
+{% block title %}Search {{ type_s }}s{% endblock %}
+{% block header %}Search {{ type_s }}s{% endblock %}
+
+{% block content %}
+ <div class="grid-19">
+ {{ c.search_form.display(q=q, f=f) }}
+ </div>
+
+ {% if objects %}
+ <table>
+ {% include search_results_template %}
+ </table>
+ {% endif %}
+
+ <div class="grid-19">
+ {{c.page_list.display(limit=limit, page=page, count=count)}}
+ {{c.page_size.display(limit=limit, page=page, count=count)}}
+ </div>
+{% endblock %}
+
+{% block extra_css %}
+<style>
+ table { clear: both; }
+ table th {
+ text-align: left;
+ padding: 5px 10px;
+ }
+</style>
+{% endblock %}
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/templates/site_admin_search_projects.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_projects.html b/Allura/allura/templates/site_admin_search_projects.html
deleted file mode 100644
index a6e6b02..0000000
--- a/Allura/allura/templates/site_admin_search_projects.html
+++ /dev/null
@@ -1,74 +0,0 @@
-{#-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--#}
-{% extends 'allura:templates/site_admin.html' %}
-
-{% block title %}Search Projects{% endblock %}
-{% block header %}Search Projects{% endblock %}
-
-{% block content %}
- <div class="grid-19">
- {{ c.search_form.display(q=q, f=f) }}
- </div>
-
- {% if projects %}
- <table>
- <tr>
- <th>Short name</th>
- <th>Full name</th>
- <th>Registered</th>
- <th>Deleted?</th>
- {% for field in additional_fields %}
- <th>{{ field }}</th>
- {% endfor %}
- <th>Details</th>
- </tr>
- {% for p in projects %}
- <tr>
- <td><a href="{{ p['url'] }}">{{ p['shortname'] }}</a></td>
- <td>{{ p['name'] }}</td>
- <td>{{ h.ago_string(p['registration']) }}</td>
- <td>{{ p['deleted'] }}</td>
- {% for field in additional_fields %}
- <td>{{ p[field] }}</td>
- {% endfor %}
- <td>
- {% for url, label in provider.details_links(p['project']) %}
- <a href="{{ url }}">{{ label }}</a><br>
- {% endfor %}
- </td>
- </tr>
- {% endfor %}
- </table>
- {% endif %}
-
- <div class="grid-19">
- {{c.page_list.display(limit=limit, page=page, count=count)}}
- {{c.page_size.display(limit=limit, page=page, count=count)}}
- </div>
-{% endblock %}
-
-{% block extra_css %}
-<style>
- table { clear: both; }
- table th {
- text-align: left;
- padding: 5px 10px;
- }
-</style>
-{% endblock %}
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/templates/site_admin_search_projects_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_projects_results.html b/Allura/allura/templates/site_admin_search_projects_results.html
new file mode 100644
index 0000000..622e9a6
--- /dev/null
+++ b/Allura/allura/templates/site_admin_search_projects_results.html
@@ -0,0 +1,27 @@
+<tr>
+ <th>Short name</th>
+ <th>Full name</th>
+ <th>Registered</th>
+ <th>Deleted?</th>
+ {% for field in additional_fields %}
+ <th>{{ field }}</th>
+ {% endfor %}
+ <th>Details</th>
+</tr>
+
+{% for p in objects %}
+<tr>
+ <td><a href="{{ p['url'] }}">{{ p['shortname'] }}</a></td>
+ <td>{{ p['name'] }}</td>
+ <td>{{ h.ago_string(p['registration']) }}</td>
+ <td>{{ p['deleted'] }}</td>
+ {% for field in additional_fields %}
+ <td>{{ p[field] }}</td>
+ {% endfor %}
+ <td>
+ {% for url, label in provider.details_links(p['object']) %}
+ <a href="{{ url }}">{{ label }}</a><br>
+ {% endfor %}
+ </td>
+</tr>
+{% endfor %}
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/templates/site_admin_search_users.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users.html b/Allura/allura/templates/site_admin_search_users.html
deleted file mode 100644
index ec18e90..0000000
--- a/Allura/allura/templates/site_admin_search_users.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{#-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--#}
-{% extends 'allura:templates/site_admin.html' %}
-
-{% block title %}Search Users{% endblock %}
-{% block header %}Search Users{% endblock %}
-
-{% block content %}
-{% endblock %}
http://git-wip-us.apache.org/repos/asf/allura/blob/3577c180/Allura/allura/templates/site_admin_search_users_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users_results.html b/Allura/allura/templates/site_admin_search_users_results.html
new file mode 100644
index 0000000..b73c5c4
--- /dev/null
+++ b/Allura/allura/templates/site_admin_search_users_results.html
@@ -0,0 +1,7 @@
+<tr>
+</tr>
+
+{% for user in objects %}
+<tr>
+</tr>
+{% endfor %}
[13/18] git commit: [#7656] ticket:648 Add default search fields for
user & additional fields examples
Posted by je...@apache.org.
[#7656] ticket:648 Add default search fields for user & additional fields examples
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/78f3b888
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/78f3b888
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/78f3b888
Branch: refs/heads/je/42cc_7656
Commit: 78f3b8885cc640c56846c8345a0771db9db82c6b
Parents: 3d4b9a5
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 14:24:39 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 14:24:39 2014 +0300
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 2 +-
Allura/development.ini | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/78f3b888/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index b19b84b..40c69f2 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -358,7 +358,7 @@ class SiteAdminController(object):
limit=validators.Int(if_invalid=None),
page=validators.Int(if_empty=0, if_invalid=0)))
def search_users(self, q=None, f=None, page=0, limit=None, **kw):
- fields = []
+ fields = [('username', 'username'), ('display_name', 'display name')]
add_fields = aslist(tg.config.get('search.user.additional_fields'), ',')
r = self._search(M.User, fields, add_fields, q, f, page, limit, **kw)
r['search_results_template'] = 'allura:templates/site_admin_search_users_results.html'
http://git-wip-us.apache.org/repos/asf/allura/blob/78f3b888/Allura/development.ini
----------------------------------------------------------------------
diff --git a/Allura/development.ini b/Allura/development.ini
index 80275d5..ab0c114 100644
--- a/Allura/development.ini
+++ b/Allura/development.ini
@@ -120,9 +120,10 @@ user_prefs_storage.method = local
user_prefs_storage.ldap.fields.display_name = cn
-# Additional fields for admin project search (/nf/admin/search_projects/)
+# Additional fields for admin project/user search
# Note: whitespace after comma is important!
# search.project.additional_fields = private, url, title
+# search.user.additional_fields = email_addresses
# Set the locations of some static resources
# script_name is the path that is handled by the application
[11/18] git commit: [#7656] ticket:648 Get rid of specific search
functions, which aren't used now
Posted by je...@apache.org.
[#7656] ticket:648 Get rid of specific search functions, which aren't used now
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/7330f8dc
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/7330f8dc
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/7330f8dc
Branch: refs/heads/je/42cc_7656
Commit: 7330f8dc8b2344086c29daef9d04f4f030ba1b13
Parents: 3577c18
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 14:10:44 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 14:10:44 2014 +0300
----------------------------------------------------------------------
Allura/allura/lib/search.py | 10 ----------
1 file changed, 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/7330f8dc/Allura/allura/lib/search.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index f4f177a..1c3ba8a 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -180,8 +180,6 @@ def search_artifact(atype, q, history=False, rows=10, short_timeout=False, filte
def site_admin_search(model, q, field, **kw):
"""Performs SOLR search for a given model.
- Probably you should not use it directly. Use one of the specific functions below.
-
Raises SearchError if SOLR returns an error.
"""
# first, grab a object and get the fields that it indexes
@@ -198,14 +196,6 @@ def site_admin_search(model, q, field, **kw):
fq = [u'type_s:%s' % model.type_s]
return search(q, fq=fq, ignore_errors=False, **kw)
-def search_projects(q, field, **kw):
- from allura.model import Project
- return site_admin_search(Project, q, field, **kw)
-
-def search_users(q, field, **kw):
- from allura.model import User
- return site_admin_search(User, q, field, **kw)
-
def search_app(q='', fq=None, app=True, **kw):
"""Helper for app/project search.
[12/18] git commit: [#7656] ticket:648 Change display name index type
to allow not strict matches when searching
Posted by je...@apache.org.
[#7656] ticket:648 Change display name index type to allow not strict matches when searching
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/3d4b9a54
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/3d4b9a54
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/3d4b9a54
Branch: refs/heads/je/42cc_7656
Commit: 3d4b9a547e7af96d2eb3ffa7f877f4d2b4d16c96
Parents: 7330f8d
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 14:15:41 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 14:15:41 2014 +0300
----------------------------------------------------------------------
Allura/allura/model/auth.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/3d4b9a54/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 43de922..16ee2e0 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -302,7 +302,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
email_address_s=self.get_pref('email_address'),
email_format_s=self.get_pref('email_format'),
disable_user_messages_b=self.get_pref('disable_user_messages'),
- display_name_s=self.get_pref('display_name'),
+ display_name_t=self.get_pref('display_name'),
sex_s=self.get_pref('sex'),
birthdate_dt=self.get_pref('birthdate'),
localization_s=localization,
[17/18] git commit: [#7656] ticket:648 Add tests for user search
Posted by je...@apache.org.
[#7656] ticket:648 Add tests for user search
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/4f2e6d0a
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/4f2e6d0a
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/4f2e6d0a
Branch: refs/heads/je/42cc_7656
Commit: 4f2e6d0aaa64945f05285a77a146173ce8f9ed21
Parents: 83d428f
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 16:54:56 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 16:54:56 2014 +0300
----------------------------------------------------------------------
.../allura/tests/functional/test_site_admin.py | 58 +++++++++++++++++++-
Allura/allura/tests/unit/test_solr.py | 13 ++++-
2 files changed, 68 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/4f2e6d0a/Allura/allura/tests/functional/test_site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index 0bb63fe..26a6f8c 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -233,10 +233,11 @@ class TestProjectsSearch(TestController):
def setUp(self):
super(TestProjectsSearch, self).setUp()
# Create project that matches TEST_HIT id
- p = M.Project.query.get(_id=ObjectId('53ccf6e8100d2b0741746e9f'))
+ _id = ObjectId('53ccf6e8100d2b0741746e9f')
+ p = M.Project.query.get(_id=_id)
if not p:
M.Project(
- _id=ObjectId('53ccf6e8100d2b0741746e9f'),
+ _id=_id,
neighborhood_id=M.Neighborhood.query.get(url_prefix='/u/')._id,
shortname='test-project',
)
@@ -263,6 +264,59 @@ class TestProjectsSearch(TestController):
'private', 'url', 'Details'])
+class TestUsersSearch(TestController):
+
+ TEST_HIT = MagicMock(hits=1, docs=[{
+ '_version_': 1478773871277506560,
+ 'disabled_b': False,
+ 'display_name_t': 'Darth Vader',
+ 'id': 'allura/model/auth/User#540efdf2100d2b1483155d39',
+ 'last_access_login_date_dt': '2014-09-09T13:17:40.176Z',
+ 'last_access_login_ip_s': '10.0.2.2',
+ 'last_access_login_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
+ 'last_access_session_date_dt': '2014-09-09T13:17:40.33Z',
+ 'last_access_session_ip_s': '10.0.2.2',
+ 'last_access_session_ua_t': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
+ 'last_password_updated_dt': '2014-09-09T13:17:38.857Z',
+ 'localization_s': 'None/None',
+ 'sex_s': 'Unknown',
+ 'title': ['User darth'],
+ 'type_s': 'User',
+ 'url_s': '/u/darth/',
+ 'user_registration_date_dt': '2014-09-09T13:17:38Z',
+ 'username_s': 'darth'}])
+
+ def setUp(self):
+ super(TestUsersSearch, self).setUp()
+ # Create user that matches TEST_HIT id
+ _id = ObjectId('540efdf2100d2b1483155d39')
+ u = M.User.query.get(_id=_id)
+ if not u:
+ M.User(_id=_id, username='darth')
+ ThreadLocalORMSession().flush_all()
+
+ @patch('allura.controllers.site_admin.search')
+ def test_default_fields(self, search):
+ search.site_admin_search.return_value = self.TEST_HIT
+ r = self.app.get('/nf/admin/search_users?q=fake&f=username')
+ options = [o['value'] for o in r.html.findAll('option')]
+ assert_equal(options, ['username', 'display_name', '__custom__'])
+ ths = [th.text for th in r.html.findAll('th')]
+ assert_equal(ths, ['Username', 'Display name', 'Email', 'Registered',
+ 'Disabled?', 'Details'])
+
+ @patch('allura.controllers.site_admin.search')
+ def test_additional_fields(self, search):
+ search.site_admin_search.return_value = self.TEST_HIT
+ with h.push_config(config, **{'search.user.additional_fields': 'email_addresses, url'}):
+ r = self.app.get('/nf/admin/search_users?q=fake&f=username')
+ options = [o['value'] for o in r.html.findAll('option')]
+ assert_equal(options, ['username', 'display_name', 'email_addresses', 'url', '__custom__'])
+ ths = [th.text for th in r.html.findAll('th')]
+ assert_equal(ths, ['Username', 'Display name', 'Email', 'Registered',
+ 'Disabled?', 'email_addresses', 'url', 'Details'])
+
+
@task
def test_task(*args, **kw):
"""test_task doc string"""
http://git-wip-us.apache.org/repos/asf/allura/blob/4f2e6d0a/Allura/allura/tests/unit/test_solr.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_solr.py b/Allura/allura/tests/unit/test_solr.py
index 8b237cc..dfe71c7 100644
--- a/Allura/allura/tests/unit/test_solr.py
+++ b/Allura/allura/tests/unit/test_solr.py
@@ -94,7 +94,7 @@ class TestSolr(unittest.TestCase):
@mock.patch('allura.lib.search.search')
def test_site_admin_search(self, search):
from allura.lib.search import site_admin_search
- from allura.model import Project
+ from allura.model import Project, User
fq = ['type_s:Project']
site_admin_search(Project, 'test', 'shortname', rows=25)
search.assert_called_once_with(
@@ -105,6 +105,17 @@ class TestSolr(unittest.TestCase):
search.assert_called_once_with(
'shortname_s:test || shortname_s:test2', fq=fq, ignore_errors=False)
+ fq = ['type_s:User']
+ search.reset_mock()
+ site_admin_search(User, 'test-user', 'username', rows=25)
+ search.assert_called_once_with(
+ 'username_s:"test-user"', fq=fq, ignore_errors=False, rows=25)
+
+ search.reset_mock()
+ site_admin_search(User, 'username:admin1 || username:root', '__custom__')
+ search.assert_called_once_with(
+ 'username_s:admin1 || username_s:root', fq=fq, ignore_errors=False)
+
class TestSearchIndexable(unittest.TestCase):
[15/18] git commit: [#7656] ticket:648 Format registration date
Posted by je...@apache.org.
[#7656] ticket:648 Format registration date
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/e9839782
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/e9839782
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/e9839782
Branch: refs/heads/je/42cc_7656
Commit: e9839782fdc7aed3e250711918ead6853d4c54aa
Parents: db60583
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 16:18:48 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 16:18:48 2014 +0300
----------------------------------------------------------------------
Allura/allura/templates/site_admin_search_users_results.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/e9839782/Allura/allura/templates/site_admin_search_users_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users_results.html b/Allura/allura/templates/site_admin_search_users_results.html
index ce9a8d0..9e986ab 100644
--- a/Allura/allura/templates/site_admin_search_users_results.html
+++ b/Allura/allura/templates/site_admin_search_users_results.html
@@ -15,7 +15,7 @@
<td><a href="{{ u['url'] }}">{{ u['username'] }}</a></td>
<td>{{ u['display_name'] }}</td>
<td>{{ u['object'].get_pref('email_address') }}</td>
- <td>{{ provider.user_registration_date(u['object']) }}</td>
+ <td>{{ h.ago(provider.user_registration_date(u['object']).replace(tzinfo=None)) }}</td>
<td>{{ u['disabled'] }}</td>
{% for field in additional_fields %}
<td>{{ u[field] }}</td>
[05/18] git commit: [#7589] ticket:622 Fix field types/appearance in
the index
Posted by je...@apache.org.
[#7589] ticket:622 Fix field types/appearance in the index
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/dd4752b1
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/dd4752b1
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/dd4752b1
Branch: refs/heads/je/42cc_7656
Commit: dd4752b1e7c0b524aea324476c6af9f0dd356a9e
Parents: 88a8e01
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Aug 4 15:19:22 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:25:28 2014 +0300
----------------------------------------------------------------------
Allura/allura/model/auth.py | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/dd4752b1/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index fb59d0e..43de922 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -288,12 +288,14 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
localization = '%s/%s' % (
self.get_pref('localization')['country'],
self.get_pref('localization')['city'])
+ socialnetworks = ' '.join(['%s: %s' % (n['socialnetwork'], n['accounturl'])
+ for n in self.get_pref('socialnetworks')])
fields = dict(
id=self.index_id(),
title='User %s' % self.username,
type_s=self.type_s,
username_s=self.username,
- email_addresses=self.email_addresses,
+ email_addresses_t=' '.join(self.email_addresses),
last_password_updated_dt=self.last_password_updated,
disabled_b=self.disabled,
results_per_page_i=self.get_pref('results_per_page'),
@@ -302,15 +304,20 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
disable_user_messages_b=self.get_pref('disable_user_messages'),
display_name_s=self.get_pref('display_name'),
sex_s=self.get_pref('sex'),
- birthday_dt=self.get_pref('birthday'),
+ birthdate_dt=self.get_pref('birthdate'),
localization_s=localization,
timezone_s=self.get_pref('timezone'),
- socialnetworks=self.get_pref('socialnetworks'),
- telnumbers=self.get_pref('telnumbers'),
+ socialnetworks_t=socialnetworks,
+ telnumbers_t=' '.join(self.get_pref('telnumbers')),
skypeaccount_s=self.get_pref('skypeaccount'),
- webpages=self.get_pref('webpages'),
- skills=self.get_skills(),
- last_access=self.last_access,
+ webpages_t=' '.join(self.get_pref('webpages')),
+ skills_t=' '.join([s['skill'].fullpath for s in self.get_skills()]),
+ last_access_login_date_dt=self.last_access['login_date'],
+ last_access_login_ip_s=self.last_access['login_ip'],
+ last_access_login_ua_t=self.last_access['login_ua'],
+ last_access_session_date_dt=self.last_access['session_date'],
+ last_access_session_ip_s=self.last_access['session_ip'],
+ last_access_session_ua_t=self.last_access['session_ua'],
)
return dict(provider.index_user(self), **fields)
[06/18] git commit: [#7656] ticket:648 Add initial stubs for user
search page
Posted by je...@apache.org.
[#7656] ticket:648 Add initial stubs for user search page
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/23dbb06d
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/23dbb06d
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/23dbb06d
Branch: refs/heads/je/42cc_7656
Commit: 23dbb06d25742f28e606b8c116b5ecb3f85eddf3
Parents: d5d2b3f
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 12:58:18 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:59:05 2014 +0300
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 9 +++++++
.../templates/site_admin_search_users.html | 25 ++++++++++++++++++++
2 files changed, 34 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/23dbb06d/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 4a96298..bf7076e 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -87,6 +87,7 @@ class SiteAdminController(object):
SitemapEntry('Task Manager', base_url + 'task_manager?state=busy', ui_icon=g.icons['stats']),
SitemapEntry('Users Audit Log', base_url + 'users', ui_icon=g.icons['admin']),
SitemapEntry('Search Projects', base_url + 'search_projects', ui_icon=g.icons['search']),
+ SitemapEntry('Search Users', base_url + 'search_users', ui_icon=g.icons['search']),
]
for ep_name in sorted(g.entry_points['site_admin']):
g.entry_points['site_admin'][ep_name]().update_sidebar_menu(links)
@@ -341,6 +342,14 @@ class SiteAdminController(object):
'provider': ProjectRegistrationProvider.get(),
}
+ @without_trailing_slash
+ @expose('jinja:allura:templates/site_admin_search_users.html')
+ @validate(validators=dict(q=validators.UnicodeString(if_empty=None),
+ limit=validators.Int(if_invalid=None),
+ page=validators.Int(if_empty=0, if_invalid=0)))
+ def search_users(self, q=None, f=None, page=0, limit=None, **kw):
+ return {}
+
class TaskManagerController(object):
http://git-wip-us.apache.org/repos/asf/allura/blob/23dbb06d/Allura/allura/templates/site_admin_search_users.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users.html b/Allura/allura/templates/site_admin_search_users.html
new file mode 100644
index 0000000..ec18e90
--- /dev/null
+++ b/Allura/allura/templates/site_admin_search_users.html
@@ -0,0 +1,25 @@
+{#-
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-#}
+{% extends 'allura:templates/site_admin.html' %}
+
+{% block title %}Search Users{% endblock %}
+{% block header %}Search Users{% endblock %}
+
+{% block content %}
+{% endblock %}
[07/18] git commit: [#7656] ticket:648 Refactor projects search form
to something more generic
Posted by je...@apache.org.
[#7656] ticket:648 Refactor projects search form to something more generic
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/1f3b1a3f
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/1f3b1a3f
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/1f3b1a3f
Branch: refs/heads/je/42cc_7656
Commit: 1f3b1a3f8036975706334a135be97b1bf52fd33e
Parents: 23dbb06
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 13:00:11 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 13:00:11 2014 +0300
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 6 ++++--
Allura/allura/lib/widgets/forms.py | 15 +++++++--------
.../allura/templates/site_admin_search_projects.html | 2 +-
3 files changed, 12 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/1f3b1a3f/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index bf7076e..5913411 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -54,7 +54,7 @@ class W:
page_list = ffw.PageList()
page_size = ffw.PageSize()
audit = AuditLog()
- search_projects_form = forms.SearchProjectsForm()
+ admin_search_form = forms.AdminSearchForm
class SiteAdminController(object):
@@ -296,7 +296,9 @@ class SiteAdminController(object):
limit=validators.Int(if_invalid=None),
page=validators.Int(if_empty=0, if_invalid=0)))
def search_projects(self, q=None, f=None, page=0, limit=None, **kw):
- c.search_projects_form = W.search_projects_form
+ fields = [('shortname', 'shortname'), ('name', 'full name')]
+ fields.extend(aslist(tg.config.get('search.project.additional_fields'), ','))
+ c.search_form = W.admin_search_form(fields)
c.page_list = W.page_list
c.page_size = W.page_size
count = 0
http://git-wip-us.apache.org/repos/asf/allura/blob/1f3b1a3f/Allura/allura/lib/widgets/forms.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/forms.py b/Allura/allura/lib/widgets/forms.py
index 794f926..0d25079 100644
--- a/Allura/allura/lib/widgets/forms.py
+++ b/Allura/allura/lib/widgets/forms.py
@@ -1081,21 +1081,20 @@ class AwardGrantForm(ForgeForm):
]
-class SearchProjectsForm(ForgeForm):
+class AdminSearchForm(ForgeForm):
defaults = dict(
ForgeForm.defaults,
action='',
method='get',
submit_text=None)
+ def __init__(self, fields, *args, **kw):
+ super(AdminSearchForm, self).__init__(*args, **kw)
+ self._fields = fields
+
@property
def fields(self):
- add_fields = aslist(tg.config.get('search.project.additional_fields'), ',')
- search_fields = [
- ew.Option(py_value='shortname', label='shortname'),
- ew.Option(py_value='name', label='full name'),
- ]
- search_fields.extend([ew.Option(py_value=f, label=f) for f in add_fields])
+ search_fields = [ew.Option(py_value=v, label=l) for v, l in self._fields]
search_fields.append(ew.Option(py_value='__custom__', label='custom query'))
return [
ew.RowField(fields=[
@@ -1114,7 +1113,7 @@ class SearchProjectsForm(ForgeForm):
])]
def context_for(self, field):
- ctx = super(SearchProjectsForm, self).context_for(field)
+ ctx = super(AdminSearchForm, self).context_for(field)
if field.name is None and not ctx.get('value'):
# RowField does not pass context down to the children :(
render_ctx = ew_core.widget_context.render_context
http://git-wip-us.apache.org/repos/asf/allura/blob/1f3b1a3f/Allura/allura/templates/site_admin_search_projects.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_projects.html b/Allura/allura/templates/site_admin_search_projects.html
index 73f30eb..a6e6b02 100644
--- a/Allura/allura/templates/site_admin_search_projects.html
+++ b/Allura/allura/templates/site_admin_search_projects.html
@@ -23,7 +23,7 @@
{% block content %}
<div class="grid-19">
- {{ c.search_projects_form.display(q=q, f=f) }}
+ {{ c.search_form.display(q=q, f=f) }}
</div>
{% if projects %}
[18/18] git commit: [#7656] ticket:648 Fix typo
Posted by je...@apache.org.
[#7656] ticket:648 Fix typo
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d7df14a0
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d7df14a0
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d7df14a0
Branch: refs/heads/je/42cc_7656
Commit: d7df14a09556d197f65435808f6270152db4ffd1
Parents: 4f2e6d0
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 16:57:58 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 16:57:58 2014 +0300
----------------------------------------------------------------------
Allura/allura/lib/search.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/d7df14a0/Allura/allura/lib/search.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index 1c3ba8a..525fab3 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -182,7 +182,7 @@ def site_admin_search(model, q, field, **kw):
Raises SearchError if SOLR returns an error.
"""
- # first, grab a object and get the fields that it indexes
+ # first, grab an object and get the fields that it indexes
obj = model.query.find().first()
if obj is None:
return # if there are no objects, we won't find anything
[09/18] git commit: [#7656] ticket:648 Move translate_query to
SearchIndexable
Posted by je...@apache.org.
[#7656] ticket:648 Move translate_query to SearchIndexable
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/7a6ccbd9
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/7a6ccbd9
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/7a6ccbd9
Branch: refs/heads/je/42cc_7656
Commit: 7a6ccbd90c66e734c4da7f978e8db72131b7ce1c
Parents: d0b3aa2
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 13:15:17 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 13:15:17 2014 +0300
----------------------------------------------------------------------
Allura/allura/lib/search.py | 18 ++++++++++++++++++
Allura/allura/model/artifact.py | 18 ------------------
Allura/allura/model/project.py | 5 -----
3 files changed, 18 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/7a6ccbd9/Allura/allura/lib/search.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index 49a3ad5..f4f177a 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -100,6 +100,24 @@ class SearchIndexable(object):
doc['text'] = jinja2.Markup.escape(text).striptags()
return doc
+ @classmethod
+ def translate_query(cls, q, fields):
+ """Return a translated Solr query (``q``), where generic field
+ identifiers are replaced by the 'strongly typed' versions defined in
+ ``fields``.
+
+ """
+ # Replace longest fields first to avoid problems when field names have
+ # the same suffixes, but different field types. E.g.:
+ # query 'shortname:test' with fields.keys() == ['name_t', 'shortname_s']
+ # will be translated to 'shortname_t:test', which makes no sense
+ fields = sorted(fields.keys(), key=len, reverse=True)
+ for f in fields:
+ if '_' in f:
+ base, typ = f.rsplit('_', 1)
+ q = q.replace(base + ':', f + ':')
+ return q
+
class SearchError(SolrError):
pass
http://git-wip-us.apache.org/repos/asf/allura/blob/7a6ccbd9/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 2639021..ccb6b42 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -130,24 +130,6 @@ class Artifact(MappedClass, SearchIndexable):
def attachment_class(cls):
raise NotImplementedError, 'attachment_class'
- @classmethod
- def translate_query(cls, q, fields):
- """Return a translated Solr query (``q``), where generic field
- identifiers are replaced by the 'strongly typed' versions defined in
- ``fields``.
-
- """
- # Replace longest fields first to avoid problems when field names have
- # the same suffixes, but different field types. E.g.:
- # query 'shortname:test' with fields.keys() == ['name_t', 'shortname_s']
- # will be translated to 'shortname_t:test', which makes no sense
- fields = sorted(fields.keys(), key=len, reverse=True)
- for f in fields:
- if '_' in f:
- base, typ = f.rsplit('_', 1)
- q = q.replace(base + ':', f + ':')
- return q
-
@LazyProperty
def ref(self):
"""Return :class:`allura.model.index.ArtifactReference` for this
http://git-wip-us.apache.org/repos/asf/allura/blob/7a6ccbd9/Allura/allura/model/project.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/project.py b/Allura/allura/model/project.py
index ff566c2..e0923a9 100644
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -252,11 +252,6 @@ class Project(SearchIndexable, MappedClass, ActivityNode, ActivityObject):
# transient properties
notifications_disabled = False
- @classmethod
- def translate_query(cls, q, fields):
- from .artifact import Artifact
- return Artifact.translate_query(q, fields)
-
@property
def activity_name(self):
return self.name
[14/18] git commit: [#7656] ticket:648 Display search results and
small fixes
Posted by je...@apache.org.
[#7656] ticket:648 Display search results and small fixes
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/db605838
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/db605838
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/db605838
Branch: refs/heads/je/42cc_7656
Commit: db6058380150fd967bbb92e857eb936be99a9025
Parents: 78f3b88
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 15:59:14 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 15:59:14 2014 +0300
----------------------------------------------------------------------
Allura/allura/controllers/site_admin.py | 3 ++-
Allura/allura/lib/plugin.py | 10 ++++++++
Allura/allura/model/auth.py | 3 ++-
.../site_admin_search_users_results.html | 24 +++++++++++++++++++-
4 files changed, 37 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/db605838/Allura/allura/controllers/site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/controllers/site_admin.py b/Allura/allura/controllers/site_admin.py
index 40c69f2..b6fecd7 100644
--- a/Allura/allura/controllers/site_admin.py
+++ b/Allura/allura/controllers/site_admin.py
@@ -34,7 +34,7 @@ from allura.app import SitemapEntry
from allura.lib import helpers as h
from allura.lib import validators as v
from allura.lib.decorators import require_post
-from allura.lib.plugin import SiteAdminExtension, ProjectRegistrationProvider
+from allura.lib.plugin import SiteAdminExtension, ProjectRegistrationProvider, AuthenticationProvider
from allura.lib import search
from allura.lib.security import require_access
from allura.lib.widgets import form_fields as ffw
@@ -362,6 +362,7 @@ class SiteAdminController(object):
add_fields = aslist(tg.config.get('search.user.additional_fields'), ',')
r = self._search(M.User, fields, add_fields, q, f, page, limit, **kw)
r['search_results_template'] = 'allura:templates/site_admin_search_users_results.html'
+ r['provider'] = AuthenticationProvider.get(request)
return r
http://git-wip-us.apache.org/repos/asf/allura/blob/db605838/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index e5a1fc3..17d28be 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -283,6 +283,16 @@ class AuthenticationProvider(object):
"""Put here additional fields for user index in SOLR."""
return {}
+ def details_links(self, user):
+ '''Return list of pairs (url, label) with details
+ about the user.
+ Links will show up at admin user search page.
+ '''
+ return [
+ (user.url(), 'Public profile'),
+ ('/nf/admin/user/%s' % user.username, 'Details/Edit'),
+ ]
+
class LocalAuthenticationProvider(AuthenticationProvider):
http://git-wip-us.apache.org/repos/asf/allura/blob/db605838/Allura/allura/model/auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/auth.py b/Allura/allura/model/auth.py
index 16ee2e0..77c42c7 100644
--- a/Allura/allura/model/auth.py
+++ b/Allura/allura/model/auth.py
@@ -293,6 +293,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
fields = dict(
id=self.index_id(),
title='User %s' % self.username,
+ url_s=self.url(),
type_s=self.type_s,
username_s=self.username,
email_addresses_t=' '.join(self.email_addresses),
@@ -311,7 +312,7 @@ class User(MappedClass, ActivityNode, ActivityObject, SearchIndexable):
telnumbers_t=' '.join(self.get_pref('telnumbers')),
skypeaccount_s=self.get_pref('skypeaccount'),
webpages_t=' '.join(self.get_pref('webpages')),
- skills_t=' '.join([s['skill'].fullpath for s in self.get_skills()]),
+ skills_t=' '.join([s['skill'].fullpath for s in self.get_skills() if s.get('skill')]),
last_access_login_date_dt=self.last_access['login_date'],
last_access_login_ip_s=self.last_access['login_ip'],
last_access_login_ua_t=self.last_access['login_ua'],
http://git-wip-us.apache.org/repos/asf/allura/blob/db605838/Allura/allura/templates/site_admin_search_users_results.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/site_admin_search_users_results.html b/Allura/allura/templates/site_admin_search_users_results.html
index b73c5c4..ce9a8d0 100644
--- a/Allura/allura/templates/site_admin_search_users_results.html
+++ b/Allura/allura/templates/site_admin_search_users_results.html
@@ -1,7 +1,29 @@
<tr>
+ <th>Username</th>
+ <th>Display name</th>
+ <th>Email</th>
+ <th>Registered</th>
+ <th>Disabled?</th>
+ {% for field in additional_fields %}
+ <th>{{ field }}</th>
+ {% endfor %}
+ <th>Details</th>
</tr>
-{% for user in objects %}
+{% for u in objects %}
<tr>
+ <td><a href="{{ u['url'] }}">{{ u['username'] }}</a></td>
+ <td>{{ u['display_name'] }}</td>
+ <td>{{ u['object'].get_pref('email_address') }}</td>
+ <td>{{ provider.user_registration_date(u['object']) }}</td>
+ <td>{{ u['disabled'] }}</td>
+ {% for field in additional_fields %}
+ <td>{{ u[field] }}</td>
+ {% endfor %}
+ <td>
+ {% for url, label in provider.details_links(u['object']) %}
+ <a href="{{ url }}">{{ label }}</a><br>
+ {% endfor %}
+ </td>
</tr>
{% endfor %}
[03/18] git commit: [#7589] ticket:622 Test for User.index()
Posted by je...@apache.org.
[#7589] ticket:622 Test for User.index()
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/7b61cd53
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/7b61cd53
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/7b61cd53
Branch: refs/heads/je/42cc_7656
Commit: 7b61cd5340fa466543a0ff2911cdea495becd841
Parents: dd4752b
Author: Igor Bondarenko <je...@gmail.com>
Authored: Mon Aug 4 15:44:08 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 12:25:28 2014 +0300
----------------------------------------------------------------------
Allura/allura/tests/model/test_auth.py | 36 +++++++++++++++++++++++++++++
1 file changed, 36 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/7b61cd53/Allura/allura/tests/model/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index 9c5a74c..4660510 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -277,3 +277,39 @@ def test_user_track_active():
c.user = M.User.by_username(c.user.username)
assert_equal(c.user.last_access['session_ip'], 'new addr')
assert_equal(c.user.last_access['session_ua'], 'new browser')
+
+
+@with_setup(setUp)
+def test_user_index():
+ c.user.email_addresses = ['email1', 'email2']
+ c.user.set_pref('email_address', 'email2')
+ idx = c.user.index()
+ assert_equal(idx['id'], c.user.index_id())
+ assert_equal(idx['title'], 'User test-admin')
+ assert_equal(idx['type_s'], 'User')
+ assert_equal(idx['username_s'], 'test-admin')
+ assert_equal(idx['email_addresses_t'], 'email1 email2')
+ assert_equal(idx['email_address_s'], 'email2')
+ assert_in('last_password_updated_dt', idx)
+ assert_equal(idx['disabled_b'], False)
+ assert_in('results_per_page_i', idx)
+ assert_in('email_format_s', idx)
+ assert_in('disable_user_messages_b', idx)
+ assert_equal(idx['display_name_s'], 'Test Admin')
+ assert_equal(idx['sex_s'], 'Unknown')
+ assert_in('birthdate_dt', idx)
+ assert_in('localization_s', idx)
+ assert_in('timezone_s', idx)
+ assert_in('socialnetworks_t', idx)
+ assert_in('telnumbers_t', idx)
+ assert_in('skypeaccount_s', idx)
+ assert_in('webpages_t', idx)
+ assert_in('skills_t', idx)
+ assert_in('last_access_login_date_dt', idx)
+ assert_in('last_access_login_ip_s', idx)
+ assert_in('last_access_login_ua_t', idx)
+ assert_in('last_access_session_date_dt', idx)
+ assert_in('last_access_session_ip_s', idx)
+ assert_in('last_access_session_ua_t', idx)
+ # provided bby auth provider
+ assert_in('user_registration_date_dt', idx)
[16/18] git commit: [#7656] ticket:648 Fix test failing due to
refactoring
Posted by je...@apache.org.
[#7656] ticket:648 Fix test failing due to refactoring
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/83d428f8
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/83d428f8
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/83d428f8
Branch: refs/heads/je/42cc_7656
Commit: 83d428f80398459e77fd8500ac6842b1a5b05b27
Parents: e983978
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 16:29:25 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 16:29:25 2014 +0300
----------------------------------------------------------------------
Allura/allura/tests/functional/test_site_admin.py | 4 ++--
Allura/allura/tests/model/test_auth.py | 2 +-
Allura/allura/tests/unit/test_solr.py | 9 +++++----
3 files changed, 8 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/83d428f8/Allura/allura/tests/functional/test_site_admin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/functional/test_site_admin.py b/Allura/allura/tests/functional/test_site_admin.py
index ab1ffc4..0bb63fe 100644
--- a/Allura/allura/tests/functional/test_site_admin.py
+++ b/Allura/allura/tests/functional/test_site_admin.py
@@ -244,7 +244,7 @@ class TestProjectsSearch(TestController):
@patch('allura.controllers.site_admin.search')
def test_default_fields(self, search):
- search.search_projects.return_value = self.TEST_HIT
+ search.site_admin_search.return_value = self.TEST_HIT
r = self.app.get('/nf/admin/search_projects?q=fake&f=shortname')
options = [o['value'] for o in r.html.findAll('option')]
assert_equal(options, ['shortname', 'name', '__custom__'])
@@ -253,7 +253,7 @@ class TestProjectsSearch(TestController):
@patch('allura.controllers.site_admin.search')
def test_additional_fields(self, search):
- search.search_projects.return_value = self.TEST_HIT
+ search.site_admin_search.return_value = self.TEST_HIT
with h.push_config(config, **{'search.project.additional_fields': 'private, url'}):
r = self.app.get('/nf/admin/search_projects?q=fake&f=shortname')
options = [o['value'] for o in r.html.findAll('option')]
http://git-wip-us.apache.org/repos/asf/allura/blob/83d428f8/Allura/allura/tests/model/test_auth.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_auth.py b/Allura/allura/tests/model/test_auth.py
index 4660510..75cf5a2 100644
--- a/Allura/allura/tests/model/test_auth.py
+++ b/Allura/allura/tests/model/test_auth.py
@@ -295,7 +295,7 @@ def test_user_index():
assert_in('results_per_page_i', idx)
assert_in('email_format_s', idx)
assert_in('disable_user_messages_b', idx)
- assert_equal(idx['display_name_s'], 'Test Admin')
+ assert_equal(idx['display_name_t'], 'Test Admin')
assert_equal(idx['sex_s'], 'Unknown')
assert_in('birthdate_dt', idx)
assert_in('localization_s', idx)
http://git-wip-us.apache.org/repos/asf/allura/blob/83d428f8/Allura/allura/tests/unit/test_solr.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_solr.py b/Allura/allura/tests/unit/test_solr.py
index 7e104d1..8b237cc 100644
--- a/Allura/allura/tests/unit/test_solr.py
+++ b/Allura/allura/tests/unit/test_solr.py
@@ -92,15 +92,16 @@ class TestSolr(unittest.TestCase):
solr.query_server.search.assert_called_once_with('bar', kw='kw')
@mock.patch('allura.lib.search.search')
- def test_search_projects(self, search):
- from allura.lib.search import search_projects
+ def test_site_admin_search(self, search):
+ from allura.lib.search import site_admin_search
+ from allura.model import Project
fq = ['type_s:Project']
- search_projects('test', 'shortname', rows=25)
+ site_admin_search(Project, 'test', 'shortname', rows=25)
search.assert_called_once_with(
'shortname_s:"test"', fq=fq, ignore_errors=False, rows=25)
search.reset_mock()
- search_projects('shortname:test || shortname:test2', '__custom__')
+ site_admin_search(Project, 'shortname:test || shortname:test2', '__custom__')
search.assert_called_once_with(
'shortname_s:test || shortname_s:test2', fq=fq, ignore_errors=False)
[08/18] git commit: [#7656] ticket:648 Refactor projects search fn to
generic one and add fn for users
Posted by je...@apache.org.
[#7656] ticket:648 Refactor projects search fn to generic one and add fn for users
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/d0b3aa2e
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/d0b3aa2e
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/d0b3aa2e
Branch: refs/heads/je/42cc_7656
Commit: d0b3aa2ea13a141760b9af91765eaf110af8d67a
Parents: 1f3b1a3
Author: Igor Bondarenko <je...@gmail.com>
Authored: Tue Sep 9 13:08:44 2014 +0300
Committer: Igor Bondarenko <je...@gmail.com>
Committed: Tue Sep 9 13:08:44 2014 +0300
----------------------------------------------------------------------
Allura/allura/lib/search.py | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/d0b3aa2e/Allura/allura/lib/search.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/search.py b/Allura/allura/lib/search.py
index c0f45cc..49a3ad5 100644
--- a/Allura/allura/lib/search.py
+++ b/Allura/allura/lib/search.py
@@ -159,26 +159,35 @@ def search_artifact(atype, q, history=False, rows=10, short_timeout=False, filte
return search(q, fq=fq, rows=rows, short_timeout=short_timeout, ignore_errors=False, **kw)
-def search_projects(q, field, **kw):
- """Performs SOLR search for a project.
+def site_admin_search(model, q, field, **kw):
+ """Performs SOLR search for a given model.
+
+ Probably you should not use it directly. Use one of the specific functions below.
Raises SearchError if SOLR returns an error.
"""
- # first, grab a project and get the fields that it indexes
- from allura.model import Project
- p = Project.query.find().first()
- if p is None:
- return # if there are no projects, we won't find anything
- fields = p.index()
+ # first, grab a object and get the fields that it indexes
+ obj = model.query.find().first()
+ if obj is None:
+ return # if there are no objects, we won't find anything
+ fields = obj.index()
if field == '__custom__':
# custom query -> query as is
- q = p.translate_query(q, fields)
+ q = obj.translate_query(q, fields)
else:
# construct query for a specific selected field
- q = p.translate_query(u'%s:"%s"' % (field, q), fields)
- fq = [u'type_s:Project']
+ q = obj.translate_query(u'%s:"%s"' % (field, q), fields)
+ fq = [u'type_s:%s' % model.type_s]
return search(q, fq=fq, ignore_errors=False, **kw)
+def search_projects(q, field, **kw):
+ from allura.model import Project
+ return site_admin_search(Project, q, field, **kw)
+
+def search_users(q, field, **kw):
+ from allura.model import User
+ return site_admin_search(User, q, field, **kw)
+
def search_app(q='', fq=None, app=True, **kw):
"""Helper for app/project search.