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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
# -*- coding: utf-8 -*-
# daemon/_metadata.py
# Part of ‘python-daemon’, an implementation of PEP 3143.
#
# Copyright © 2008–2015 Ben Finney <ben+python@benfinney.id.au>
#
# This is free software: you may copy, modify, and/or distribute this work
# under the terms of the Apache License, version 2.0 as published by the
# Apache Software Foundation.
# No warranty expressed or implied. See the file ‘LICENSE.ASF-2’ for details.
""" Package metadata for the ‘python-daemon’ distribution. """
from __future__ import (absolute_import, unicode_literals)
import json
import re
import collections
import datetime
import pkg_resources
distribution_name = "python-daemon"
version_info_filename = "version_info.json"
def get_distribution_version_info(filename=version_info_filename):
""" Get the version info from the installed distribution.
:param filename: Base filename of the version info resource.
:return: The version info as a mapping of fields. If the
distribution is not available, the mapping is empty.
The version info is stored as a metadata file in the
distribution.
"""
version_info = {
'release_date': "UNKNOWN",
'version': "UNKNOWN",
'maintainer': "UNKNOWN",
}
try:
distribution = pkg_resources.get_distribution(distribution_name)
except pkg_resources.DistributionNotFound:
distribution = None
if distribution is not None:
if distribution.has_metadata(version_info_filename):
content = distribution.get_metadata(version_info_filename)
version_info = json.loads(content)
return version_info
version_info = get_distribution_version_info()
version_installed = version_info['version']
rfc822_person_regex = re.compile(
"^(?P<name>[^<]+) <(?P<email>[^>]+)>$")
ParsedPerson = collections.namedtuple('ParsedPerson', ['name', 'email'])
def parse_person_field(value):
""" Parse a person field into name and email address.
:param value: The text value specifying a person.
:return: A 2-tuple (name, email) for the person's details.
If the `value` does not match a standard person with email
address, the `email` item is ``None``.
"""
result = (None, None)
match = rfc822_person_regex.match(value)
if len(value):
if match is not None:
result = ParsedPerson(
name=match.group('name'),
email=match.group('email'))
else:
result = ParsedPerson(name=value, email=None)
return result
author_name = "Ben Finney"
author_email = "ben+python@benfinney.id.au"
author = "{name} <{email}>".format(name=author_name, email=author_email)
class YearRange:
""" A range of years spanning a period. """
def __init__(self, begin, end=None):
self.begin = begin
self.end = end
def __unicode__(self):
text = "{range.begin:04d}".format(range=self)
if self.end is not None:
if self.end > self.begin:
text = "{range.begin:04d}–{range.end:04d}".format(range=self)
return text
__str__ = __unicode__
def make_year_range(begin_year, end_date=None):
""" Construct the year range given a start and possible end date.
:param begin_date: The beginning year (text) for the range.
:param end_date: The end date (text, ISO-8601 format) for the
range, or a non-date token string.
:return: The range of years as a `YearRange` instance.
If the `end_date` is not a valid ISO-8601 date string, the
range has ``None`` for the end year.
"""
begin_year = int(begin_year)
try:
end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d")
except (TypeError, ValueError):
# Specified end_date value is not a valid date.
end_year = None
else:
end_year = end_date.year
year_range = YearRange(begin=begin_year, end=end_year)
return year_range
copyright_year_begin = "2001"
build_date = version_info['release_date']
copyright_year_range = make_year_range(copyright_year_begin, build_date)
copyright = "Copyright © {year_range} {author} and others".format(
year_range=copyright_year_range, author=author)
license = "Apache-2"
url = "https://alioth.debian.org/projects/python-daemon/"
# Local variables:
# coding: utf-8
# mode: python
# End:
# vim: fileencoding=utf-8 filetype=python :
|