예제 #1
0
def paginate_web_users(request, domain):
    limit = int(request.GET.get('limit', 10))
    page = int(request.GET.get('page', 1))
    skip = limit * (page - 1)
    query = request.GET.get('query')

    result = (
        UserES().domain(domain).web_users().sort('username.exact')
        .search_string_query(query, ["username", "last_name", "first_name"])
        .start(skip).size(limit).run()
    )

    web_users = [WebUser.wrap(w) for w in result.hits]
    web_users_fmt = [{
        'email': u.get_email(),
        'domain': domain,
        'name': u.full_name,
        'role': u.role_label(domain),
        'phoneNumbers': u.phone_numbers,
        'id': u.get_id,
        'editUrl': reverse('user_account', args=[domain, u.get_id]),
        'removeUrl': (
            reverse('remove_web_user', args=[domain, u.user_id])
            if request.user.username != u.username else None
        ),
    } for u in web_users]

    return JsonResponse({
        'users': web_users_fmt,
        'total': result.total,
        'page': page,
        'query': query,
    })
예제 #2
0
    def get_users(self, in_data):
        if not isinstance(in_data, dict):
            return {
                'success': False,
                'error': _("Please provide pagination info."),
            }
        try:
            limit = in_data.get('limit', 10)
            page = in_data.get('page', 1)
            skip = limit * (page - 1)
            query = in_data.get('query')

            web_users_query = self.query_es(limit, skip, query=query)
            total = web_users_query.get('hits', {}).get('total', 0)
            results = web_users_query.get('hits', {}).get('hits', [])

            web_users = [WebUser.wrap(w['_source']) for w in results]
            self.apply_teams_to_users(web_users)  # for roles

            def _fmt_result(domain, u):
                return {
                    'email':
                    u.email,
                    'domain':
                    domain,
                    'name':
                    u.full_name,
                    'role':
                    u.role_label(),
                    'phoneNumbers':
                    u.phone_numbers,
                    'id':
                    u.get_id,
                    'editUrl':
                    reverse('user_account', args=[domain, u.get_id]),
                    'removeUrl':
                    (reverse('remove_web_user', args=[domain, u.user_id])
                     if self.request.user.username != u.username else None),
                }

            web_users_fmt = [_fmt_result(self.domain, u) for u in web_users]

            return {
                'response': {
                    'users': web_users_fmt,
                    'total': total,
                    'page': page,
                    'query': query,
                },
                'success': True,
            }
        except Exception as e:
            return {
                'error': e.message,
                'success': False,
            }
예제 #3
0
파일: tasks.py 프로젝트: soitun/commcare-hq
def update_subscription_properties_by_domain(domain):
    domain_obj = Domain.get_by_name(domain)
    if domain_obj:
        for row in get_all_user_rows(domain,
                                     include_web_users=True,
                                     include_mobile_users=False,
                                     include_docs=True):
            web_user = WebUser.wrap(row['doc'])
            properties = get_subscription_properties_by_user(web_user)
            update_subscription_properties_by_user.delay(
                web_user.get_id, properties)
예제 #4
0
def paginate_web_users(request, domain):
    def _query_es(limit, skip, query=None):
        web_user_filter = [
            {"term": {"user.domain_memberships.domain": domain}},
        ]
        web_user_filter.extend(ADD_TO_ES_FILTER['web_users'])

        q = {
            "filter": {"and": web_user_filter},
            "sort": {'username.exact': 'asc'},
        }
        default_fields = ["username", "last_name", "first_name"]
        q["query"] = search_string_query(query, default_fields)
        return es_query(
            params={}, q=q, es_index='users',
            size=limit, start_at=skip,
        )

    limit = int(request.GET.get('limit', 10))
    page = int(request.GET.get('page', 1))
    skip = limit * (page - 1)
    query = request.GET.get('query')

    web_users_query = _query_es(limit, skip, query=query)
    total = web_users_query.get('hits', {}).get('total', 0)
    results = web_users_query.get('hits', {}).get('hits', [])

    web_users = [WebUser.wrap(w['_source']) for w in results]

    def _fmt_result(domain, u):
        return {
            'email': u.get_email(),
            'domain': domain,
            'name': u.full_name,
            'role': u.role_label(domain),
            'phoneNumbers': u.phone_numbers,
            'id': u.get_id,
            'editUrl': reverse('user_account', args=[domain, u.get_id]),
            'removeUrl': (
                reverse('remove_web_user', args=[domain, u.user_id])
                if request.user.username != u.username else None
            ),
        }
    web_users_fmt = [_fmt_result(domain, u) for u in web_users]

    return json_response({
        'users': web_users_fmt,
        'total': total,
        'page': page,
        'query': query,
    })
