Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1# -*- coding: utf-8 -*- 

2from ._version import __version__ 

3 

4import operator 

5 

6import pytest 

7 

8orders_map = { 

9 'first': 0, 

10 'second': 1, 

11 'third': 2, 

12 'fourth': 3, 

13 'fifth': 4, 

14 'sixth': 5, 

15 'seventh': 6, 

16 'eighth': 7, 

17 'last': -1, 

18 'second_to_last': -2, 

19 'third_to_last': -3, 

20 'fourth_to_last': -4, 

21 'fifth_to_last': -5, 

22 'sixth_to_last': -6, 

23 'seventh_to_last': -7, 

24 'eighth_to_last': -8, 

25} 

26 

27 

28def pytest_configure(config): 

29 """Register the "run" marker.""" 

30 

31 config_line = ( 

32 'run: specify ordering information for when tests should run ' 

33 'in relation to one another. Provided by pytest-ordering. ' 

34 'See also: http://pytest-ordering.readthedocs.org/' 

35 ) 

36 config.addinivalue_line('markers', config_line) 

37 

38 

39def pytest_collection_modifyitems(session, config, items): 

40 grouped_items = {} 

41 

42 for item in items: 

43 

44 for mark_name, order in orders_map.items(): 

45 mark = item.get_closest_marker(mark_name) 

46 

47 if mark: 

48 item.add_marker(pytest.mark.run(order=order)) 

49 break 

50 

51 mark = item.get_closest_marker('run') 

52 

53 if mark: 

54 order = mark.kwargs.get('order') 

55 else: 

56 order = None 

57 

58 grouped_items.setdefault(order, []).append(item) 

59 

60 sorted_items = [] 

61 unordered_items = [grouped_items.pop(None, [])] 

62 

63 start_list = sorted((i for i in grouped_items.items() if i[0] >= 0), 

64 key=operator.itemgetter(0)) 

65 end_list = sorted((i for i in grouped_items.items() if i[0] < 0), 

66 key=operator.itemgetter(0)) 

67 

68 sorted_items.extend([i[1] for i in start_list]) 

69 sorted_items.extend(unordered_items) 

70 sorted_items.extend([i[1] for i in end_list]) 

71 

72 items[:] = [item for sublist in sorted_items for item in sublist]