예제 #1
0
def last_activity(app_id):
    sql = text('''SELECT finish_time FROM task_run WHERE app_id=:app_id
               ORDER BY finish_time DESC LIMIT 1''')
    results = db.engine.execute(sql, app_id=app_id)
    for row in results:
        if row is not None:
            print pretty_date(row[0])
            return pretty_date(row[0])
        else:
            return None
예제 #2
0
def last_activity(app_id):
    sql = text('''SELECT finish_time FROM task_run WHERE app_id=:app_id
               ORDER BY finish_time DESC LIMIT 1''')
    results = db.engine.execute(sql, app_id=app_id)
    for row in results:
        if row is not None:
            print pretty_date(row[0])
            return pretty_date(row[0])
        else:
            return None
def get_all(category):
    """Return a list of published projects for a given category.
    """
    sql = text('''SELECT project.id, project.name, project.short_name,
           project.description, project.info, project.created, project.updated,
           project.category_id, project.featured, "user".fullname AS owner
           FROM "user", project
           LEFT OUTER JOIN category ON project.category_id=category.id
           WHERE
           category.short_name=:category
           AND "user".id=project.owner_id
           AND project.published=true
           AND (project.info->>'passwd_hash') IS NULL
           GROUP BY project.id, "user".id ORDER BY project.name;''')

    results = session.execute(sql, dict(category=category))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(project)
    return projects
예제 #4
0
def manage_users(page):
    """
    Admin page for all PyBossa registered users.
    Returns a Jinja2 rendered template with the users.

    Note ::
    This would be an admin only page, hence, rendering cached data
    not necessary. Instead the admin would rather want the most updated data
    """
    per_page = 24
    pagination = User.query.paginate(page, per_page, False)
    accounts = pagination.items
    count = pagination.total

    """
    Normalize accounts for it to be rendered by the global helper functions we use in the theme
    """
    for k in accounts:
        k.n_task_runs = len(k.task_runs)
        k.registered_ago = pretty_date(k.created)

    if not accounts and page !=1 and not current_user.admin:
        abort(404)

    if current_user.is_authenticated():
        user_id = current_user.id
    else:
        user_id = 'anonymous'
    return render_template('geotagx/users/index.html', accounts = accounts,
                           total = count, pagination_page = str(page),
                           title = "Community", pagination = pagination)
