• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

andgineer / api-db-prototype / 8766121206

20 Apr 2024 03:45PM UTC coverage: 83.956% (-2.9%) from 86.892%
8766121206

push

github

andgineer
upgrade reqs

2 of 2 new or added lines in 2 files covered. (100.0%)

89 existing lines in 23 files now uncovered.

1057 of 1259 relevant lines covered (83.96%)

0.84 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.33
/src/controllers/users/list.py
1
from typing import Optional
1✔
2

3
import controllers.models
1✔
4
import db.conn
1✔
5
import db.models
1✔
6
from controllers.auth import AuthUser
1✔
7
from controllers.helper import api_result, token_to_auth_user, transaction
1✔
8
from controllers.models import PAGE_DEFAULT, PER_PAGE_DEFAULT, APIError, HttpCode, Paging
1✔
9
from journaling import log
1✔
10

11
DEFAULT_ORDER_BY = "-createdDatetime"
1✔
12

13

14
# mypy: disallow_untyped_decorators=False
15
@api_result
1✔
16
@transaction
1✔
17
@token_to_auth_user
1✔
18
def users_list(
1✔
19
    auth_user: AuthUser,
20
    email: Optional[str] = None,
21
    per_page: int = PER_PAGE_DEFAULT,
22
    page: int = PAGE_DEFAULT,
23
    order_by: str = DEFAULT_ORDER_BY,
24
) -> controllers.models.ApiResult:
25
    """Users list."""
26
    order_by_options = {
1✔
27
        "createddatetime": {"field": "createdDatetime", "model": db.models.User},
28
        "email": {"field": "email", "model": db.models.User},
29
    }
30
    if not auth_user.is_admin:
1✔
31
        return "Only admin can get list of users", HttpCode.unauthorized
1✔
32
    pager = Paging({"page": page, "per_page": per_page})
1✔
33
    pager.validate()
1✔
34
    if order_by.strip() == "":
1✔
UNCOV
35
        order_by = DEFAULT_ORDER_BY
×
36
    if order_by[0] == "-":
1✔
37
        order_by = order_by[1:]
1✔
38
        sort_dir = "desc"
1✔
39
    if order_by[0] == "+":
1✔
UNCOV
40
        order_by = order_by[1:]
×
41
    if order_by.lower() not in order_by_options:
1✔
UNCOV
42
        raise APIError(
×
43
            f'Wrong order by option "{order_by}". Possible options for order by: {", ".join(list(order_by_options.keys()))}'
44
        )
45
    sort_by = order_by_options[order_by.lower()]
1✔
46
    order_by = getattr(getattr(sort_by["model"], sort_by["field"]), sort_dir)()
1✔
47
    if email:
1✔
UNCOV
48
        users = [db.models.User.by_email(email, check=False)]
×
UNCOV
49
        if users[0] is None:
×
UNCOV
50
            users = []
×
UNCOV
51
        total = len(users)
×
52
    else:
53
        users = db.models.User.query().order_by(order_by)
1✔
54
        total = users.count()  # type: ignore
1✔
55
        users = users.limit(pager.per_page).offset((pager.page - 1) * pager.per_page)  # type: ignore
1✔
56
    # db.session..query(db.models.User).from_statement(
57
    #     text("SELECT * FROM users where name=:name")).\
58
    #     params(name='john').all()
59
    result = []
1✔
60
    for user in users:
1✔
61
        result.append(controllers.models.UserShort().from_orm(user).as_dict)
1✔
62
    log.debug(f'List of users: {[user["email"] for user in result]}')
1✔
63
    return {"data": result, "total": total}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc