summaryrefslogtreecommitdiffstats
path: root/__init__.py
blob: 0abdf75ca345c5c1f91e0981d5091fc943e08f90 (plain)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- coding: UTF-8 -*-
version, alpha = '0.56.0', False

# https://www.python.org/dev/peps/pep-0440 + git export magic using export-subst
_git_hash = "$Format:%h$".strip('$').replace("Format:%h", "")
_git_deco = '$Format:%d$'.strip('$()').replace("Format:%d", "")
_git_deco_arr = _git_deco.split(', ')
_git_tags = [i for i in _git_deco_arr if i.startswith("tag: v")]
_git_branches = [i for i in _git_deco_arr if i not in _git_tags + ['HEAD']]
if _git_branches and not _git_branches[-1].endswith('master') or alpha:
    if alpha:  # if not alpha, it is still not a true serving release
        version += 'a'  # no dashes(?)
    if _git_hash:
        version += '+git.{0}'.format(_git_hash)
elif _git_tags:
    assert any(t.endswith(version) for t in _git_tags), "version != tag"

license = 'GPLv2+'
copyright = """\
Copyright (C) 2015 Red Hat, Inc.
Licensed under {0}.
""".format(license).rstrip()

pkg_name = globals().get('__root__')

def package_name():
    global pkg_name
    if pkg_name is None:
        from os import readlink
        from os.path import abspath, basename, dirname, islink
        here = dirname(abspath(__file__))
        pkg_name = basename(abspath(readlink(here) if islink(here) else here))
    return pkg_name

# XXX eventually there should be precise plugin authorship tracking
author = ("Jan Pokorný <jpokorny+pkg-{0} @at@ Red Hat .dot. com>"
          " and plugin authors").format(package_name())

description = """\
Tool/library for transforming/analyzing cluster configuration formats

While primarily aimed at (CMAN,rgmanager)->(Corosync/CMAN,Pacemaker) cluster
stacks configuration conversion (as per RHEL trend), the command-filter-format
framework (capable of XSLT) offers also other uses through its plugin library.
"""
#Native plugins allows also for obfuscation of sensitive data within
#cluster configuration of supported cluster stacks, and other
#convenient actions.


_deobfuscate_email = (lambda what: what.replace(' @at@ ', '@')
                                       .replace(' .dot. ', '.')
                                       .replace('@Red Hat.', '@redhat.'))


def author_text(justname=None, first=False):
    if justname is not None or first:
        ret = ''
        authors = author.split(', ')
        first = first or len(authors) == 1
        for a in authors:
            name, rest = a.split('<', 1)
            email, rest = rest.split('>', 1)
            name, email, rest = map(str.strip, (name, email, rest))
            if justname:
                ret += ('' if first else ', ') + ' '.join((name, rest))
            else:
                ret += ('' if first else ', ') + _deobfuscate_email(email)
            if first:
                break
        return ret
    return _deobfuscate_email(author).lstrip('<').rstrip('>')


def copyright_text(justcopyright=None):
    if justcopyright is not None:
        c, licensed = copyright.split('\n', 1).rstrip()
        return c if justcopyright else licensed
    return copyright


def description_text(width=76, justhead=None):
    desc = description
    if justhead is False:
        desc = desc.split('\n', 2)[2]
    if not width or justhead is True:
        if justhead is True:
            desc = desc.split('\n', 1)[0]
            assert len(desc) <= (width or 1000)
    else:
        from textwrap import fill
        desc = map(lambda p: p.replace('\n', ' '), desc.split('\n\n'))
        desc = '\n\n'.join(map(lambda p: fill(p, width), desc))  #+ '\n'
    return desc


version_parts = (' '.join((package_name(), version)), copyright, '',
                 lambda: author_text().join(("Written by ", ".")))

def version_text(*args, **kwargs):
    args, sep = args + tuple(version_parts[len(args):]), kwargs.get('sep', '\n')
    return sep.join(a() if hasattr(a, '__call__') else a for a in args)