예제 #5
0
def get_draft(category=None, page=1, per_page=5):
    """Return list of draft projects"""
    try:
        sql = text('''SELECT app.id, app.name, app.short_name, app.created,
                   app.description, app.info, "user".fullname as owner
                   FROM "user", app LEFT JOIN task ON app.id=task.app_id
                   WHERE task.app_id IS NULL AND app.info NOT LIKE('%task_presenter%')
                   AND app.hidden=0
                   AND app.owner_id="user".id
                   OFFSET :offset
                   LIMIT :limit;''')

        offset = (page - 1) * per_page
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #6
0
def get_draft(category, page=1, per_page=5):
    """Return list of draft applications"""

    count = n_draft()

    sql = text('''SELECT app.id, app.name, app.short_name, app.created,
               app.description, app.info, "user".fullname as owner
               FROM "user", app LEFT JOIN task ON app.id=task.app_id
               WHERE task.app_id IS NULL AND app.info NOT LIKE('%task_presenter%')
               AND app.hidden=0
               AND app.owner_id="user".id
               OFFSET :offset
               LIMIT :limit;''')

    offset = (page - 1) * per_page
    results = db.engine.execute(sql, limit=per_page, offset=offset)
    apps = []
    for row in results:
        app = dict(id=row.id,
                   name=row.name,
                   short_name=row.short_name,
                   created=row.created,
                   description=row.description,
                   owner=row.owner,
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   overall_progress=overall_progress(row.id),
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps, count
예제 #7
0
def get_user_summary(name):
    """Return user summary."""
    sql = text('''
               SELECT "user".id, "user".name, "user".fullname, "user".created,
               "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
               "user".google_user_id, "user".info,
               "user".email_addr, COUNT(task_run.user_id) AS n_answers,
               "user".valid_email, "user".confirmation_email_sent
               FROM "user"
               LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
               WHERE "user".name=:name
               GROUP BY "user".id;
               ''')
    results = session.execute(sql, dict(name=name))
    user = dict()
    for row in results:
        user = dict(id=row.id, name=row.name, fullname=row.fullname,
                    created=row.created, api_key=row.api_key,
                    twitter_user_id=row.twitter_user_id,
                    google_user_id=row.google_user_id,
                    facebook_user_id=row.facebook_user_id,
                    info=dict(json.loads(row.info)),
                    email_addr=row.email_addr, n_answers=row.n_answers,
                    valid_email=row.valid_email,
                    confirmation_email_sent=row.confirmation_email_sent,
                    registered_ago=pretty_date(row.created))
    if user:
        rank_score = rank_and_score(user['id'])
        user['rank'] = rank_score['rank']
        user['score'] = rank_score['score']
        user['total'] = get_total_users()
        return user
    else:  # pragma: no cover
        return None
예제 #8
0
def get_all(category):
    """Return a list of published projects for a given category.
    """
    sql = text(
        '''SELECT project.id, project.name, project.short_name,
           project.description, project.info, project.created, project.updated,
           project.category_id, project.featured, "user".fullname AS owner
           FROM "user", project
           LEFT OUTER JOIN category ON project.category_id=category.id
           WHERE
           category.short_name=:category
           AND "user".id=project.owner_id
           AND project.published=true
           AND (project.info->>'passwd_hash') IS NULL
           GROUP BY project.id, "user".id ORDER BY project.name;''')

    results = session.execute(sql, dict(category=category))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name, short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(Project().to_public_json(project))
    return projects
예제 #9
0
def get_all_draft(category=None):
    """Return list of all draft projects."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.created,
               project.description, project.info, project.updated, "user".fullname as owner
               FROM "user", project LEFT JOIN task ON project.id=task.project_id
               WHERE task.project_id IS NULL
               AND (project.info->>'task_presenter') IS NULL
               AND project.hidden=0
               AND project.owner_id="user".id;''')

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(project)
    return projects
예제 #10
0
def get_users_page(page, per_page=24):
    """Return users with a paginator."""
    offset = (page - 1) * per_page
    sql = text(
        """SELECT "user".id, "user".name,
               "user".fullname, "user".email_addr,
               "user".created, "user".info, COUNT(task_run.id) AS task_runs
               FROM task_run, "user"
               WHERE "user".id=task_run.user_id GROUP BY "user".id
               ORDER BY "user".created DESC LIMIT :limit OFFSET :offset"""
    )
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    accounts = []
    for row in results:
        user = dict(
            id=row.id,
            name=row.name,
            fullname=row.fullname,
            email_addr=row.email_addr,
            created=row.created,
            task_runs=row.task_runs,
            info=row.info,
            registered_ago=pretty_date(row.created),
        )
        accounts.append(user)
    return accounts
예제 #11
0
파일: apps.py 프로젝트: bcfuchs/pybossa
def get_draft(category, page=1, per_page=5):
    """Return list of draft projects"""
    try:
        count = n_draft()

        sql = text('''SELECT app.id, app.name, app.short_name, app.created,
                   app.description, app.info, "user".fullname as owner
                   FROM "user", app LEFT JOIN task ON app.id=task.app_id
                   WHERE task.app_id IS NULL AND app.info NOT LIKE('%task_presenter%')
                   AND app.hidden=0
                   AND app.owner_id="user".id
                   OFFSET :offset
                   LIMIT :limit;''')

        offset = (page - 1) * per_page
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps, count
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #12
0
def get_featured(category=None, page=1, per_page=5):
    """Return a list of featured projects with a pagination."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.info, project.created,
               project.description,
               "user".fullname AS owner FROM project, "user"
               WHERE project.featured=true AND project.hidden=0
               AND "user".id=project.owner_id GROUP BY project.id, "user".id
               OFFSET(:offset) LIMIT(:limit);
               ''')

    offset = (page - 1) * per_page
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
        projects.append(project)
    return projects
def get_all_draft(category=None):
    """Return list of all draft projects."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.created,
            project.description, project.info, project.updated,
            "user".fullname AS owner
           FROM "user", project
           WHERE project.owner_id="user".id
           AND project.published=false;''')

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(project)
    return projects
