def presence_top_5_users_monthly_view(month):  # pylint: disable=invalid-name
    """
    Return 5 users from top of mean presence by month.
    """
    months = calendar.month_name[1:]
    if month not in months:
        abort(404)
    data_xml = get_data_xml()
    data = get_data()
    result = []
    for user_id in data_xml:
        result.append(
            {
                'avatar': data_xml[user_id]['avatar'],
                'user_id': user_id,
                'name': data_xml[user_id]['name'],
                'mean': mean_by_month(
                    data.get(user_id, [])
                    )[months.index(month)],
            }
        )
    return sorted(
        result,
        key=lambda sort_by: sort_by['mean'],
        reverse=True
    )[:5]
 def test_get_data_xml(self):
     """
     Test parsing of XML file.
     """
     data = utils.get_data_xml()
     self.assertIsInstance(data, dict)
     self.assertItemsEqual(data.keys(), [10, 12, 15])
     self.assertEqual(data[10]['name'], 'John Doe')
 def test_memoize(self):
     """
     Test memorize data and updating if expired.
     """
     utils.get_data()
     self.assertIn('get_data', utils.CACHE)
     self.assertIn('value', utils.CACHE['get_data'])
     self.assertIn('time', utils.CACHE['get_data'])
     utils.CACHE['get_data']['time'] = 0
     utils.get_data()
     self.assertNotEqual(utils.CACHE['get_data']['time'], 0)
     utils.get_data_xml()
     self.assertEqual(len(utils.CACHE), 2)
     self.assertIn('get_data_xml', utils.CACHE)
     future_time = tm() + 100
     utils.CACHE['get_data'] = {'time': future_time, 'value': 'test'}
     utils.get_data()
     self.assertEqual(utils.CACHE['get_data']['value'], 'test')
 def test_get_data_xml(self):
     """
     Test parsing of XML file.
     """
     data = utils.get_data_xml()
     self.assertIsInstance(data, dict)
     self.assertItemsEqual(data.keys(), [10, 11, 176, 170, 26, 141])
     self.assertItemsEqual(data[26].keys(), ['avatar', 'name'])
     self.assertTrue(data[26]['avatar'].startswith('https://host:443/'))
     self.assertEqual(data[176]['name'], 'Adrian K.')
def user_image_view(user_id):
    """
    Return avatar value for selected user.
    """
    data_xml = get_data_xml()
    if user_id not in data_xml:
        log.debug('User %s not found!', user_id)
        abort(404)

    return data_xml[user_id]['avatar']
def users_view():
    """
    Users listing for dropdown.
    """
    data_xml = get_data_xml()
    return [
        {
            'user_id': user_id,
            'name': data_xml[user_id]['name'],
            'avatar': data_xml[user_id]['avatar']
        } for user_id in data_xml]
def users_view():
    """
    Users listing for dropdown.
    """
    locale.setlocale(locale.LC_COLLATE, "pl_PL.UTF-8")
    data = get_data_xml()
    return sorted([
        {
            'user_id': i,
            'name': user.get('name'),
            'avatar': user.get('avatar'),
        }
        for i, user in data.items()
    ], key=lambda x: x.get('name'), cmp=locale.strcoll)
def users_view():
    """
    Users listing for dropdown.
    """
    data_xml = get_data_xml()
    result = [
        {
            'user_id': user_id,
            'name': data_xml[user_id]['name'],
            'avatar': data_xml[user_id]['avatar']
        } for user_id in data_xml
    ]
    locale.setlocale(locale.LC_COLLATE, 'pl_PL.UTF-8')
    return sorted(
        result,
        cmp=locale.strcoll,
        key=lambda sort_by: sort_by['name']
    )
def overtime_in_quarter(quarter_id):
    """
    Returns top 3 users with most overtime hours in given quarter.
    """
    data = get_data()
    users = get_data_xml()
    quarters = group_quarters(data)
    result = overtime_hours_in_quarter(data, quarters[quarter_id])
    return sorted(
        [
            (
                users.get(user_id, {'name': 'User {}'.format(user_id)}),
                hours,
            )
            for user_id, hours in result.items() if hours > 0
        ],
        key=lambda x: x[1],
        reverse=True
    )[:3]
def users_view_xml():
    """
    Users listing for dropdown (from XML).
    """
    return get_data_xml()