예제 #5
0
    def get_users(self, in_data):
        if not isinstance(in_data, dict):
            return {
                'success': False,
                'error': _("Please provide pagination info."),
            }
        try:
            limit = in_data.get('limit', 10)
            page = in_data.get('page', 1)
            skip = limit * (page - 1)
            query = in_data.get('query')

            web_users_query = self.query_es(limit, skip, query=query)
            total = web_users_query.get('hits', {}).get('total', 0)
            results = web_users_query.get('hits', {}).get('hits', [])

            web_users = [WebUser.wrap(w['_source']) for w in results]
            self.apply_teams_to_users(web_users)  # for roles

            def _fmt_result(domain, u):
                return {
                    'email': u.email,
                    'domain': domain,
                    'name': u.full_name,
                    'role': u.role_label(),
                    'phoneNumbers': u.phone_numbers,
                    'id': u.get_id,
                    'editUrl': reverse('user_account', args=[domain, u.get_id]),
                    'removeUrl': (
                        reverse('remove_web_user', args=[domain, u.user_id])
                        if self.request.user.username != u.username else None
                    ),
                }
            web_users_fmt = [_fmt_result(self.domain, u) for u in web_users]

            return {
                'response': {
                    'users': web_users_fmt,
                    'total': total,
                    'page': page,
                    'query': query,
                },
                'success': True,
            }
        except Exception as e:
            return {
                'error': e.message,
                'success': False,
            }
 def _web_user_rows(self, domain):
     rows = []
     for user in get_all_user_rows(domain.name,
                                   include_web_users=True,
                                   include_mobile_users=False,
                                   include_inactive=False,
                                   include_docs=True):
         user = WebUser.wrap(user['doc'])
         rows.append([
             user.full_name,
             user.username,
             user.role_label(domain.name),
             self._format_date(user.last_login),
         ] + self._domain_properties(domain))
     return rows
예제 #7
0
    def get_users(self, in_data):
        if not isinstance(in_data, dict):
            return {"success": False, "error": _("Please provide pagination info.")}
        try:
            limit = in_data.get("limit", 10)
            page = in_data.get("page", 1)
            skip = limit * (page - 1)
            query = in_data.get("query")

            web_users_query = self.query_es(limit, skip, query=query)
            total = web_users_query.get("hits", {}).get("total", 0)
            results = web_users_query.get("hits", {}).get("hits", [])

            web_users = [WebUser.wrap(w["_source"]) for w in results]
            self.apply_teams_to_users(web_users)  # for roles

            def _fmt_result(domain, u):
                return {
                    "email": u.email,
                    "domain": domain,
                    "name": u.full_name,
                    "role": u.role_label(),
                    "phoneNumbers": u.phone_numbers,
                    "id": u.get_id,
                    "editUrl": reverse("user_account", args=[domain, u.get_id]),
                    "removeUrl": (
                        reverse("remove_web_user", args=[domain, u.user_id])
                        if self.request.user.username != u.username
                        else None
                    ),
                }

            web_users_fmt = [_fmt_result(self.domain, u) for u in web_users]

            return {"response": {"users": web_users_fmt, "total": total, "page": page, "query": query}, "success": True}
        except Exception as e:
            return {"error": e.message, "success": False}
예제 #8
0
파일: v0_5.py 프로젝트: caktus/commcare-hq
 def obj_get_list(self, bundle, **kwargs):
     if 'username' in bundle.request.GET:
         return [WebUser.get_by_username(bundle.request.GET['username'])]
     return [WebUser.wrap(u) for u in UserES().web_users().run().hits]
예제 #9
0
 def obj_get_list(self, bundle, **kwargs):
     if 'username' in bundle.request.GET:
         return [WebUser.get_by_username(bundle.request.GET['username'])]
     return [WebUser.wrap(u) for u in UserES().web_users().run().hits]
 def get_active_users(cls):
     six_months_ago = date.today() - timedelta(days=180)
     users = UserES().web_users().last_logged_in(gte=six_months_ago).run().hits
     return [WebUser.wrap(u) for u in users]
예제 #11
0
 def get_active_users(cls):
     six_months_ago = date.today() - timedelta(days=180)
     users = UserES().web_users().last_logged_in(gte=six_months_ago).run().hits
     return [WebUser.wrap(u) for u in users]