def get_all_featured(category=None):
    """Return a list of featured projects with a pagination."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.info,
               project.created, project.updated, project.description,
               "user".fullname AS owner
           FROM project, "user"
           WHERE project.featured=true
           AND "user".id=project.owner_id
           GROUP BY project.id, "user".id;''')

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       updated=row.updated,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(project)
    return projects
예제 #15
0
def get_all_draft(category=None):
    """Return list of all draft projects."""
    sql = text(
        """SELECT project.id, project.name, project.short_name, project.created,
               project.description, project.info, project.updated, "user".fullname as owner
               FROM "user", project LEFT JOIN task ON project.id=task.project_id
               WHERE task.project_id IS NULL
               AND (project.info->>'task_presenter') IS NULL
               AND project.hidden=0
               AND project.owner_id="user".id;"""
    )

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(
            id=row.id,
            name=row.name,
            short_name=row.short_name,
            created=row.created,
            updated=row.updated,
            description=row.description,
            owner=row.owner,
            last_activity=pretty_date(last_activity(row.id)),
            last_activity_raw=last_activity(row.id),
            overall_progress=overall_progress(row.id),
            n_tasks=n_tasks(row.id),
            n_volunteers=n_volunteers(row.id),
            info=row.info,
        )
        projects.append(project)
    return projects
예제 #16
0
def get_all_featured(category=None):
    """Return a list of featured projects with a pagination."""
    # sql = text(
    #     '''SELECT project.id, project.name, project.short_name, project.info,
    #            project.created, project.updated, project.description,
    #            "user".fullname AS owner
    #        FROM project, "user"
    #        WHERE project.featured=true
    #        AND "user".id=project.owner_id
    #        GROUP BY project.id, "user".id;''')

    # results = session.execute(sql)
    results = session.query(Project,
                            User).filter(User.id == Project.owner_id).filter(
                                Project.featured).group_by(
                                    Project.id, User.id)
    projects = []

    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       updated=row.updated,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(Project().to_public_json(project))
    return projects
예제 #17
0
파일: projects.py 프로젝트: Skytim/nccuTEG
def get_all(category):
    """Return a list of projects with at least one task and a task_presenter.
    """
    sql = text('''SELECT project.id, project.name, project.short_name,
               project.description, project.info, project.created, project.updated,
               project.category_id, project.featured, "user".fullname AS owner
               FROM "user", task, project
               LEFT OUTER JOIN category ON project.category_id=category.id
               WHERE
               category.short_name=:category
               AND project.hidden=0
               AND "user".id=project.owner_id
               AND project.info LIKE('%task_presenter%')
               AND task.project_id=project.id
               GROUP BY project.id, "user".id ORDER BY project.name;''')

    results = session.execute(sql, dict(category=category))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name, short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
        projects.append(project)
    return projects
예제 #18
0
def get_featured(category, page=1, per_page=5):
    """Return a list of featured apps with a pagination"""

    count = n_featured()

    sql = text(
        '''SELECT app.id, app.name, app.short_name, app.info, app.created,
               app.description,
               "user".fullname AS owner FROM app, featured, "user"
               WHERE app.id=featured.app_id AND app.hidden=0
               AND "user".id=app.owner_id GROUP BY app.id, "user".id
               OFFSET(:offset) LIMIT(:limit);
               ''')
    offset = (page - 1) * per_page
    results = db.engine.execute(sql, limit=per_page, offset=offset)
    apps = []
    for row in results:
        app = dict(id=row.id,
                   name=row.name,
                   short_name=row.short_name,
                   created=row.created,
                   description=row.description,
                   overall_progress=overall_progress(row.id),
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   owner=row.owner,
                   featured=row.id,
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps, count
예제 #19
0
파일: apps.py 프로젝트: bcfuchs/pybossa
def get_featured(category, page=1, per_page=5):
    """Return a list of featured apps with a pagination"""
    try:
        count = n_featured()

        sql = text('''SELECT app.id, app.name, app.short_name, app.info, app.created,
                   app.description,
                   "user".fullname AS owner FROM app, featured, "user"
                   WHERE app.id=featured.app_id AND app.hidden=0
                   AND "user".id=app.owner_id GROUP BY app.id, "user".id
                   OFFSET(:offset) LIMIT(:limit);
                   ''')
        offset = (page - 1) * per_page

        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created, description=row.description,
                       overall_progress=overall_progress(row.id),
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       featured=row.id,
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps, count
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #20
0
def get_users_page(page, per_page=24):
    """Return users with a paginator."""
    offset = (page - 1) * per_page
    sql = text('''SELECT "user".id, "user".name,
               "user".fullname, "user".email_addr,
               "user".created, "user".info, COUNT(task_run.id) AS task_runs
               FROM task_run, "user"
               WHERE "user".id=task_run.user_id GROUP BY "user".id
               ORDER BY "user".created DESC LIMIT :limit OFFSET :offset''')
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    accounts = []

    u = User()

    for row in results:
        user = dict(id=row.id,
                    name=row.name,
                    fullname=row.fullname,
                    email_addr=row.email_addr,
                    created=row.created,
                    task_runs=row.task_runs,
                    info=row.info,
                    registered_ago=pretty_date(row.created))
        tmp = u.to_public_json(data=user)
        accounts.append(tmp)
    return accounts
예제 #21
0
파일: apps.py 프로젝트: SkyTruth/pybossa
def get_draft(category, page=1, per_page=5):
    """Return list of draft applications"""

    count = n_draft()

    sql = text('''
               SELECT app.id, app.name, app.short_name, app.created,
               app.description, app.info, "user".fullname as owner
               FROM "user", app LEFT JOIN task ON app.id=task.app_id
               WHERE task.app_id IS NULL AND app.info NOT LIKE('%task_presenter%')
               AND app.hidden=0
               AND app.owner_id="user".id
               OFFSET :offset
               LIMIT :limit;''')

    offset = (page - 1) * per_page
    results = db.engine.execute(sql, limit=per_page, offset=offset)
    apps = []
    for row in results:
        app = dict(id=row.id, name=row.name, short_name=row.short_name,
                   created=row.created,
                   description=row.description,
                   owner=row.owner,
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   overall_progress=overall_progress(row.id),
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps, count
예제 #22
0
def get_draft(category=None, page=1, per_page=5):
    """Return list of draft projects."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.created,
               project.description, project.info, "user".fullname as owner
               FROM "user", project LEFT JOIN task ON project.id=task.project_id
               WHERE task.project_id IS NULL
               AND project.info NOT LIKE('%task_presenter%')
               AND project.hidden=0
               AND project.owner_id="user".id
               OFFSET :offset
               LIMIT :limit;''')

    offset = (page - 1) * per_page
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
        projects.append(project)
    return projects
예제 #23
0
def get_all(category):
    """Return a list of projects with at least one task and a task_presenter.
    """
    sql = text('''SELECT project.id, project.name, project.short_name,
               project.description, project.info, project.created, project.updated,
               project.category_id, project.featured, "user".fullname AS owner
               FROM "user", task, project
               LEFT OUTER JOIN category ON project.category_id=category.id
               WHERE
               category.short_name=:category
               AND project.hidden=0
               AND "user".id=project.owner_id
               AND project.info LIKE('%task_presenter%')
               AND task.project_id=project.id
               GROUP BY project.id, "user".id ORDER BY project.name;''')

    results = session.execute(sql, dict(category=category))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
        projects.append(project)
    return projects
예제 #24
0
파일: apps.py 프로젝트: alisheikh/pybossa
def get_featured(category=None, page=1, per_page=5):
    """Return a list of featured apps with a pagination"""
    sql = text('''SELECT app.id, app.name, app.short_name, app.info, app.created,
               app.description,
               "user".fullname AS owner FROM app, "user"
               WHERE app.featured=true AND app.hidden=0
               AND "user".id=app.owner_id GROUP BY app.id, "user".id
               OFFSET(:offset) LIMIT(:limit);
               ''')

    offset = (page - 1) * per_page
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    apps = []
    for row in results:
        app = dict(id=row.id, name=row.name, short_name=row.short_name,
                   created=row.created, description=row.description,
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   owner=row.owner,
                   overall_progress=overall_progress(row.id),
                   n_tasks=n_tasks(row.id),
                   n_volunteers=n_volunteers(row.id),
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps
예제 #25
0
def get_all_featured(category=None):
    """Return a list of featured projects with a pagination."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.info,
               project.created, project.updated, project.description,
               "user".fullname AS owner
           FROM project, "user"
           WHERE project.featured=true
           AND "user".id=project.owner_id
           GROUP BY project.id, "user".id;''')

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created, description=row.description,
                       updated=row.updated,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(Project().to_public_json(project))
    return projects
