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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

# coding=utf-8 

"""Version definition and formatting.""" 

from __future__ import absolute_import, print_function, unicode_literals 

 

import datetime 

import os 

import subprocess 

 

from collections import namedtuple 

 

 

Version = namedtuple('Version', ['major', 'minor', 'patch', 'pre_release', 'sub']) 

 

 

# Change the version here! 

# * Use pre_release 'final' and sub 0 for stable 

# * Use pre_release 'alpha' and sub 0 for development (instead of 'dev') 

# 

# Examples: 

# (0, 1, 0, 'final', 0) -> '0.1.0' 

# (42, 1, 3, 'final', 0) -> '42.1.3' 

# (0, 1, 0, 'alpha', 0) -> '0.1.0.dev20170101133742' 

# (0, 1, 0, 'alpha', 1) -> '0.1.0a1' 

# (1, 0, 1, 'rc', 0) -> '1.0.1rc0' 

# (1, 0, 1, 'rc', 2) -> '1.0.1rc2' 

VERSION = Version(0, 1, 0, 'alpha', 0) 

 

 

def get_version(version): 

"""Return a PEP 440-compliant version.""" 

assert len(version) == 5 

assert version[3] in ('alpha', 'beta', 'rc', 'final') 

 

parts = 2 if version[2] == 0 else 3 

main = '.'.join([str(p) for p in version[:parts]]) 

 

sub = '' 

if version[3] == 'alpha' and version[4] == 0: 

timestamp = get_git_commit_timestamp() 

if timestamp: 

sub = '.dev{}'.format(timestamp) 

elif version[3] != 'final': 

mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'} 

sub = mapping[version[3]] + str(version[4]) 

 

return main + sub 

 

 

def get_git_commit_timestamp(): 

""" 

Return a numeric identifier of the latest git changeset. 

 

The result is the UTC timestamp of the changeset in YYYYMMDDHHMMSS format. 

This value isn't guaranteed to be unique, but collisions are very unlikely, 

so it's sufficient for generating the development version numbers. 

""" 

repo_dir = os.path.dirname(os.path.abspath(__file__)) 

git_log = subprocess.Popen( 

'git log --pretty=format:%ct --quiet -1 HEAD', 

stdout=subprocess.PIPE, stderr=subprocess.PIPE, 

shell=True, cwd=repo_dir, universal_newlines=True, 

) 

timestamp = git_log.communicate()[0] 

try: 

timestamp = datetime.datetime.utcfromtimestamp(int(timestamp)) 

except ValueError: 

return None 

return timestamp.strftime('%Y%m%d%H%M%S') 

 

 

__version_info__ = VERSION 

__version__ = get_version(__version_info__)