GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Test Failed
Push — master ( 8fa80d...f4cf2c )
by dup
01:36
created

versions.common.get_feed_entries_from_url()   A

Complexity

Conditions 2

Size

Total Lines 21
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 7
nop 1
dl 0
loc 21
rs 10
c 0
b 0
f 0
1
#!/usr/bin/env python
2
# -*- coding: utf8 -*-
3
#
4
#  common.py : common tools used by versions.py modules
5
#
6
#  (C) Copyright 2016 - 2018 Olivier Delhomme
7
#  e-mail : [email protected]
8
#
9
#  This program is free software; you can redistribute it and/or modify
10
#  it under the terms of the GNU General Public License as published by
11
#  the Free Software Foundation; either version 3, or (at your option)
12
#  any later version.
13
#
14
#  This program is distributed in the hope that it will be useful,
15
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
16
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
#  GNU General Public License for more details.
18
#
19
#  You should have received a copy of the GNU General Public License
20
#  along with this program; if not, write to the Free Software Foundation,
21
#  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22
#
23
import feedparser
24
import time
25
26
27
def get_entry_published_date(entry):
28
    """
29
    Returns the published date of an entry.
30
    Selects the right field to do so
31
    """
32
    published_date = None
33
    field_name = ''
34
35
    if 'published_parsed' in entry:
36
        published_date = entry.published_parsed
37
        field_name = 'published_parsed'
38
    elif 'updated_parsed' in entry:
39
        published_date = entry.updated_parsed
40
        field_name = 'updated_parsed'
41
    elif 'pubDate' in entry:    # rss-0.91.dtd (netscape)
42
        published_date = entry.pubDate
43
        field_name = 'pubDate'
44
45
    return (published_date, field_name)
46
47
# End of get_entry_published_date() function
48
49
50
def make_list_of_newer_feeds(feed, feed_info, debug):
51
    """
52
    Compares feed entries and keep those that are newer than the latest
53
    check we've done and inserting the newer ones in reverse order in
54
    a list to be returned
55
    """
56
57
    feed_list = []
58
59
    # inserting into a list in reverse order to keep the most recent
60
    # version in case of multiple release of the same project in the
61
    # feeds
62
    for a_feed in feed.entries:
63
64
        if a_feed:
65
            (published_date, field_name) = get_entry_published_date(a_feed)
66
67
            print_debug(debug, u'\tFeed entry ({0}): Feed title: "{1:16}"'.format(time.strftime('%x %X', published_date), a_feed.title))
68
69
            if feed_info.is_newer(published_date):
70
                feed_list.insert(0, a_feed)
71
        else:
72
            print(u'Warning: empty feed in {}'.format(feed))
73
74
    return feed_list
75
76
# End of make_list_of_newer_feeds() function
77
78
79
def manage_http_status(feed, url):
80
    """
81
    Manages http status code present in feed and prints
82
    an error in case of a 3xx, 4xx or 5xx and stops
83
    doing anything for the feed by returning None.
84
    """
85
86
    err = feed.status / 100
87
88
    if err > 2:
89
        print(u'Error {} while fetching "{}".'.format(feed.status, url))
90
        feed = None
91
92
    return feed
93
94
# End of manage_http_status() function
95
96
97
def manage_non_http_errors(feed, url):
98
    """
99
    Tries to manage non http errors and gives
100
    a message to the user.
101
    """
102
103
    if feed.bozo:
104
        if feed.bozo_exception:
105
            exc = feed.bozo_exception
106
            if hasattr(exc, 'reason'):
107
                message = exc.reason
108
            else:
109
                message = 'unaddressed'
110
111
            print(u'Error {} while fetching "{}".'.format(message, url))
112
113
        else:
114
            print(u'Error while fetching url "{}".'.format(url))
115
116
# End of manage_non_http_errors() function
117
118
119
def get_feed_entries_from_url(url):
120
    """
121
    Gets feed entries from an url that should be an
122
    RSS or Atom feed.
123
    >>> get_feed_entries_from_url("http://delhomme.org/notfound.html")
124
    Error 404 while fetching "http://delhomme.org/notfound.html".
125
    >>> feed = get_feed_entries_from_url("http://blog.delhomme.org/index.php?feed/atom")
126
    >>> feed.status
127
    200
128
    """
129
130
    feed = feedparser.parse(url)
131
132
    if 'status' in feed:
133
        feed = manage_http_status(feed, url)
134
    else:
135
        # An error happened such that the feed does not contain an HTTP answer.
136
        manage_non_http_errors(feed, url)
137
        feed = None
138
139
    return feed
140
141
# End of get_feed_entries_from_url() function
142
143
144
def print_project_version(project, version):
145
    """
146
    Prints to the standard output project name and it's version.
147
    """
148
149
    print(u'{} {}'.format(project, version))
150
151
# End of print_project_version() function
152
153
154
def print_debug(debug, message):
155
    """
156
    Prints 'message' if debug mode is True
157
    """
158
159
    if debug:
160
        print(u'{}'.format(message))
161
162
# End of print_debug() function
163