예제 #26
0
파일: users.py 프로젝트: ciandt-d1/pybossa
def get_user_summary(name):
    """Return user summary."""
    sql = text('''
               SELECT "user".id, "user".name, "user".fullname, "user".created,
               "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
               "user".google_user_id, "user".info,
               "user".email_addr, COUNT(task_run.user_id) AS n_answers,
               "user".valid_email, "user".confirmation_email_sent
               FROM "user"
               LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
               WHERE "user".name=:name
               GROUP BY "user".id;
               ''')
    results = session.execute(sql, dict(name=name))
    user = dict()
    for row in results:
        user = dict(id=row.id, name=row.name, fullname=row.fullname,
                    created=row.created, api_key=row.api_key,
                    twitter_user_id=row.twitter_user_id,
                    google_user_id=row.google_user_id,
                    facebook_user_id=row.facebook_user_id,
                    info=row.info,
                    email_addr=row.email_addr, n_answers=row.n_answers,
                    valid_email=row.valid_email,
                    confirmation_email_sent=row.confirmation_email_sent,
                    registered_ago=pretty_date(row.created))
    if user:
        rank_score = rank_and_score(user['id'])
        user['rank'] = rank_score['rank']
        user['score'] = rank_score['score']
        user['total'] = get_total_users()
        return user
    else:  # pragma: no cover
        return None
예제 #27
0
def get_featured(category=None, page=1, per_page=5):
    """Return a list of featured apps with a pagination"""
    try:
        sql = text('''SELECT app.id, app.name, app.short_name, app.info, app.created,
                   app.description,
                   "user".fullname AS owner FROM app, "user"
                   WHERE app.featured=true AND app.hidden=0
                   AND "user".id=app.owner_id GROUP BY app.id, "user".id
                   OFFSET(:offset) LIMIT(:limit);
                   ''')
        offset = (page - 1) * per_page

        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created, description=row.description,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       owner=row.owner,
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #28
0
def get_all_draft(category=None):
    """Return list of all draft projects."""
    sql = text(
        '''SELECT project.id, project.name, project.short_name, project.created,
            project.description, project.info, project.updated,
            "user".fullname AS owner
           FROM "user", project
           WHERE project.owner_id="user".id
           AND project.published=false;''')

    results = session.execute(sql)
    projects = []
    for row in results:
        project = dict(id=row.id, name=row.name, short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(Project().to_public_json(project))
    return projects
예제 #29
0
파일: apps.py 프로젝트: alisheikh/pybossa
def get(category, page=1, per_page=5):
    """Return a list of apps with at least one task and a task_presenter
       with a pagination for a given category"""
    sql = text('''SELECT app.id, app.name, app.short_name, app.description,
               app.info, app.created, app.category_id, app.featured, "user".fullname AS owner
               FROM "user", task, app
               LEFT OUTER JOIN category ON app.category_id=category.id
               WHERE
               category.short_name=:category
               AND app.hidden=0
               AND "user".id=app.owner_id
               AND app.info LIKE('%task_presenter%')
               AND task.app_id=app.id
               GROUP BY app.id, "user".id ORDER BY app.name
               OFFSET :offset
               LIMIT :limit;''')

    offset = (page - 1) * per_page
    results = session.execute(sql, dict(category=category, limit=per_page, offset=offset))
    apps = []
    for row in results:
        app = dict(id=row.id,
                   name=row.name, short_name=row.short_name,
                   created=row.created,
                   description=row.description,
                   owner=row.owner,
                   featured=row.featured,
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   overall_progress=overall_progress(row.id),
                   n_tasks=n_tasks(row.id),
                   n_volunteers=n_volunteers(row.id),
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps
예제 #30
0
def get_user_summary(name, current_user=None):
    """Return user summary."""
    sql = text('''
               SELECT "user".id, "user".name, "user".fullname, "user".created,
               "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
               "user".google_user_id, "user".info, "user".admin,
               "user".locale,
               "user".email_addr, COUNT(task_run.user_id) AS n_answers,
               "user".valid_email, "user".confirmation_email_sent,
               max(task_run.finish_time) AS last_task_submission_on,
               "user".restrict
               FROM "user"
               LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
               WHERE "user".name=:name
               GROUP BY "user".id;
               ''')
    results = session.execute(sql, dict(name=name))
    user = dict()
    for row in results:
        user = dict(id=row.id,
                    name=row.name,
                    fullname=row.fullname,
                    created=row.created,
                    api_key=row.api_key,
                    twitter_user_id=row.twitter_user_id,
                    google_user_id=row.google_user_id,
                    facebook_user_id=row.facebook_user_id,
                    info=row.info,
                    admin=row.admin,
                    locale=row.locale,
                    email_addr=row.email_addr,
                    n_answers=row.n_answers,
                    valid_email=row.valid_email,
                    confirmation_email_sent=row.confirmation_email_sent,
                    registered_ago=pretty_date(row.created),
                    last_task_submission_on=row.last_task_submission_on,
                    restrict=row.restrict)
    if user:
        rank_score = rank_and_score(user['id'])
        user['rank'] = rank_score['rank']
        user['score'] = rank_score['score']
        user['total'] = get_total_users()
        if user['restrict']:
            if (current_user and current_user.is_authenticated
                    and (current_user.id == user['id'])):
                return user
            else:
                return None
        else:
            return user
    else:  # pragma: no cover
        return None
예제 #31
0
파일: users.py 프로젝트: fesp21/pybossa
def get_users_page(page, per_page=24):
    offset = (page - 1) * per_page
    sql = text('''SELECT "user".id, "user".name, "user".fullname, "user".email_addr,
               "user".created, "user".info, COUNT(task_run.id) AS task_runs
               FROM task_run, "user"
               WHERE "user".id=task_run.user_id GROUP BY "user".id
               ORDER BY "user".created DESC LIMIT :limit OFFSET :offset''')
    results = db.engine.execute(sql, limit=per_page, offset=offset)
    accounts = []
    for row in results:
        user = dict(id=row.id, name=row.name, fullname=row.fullname,
                    email_addr=row.email_addr, created=row.created,
                    task_runs=row.task_runs, info=dict(json.loads(row.info)),
                    registered_ago=pretty_date(row.created))
        accounts.append(user)
    return accounts
예제 #32
0
파일: apps.py 프로젝트: bcfuchs/pybossa
def get(category, page=1, per_page=5):
    """Return a list of apps with at least one task and a task_presenter
       with a pagination for a given category"""
    try:
        count = n_count(category)

        sql = text('''SELECT app.id, app.name, app.short_name, app.description,
                   app.info, app.created, app.category_id, "user".fullname AS owner,
                   featured.app_id as featured
                   FROM "user", task, app
                   LEFT OUTER JOIN category ON app.category_id=category.id
                   LEFT OUTER JOIN featured ON app.id=featured.app_id
                   WHERE
                   category.short_name=:category
                   AND app.hidden=0
                   AND "user".id=app.owner_id
                   AND app.info LIKE('%task_presenter%')
                   AND task.app_id=app.id
                   GROUP BY app.id, "user".id, featured.app_id ORDER BY app.name
                   OFFSET :offset
                   LIMIT :limit;''')

        offset = (page - 1) * per_page
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(category=category, limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id,
                       name=row.name, short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps, count
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #33
0
def get(category, page=1, per_page=5):
    """Return a list of apps with at least one task and a task_presenter
       with a pagination for a given category"""

    count = n_count(category)

    sql = text('''
               SELECT app.id, app.name, app.short_name, app.description,
               app.info, app.created, app.category_id, "user".fullname AS owner,
               featured.app_id as featured
               FROM "user", task, app
               LEFT OUTER JOIN category ON app.category_id=category.id
               LEFT OUTER JOIN featured ON app.id=featured.app_id
               WHERE
               category.short_name=:category
               AND app.hidden=0
               AND "user".id=app.owner_id
               AND app.info LIKE('%task_presenter%')
               AND task.app_id=app.id
               GROUP BY app.id, "user".id, featured.app_id ORDER BY app.name
               OFFSET :offset
               LIMIT :limit;''')

    offset = (page - 1) * per_page
    results = db.engine.execute(sql,
                                category=category,
                                limit=per_page,
                                offset=offset)
    apps = []
    for row in results:
        app = dict(id=row.id,
                   name=row.name,
                   short_name=row.short_name,
                   created=row.created,
                   description=row.description,
                   owner=row.owner,
                   featured=row.featured,
                   last_activity=pretty_date(last_activity(row.id)),
                   last_activity_raw=last_activity(row.id),
                   overall_progress=overall_progress(row.id),
                   info=dict(json.loads(row.info)))
        apps.append(app)
    return apps, count
예제 #34
0
def get(category, page=1, per_page=5):
    """Return a list of apps with at least one task and a task_presenter
       with a pagination for a given category"""
    try:
        sql = text('''SELECT app.id, app.name, app.short_name, app.description,
                   app.info, app.created, app.category_id, app.featured, "user".fullname AS owner
                   FROM "user", task, app
                   LEFT OUTER JOIN category ON app.category_id=category.id
                   WHERE
                   category.short_name=:category
                   AND app.hidden=0
                   AND "user".id=app.owner_id
                   AND app.info LIKE('%task_presenter%')
                   AND task.app_id=app.id
                   GROUP BY app.id, "user".id ORDER BY app.name
                   OFFSET :offset
                   LIMIT :limit;''')

        offset = (page - 1) * per_page
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(category=category, limit=per_page, offset=offset))
        apps = []
        for row in results:
            app = dict(id=row.id,
                       name=row.name, short_name=row.short_name,
                       created=row.created,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=dict(json.loads(row.info)))
            apps.append(app)
        return apps
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #35
0
파일: users.py 프로젝트: idahoan/pybossa
def get_users_page(page, per_page=24):
    offset = (page - 1) * per_page
    sql = text(
        '''SELECT "user".id, "user".name, "user".fullname, "user".email_addr,
               "user".created, "user".info, COUNT(task_run.id) AS task_runs
               FROM task_run, "user"
               WHERE "user".id=task_run.user_id GROUP BY "user".id
               ORDER BY "user".created DESC LIMIT :limit OFFSET :offset''')
    results = session.execute(sql, dict(limit=per_page, offset=offset))
    accounts = []
    for row in results:
        user = dict(id=row.id,
                    name=row.name,
                    fullname=row.fullname,
                    email_addr=row.email_addr,
                    created=row.created,
                    task_runs=row.task_runs,
                    info=dict(json.loads(row.info)),
                    registered_ago=pretty_date(row.created))
        accounts.append(user)
    return accounts
예제 #36
0
파일: users.py 프로젝트: geoapi/pybossa
def get_users_page(page, per_page=24):
    try:
        offset = (page - 1) * per_page
        sql = text('''SELECT "user".id, "user".name, "user".fullname, "user".email_addr,
                   "user".created, "user".info, COUNT(task_run.id) AS task_runs
                   FROM task_run, "user"
                   WHERE "user".id=task_run.user_id GROUP BY "user".id
                   ORDER BY "user".created DESC LIMIT :limit OFFSET :offset''')
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(limit=per_page, offset=offset))
        accounts = []
        for row in results:
            user = dict(id=row.id, name=row.name, fullname=row.fullname,
                        email_addr=row.email_addr, created=row.created,
                        task_runs=row.task_runs, info=dict(json.loads(row.info)),
                        registered_ago=pretty_date(row.created))
            accounts.append(user)
        return accounts
    except: # pragma: no cover
        session.rollback()
        raise
    finally:
        session.close()
예제 #37
0
def text_search(search_text, show_unpublished=True, show_hidden=True):
    """Return a list of published projects short_names.
    """
    sql = text('''SELECT project.id, project.name, project.short_name,
        project.description, project.info, project.created, project.updated,
        project.category_id, project.featured, "user".fullname AS owner
        FROM project
        LEFT JOIN "user" ON project.owner_id="user".id
        WHERE
        (project.name ILIKE '%' || :search_text || '%'
         OR "user".fullname ILIKE '%' || :search_text || '%'
         OR project.description ILIKE '%' || :search_text || '%')
         {}
         {}
        ORDER BY project.name;'''.format(
        'AND project.published=true' if not show_unpublished else '',
        'AND coalesce(project.hidden, false)=false'
        if not show_hidden else ''))
    results = session.execute(sql, dict(search_text=search_text))
    projects = []
    for row in results:
        project = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       created=row.created,
                       updated=row.updated,
                       description=row.description,
                       owner=row.owner,
                       featured=row.featured,
                       last_activity=pretty_date(last_activity(row.id)),
                       last_activity_raw=last_activity(row.id),
                       overall_progress=overall_progress(row.id),
                       n_tasks=n_tasks(row.id),
                       n_volunteers=n_volunteers(row.id),
                       info=row.info)
        projects.append(Project().to_public_json(project))
    return projects
예제 #38
0
def get_user_summary(name):
    try:
        # Get USER
        sql = text('''
                   SELECT "user".id, "user".name, "user".fullname, "user".created,
                   "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
                   "user".google_user_id, "user".info,
                   "user".email_addr, COUNT(task_run.user_id) AS n_answers
                   FROM "user" LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
                   WHERE "user".name=:name
                   GROUP BY "user".id;
                   ''')
        session = get_session(db, bind='slave')
        results = session.execute(sql, dict(name=name))
        user = dict()
        for row in results:
            user = dict(id=row.id, name=row.name, fullname=row.fullname,
                        created=row.created, api_key=row.api_key,
                        twitter_user_id=row.twitter_user_id,
                        google_user_id=row.google_user_id,
                        facebook_user_id=row.facebook_user_id,
                        info=dict(json.loads(row.info)),
                        email_addr=row.email_addr, n_answers=row.n_answers,
                        registered_ago=pretty_date(row.created))
        if user:
            rank_score = rank_and_score(user['id'])
            user['rank'] = rank_score['rank']
            user['score'] = rank_score['score']
            user['total'] = get_total_users()
            return user
        else: # pragma: no cover
            return None
    except: # pragma: no cover
        session.rollback()
    finally:
        session.close()
예제 #39
0
파일: users.py 프로젝트: fesp21/pybossa
def get_user_summary(name):
    # Get USER
    sql = text('''
               SELECT "user".id, "user".name, "user".fullname, "user".created,
               "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
               "user".google_user_id, "user".info,
               "user".email_addr, COUNT(task_run.user_id) AS n_answers
               FROM "user" LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
               WHERE "user".name=:name
               GROUP BY "user".id;
               ''')
    results = db.engine.execute(sql, name=name)
    user = dict()
    for row in results:
        user = dict(id=row.id, name=row.name, fullname=row.fullname,
                    created=row.created, api_key=row.api_key,
                    twitter_user_id=row.twitter_user_id,
                    google_user_id=row.google_user_id,
                    facebook_user_id=row.facebook_user_id,
                    info=dict(json.loads(row.info)),
                    email_addr=row.email_addr, n_answers=row.n_answers,
                    registered_ago=pretty_date(row.created))

    # Rank
    # See: https://gist.github.com/tokumine/1583695
    sql = text('''
               WITH global_rank AS (
                    WITH scores AS (
                        SELECT user_id, COUNT(*) AS score FROM task_run
                        WHERE user_id IS NOT NULL GROUP BY user_id)
                    SELECT user_id, score, rank() OVER (ORDER BY score desc)
                    FROM scores)
               SELECT * from global_rank WHERE user_id=:user_id;
               ''')

    if user:
        results = db.engine.execute(sql, user_id=user['id'])
        for row in results:
            user['rank'] = row.rank
            user['score'] = row.score

        # Get the APPs where the USER has participated
        sql = text('''
                   SELECT app.id, app.name, app.short_name, app.info,
                   COUNT(task_run.app_id) AS n_answers FROM app, task_run
                   WHERE app.id=task_run.app_id AND
                   task_run.user_id=:user_id GROUP BY app.id
                   ORDER BY n_answers DESC;
                   ''')
        results = db.engine.execute(sql, user_id=user['id'])
        apps_contributed = []
        for row in results:
            app = dict(id=row.id, name=row.name, info=dict(json.loads(row.info)),
                       short_name=row.short_name,
                       n_answers=row.n_answers)
            apps_contributed.append(app)

        # Get the CREATED APPS by the USER
        sql = text('''
                   SELECT app.id, app.name, app.short_name, app.info, app.created
                   FROM app
                   WHERE app.owner_id=:user_id
                   ORDER BY app.created DESC;
                   ''')
        results = db.engine.execute(sql, user_id=user['id'])
        apps_created = []
        for row in results:
            app = dict(id=row.id, name=row.name,
                       short_name=row.short_name,
                       info=dict(json.loads(row.info)))
            apps_created.append(app)

        return user, apps_contributed, apps_created
    else: # pragma: no cover
        return None, None, None
예제 #40
0
파일: users.py 프로젝트: fesp21/pybossa
def get_user_summary(name):
    # Get USER
    sql = text('''
               SELECT "user".id, "user".name, "user".fullname, "user".created,
               "user".api_key, "user".twitter_user_id, "user".facebook_user_id,
               "user".google_user_id, "user".info,
               "user".email_addr, COUNT(task_run.user_id) AS n_answers
               FROM "user" LEFT OUTER JOIN task_run ON "user".id=task_run.user_id
               WHERE "user".name=:name
               GROUP BY "user".id;
               ''')
    results = db.engine.execute(sql, name=name)
    user = dict()
    for row in results:
        user = dict(id=row.id,
                    name=row.name,
                    fullname=row.fullname,
                    created=row.created,
                    api_key=row.api_key,
                    twitter_user_id=row.twitter_user_id,
                    google_user_id=row.google_user_id,
                    facebook_user_id=row.facebook_user_id,
                    info=dict(json.loads(row.info)),
                    email_addr=row.email_addr,
                    n_answers=row.n_answers,
                    registered_ago=pretty_date(row.created))

    # Rank
    # See: https://gist.github.com/tokumine/1583695
    sql = text('''
               WITH global_rank AS (
                    WITH scores AS (
                        SELECT user_id, COUNT(*) AS score FROM task_run
                        WHERE user_id IS NOT NULL GROUP BY user_id)
                    SELECT user_id, score, rank() OVER (ORDER BY score desc)
                    FROM scores)
               SELECT * from global_rank WHERE user_id=:user_id;
               ''')

    if user:
        results = db.engine.execute(sql, user_id=user['id'])
        for row in results:
            user['rank'] = row.rank
            user['score'] = row.score

        # Get the APPs where the USER has participated
        sql = text('''
                   SELECT app.id, app.name, app.short_name, app.info,
                   COUNT(task_run.app_id) AS n_answers FROM app, task_run
                   WHERE app.id=task_run.app_id AND
                   task_run.user_id=:user_id GROUP BY app.id
                   ORDER BY n_answers DESC;
                   ''')
        results = db.engine.execute(sql, user_id=user['id'])
        apps_contributed = []
        for row in results:
            app = dict(id=row.id,
                       name=row.name,
                       info=dict(json.loads(row.info)),
                       short_name=row.short_name,
                       n_answers=row.n_answers)
            apps_contributed.append(app)

        # Get the CREATED APPS by the USER
        sql = text('''
                   SELECT app.id, app.name, app.short_name, app.info, app.created
                   FROM app
                   WHERE app.owner_id=:user_id
                   ORDER BY app.created DESC;
                   ''')
        results = db.engine.execute(sql, user_id=user['id'])
        apps_created = []
        for row in results:
            app = dict(id=row.id,
                       name=row.name,
                       short_name=row.short_name,
                       info=dict(json.loads(row.info)))
            apps_created.append(app)

        return user, apps_contributed, apps_created
    else:  # pragma: no cover
        return None, None, None
예제 #41
0
파일: apps.py 프로젝트: Web5design/pybossa
def last_activity(app):
    if (len(app.task_runs) >= 1):
        return pretty_date(app.task_runs[0].finish_time)
    else:
        return "None"
예제 #42
0
파일: core.py 프로젝트: bingoko/pybossa
 def pretty_date_filter(s):
     return pretty_date(s)
예제 #43
0
파일: core.py 프로젝트: vgutierrez9/pybossa
 def _pretty_date_filter(s):
     return pretty_date(s)
예제 #44
0
 def last_activity(self):
     if (len(self.task_runs) >= 1):
         return pretty_date(self.task_runs[0].finish_time)
         #return self.task_runs[0].finish_time
     else:
         return "None"
예제 #45
0
    def test_pretty_date(self):
        """Test pretty_date works."""
        now = datetime.now()
        pd = util.pretty_date()
        assert pd == "just now", pd

        pd = util.pretty_date(now.isoformat())
        assert pd == "just now", pd

        pd = util.pretty_date(calendar.timegm(time.gmtime()))
        assert pd == "just now", pd

        d = now + timedelta(days=10)
        pd = util.pretty_date(d.isoformat())
        assert pd == '', pd

        d = now - timedelta(seconds=10)
        pd = util.pretty_date(d.isoformat())
        assert pd == '10 seconds ago', pd

        d = now - timedelta(minutes=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'a minute ago', pd

        d = now - timedelta(minutes=2)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 minutes ago', pd

        d = now - timedelta(hours=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'an hour ago', pd

        d = now - timedelta(hours=5)
        pd = util.pretty_date(d.isoformat())
        assert pd == '5 hours ago', pd

        d = now - timedelta(days=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'Yesterday', pd

        d = now - timedelta(days=5)
        pd = util.pretty_date(d.isoformat())
        assert pd == '5 days ago', pd

        d = now - timedelta(weeks=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 weeks ago', pd

        d = now - timedelta(days=32)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 month ago', pd

        d = now - timedelta(days=62)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 months ago', pd

        d = now - timedelta(days=366)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 year ago', pd

        d = now - timedelta(days=766)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 years ago', pd
예제 #46
0
파일: test_util.py 프로젝트: ianthe/pybossa
    def test_pretty_date(self):
        """Test pretty_date works."""
        now = datetime.now()
        pd = util.pretty_date()
        assert pd == "just now", pd

        pd = util.pretty_date(now.isoformat())
        assert pd == "just now", pd

        pd = util.pretty_date(calendar.timegm(time.gmtime()))
        assert pd == "just now", pd

        d = now + timedelta(days=10)
        pd = util.pretty_date(d.isoformat())
        assert pd == '', pd

        d = now - timedelta(seconds=10)
        pd = util.pretty_date(d.isoformat())
        assert pd == '10 seconds ago', pd

        d = now - timedelta(minutes=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'a minute ago', pd

        d = now - timedelta(minutes=2)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 minutes ago', pd

        d = now - timedelta(hours=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'an hour ago', pd

        d = now - timedelta(hours=5)
        pd = util.pretty_date(d.isoformat())
        assert pd == '5 hours ago', pd

        d = now - timedelta(days=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == 'Yesterday', pd

        d = now - timedelta(days=5)
        pd = util.pretty_date(d.isoformat())
        assert pd == '5 days ago', pd

        d = now - timedelta(weeks=1)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 weeks ago', pd

        d = now - timedelta(days=32)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 month ago', pd

        d = now - timedelta(days=62)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 months ago', pd

        d = now - timedelta(days=366)
        pd = util.pretty_date(d.isoformat())
        assert pd == '1 year ago', pd

        d = now - timedelta(days=766)
        pd = util.pretty_date(d.isoformat())
        assert pd == '2 years ago', pd