"Fossies" - the Fresh Open Source Software Archive

Member "versions-1.5.5/versions/versions.py" (27 Oct 2021, 4212 Bytes) of package /linux/misc/versions-1.5.5.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Python source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/usr/bin/env python
    2 # -*- coding: utf8 -*-
    3 #
    4 #  versions.py : checks releases and versions of programs through RSS
    5 #                or Atom feeds and tells you
    6 #
    7 #  (C) Copyright 2016 - 2018 Olivier Delhomme
    8 #  e-mail : olivier.delhomme@free.fr
    9 #
   10 #  This program is free software; you can redistribute it and/or modify
   11 #  it under the terms of the GNU General Public License as published by
   12 #  the Free Software Foundation; either version 3, or (at your option)
   13 #  any later version.
   14 #
   15 #  This program is distributed in the hope that it will be useful,
   16 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
   17 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   18 #  GNU General Public License for more details.
   19 #
   20 #  You should have received a copy of the GNU General Public License
   21 #  along with this program; if not, write to the Free Software Foundation,
   22 #  Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   23 #
   24 import codecs
   25 import sys
   26 import locale
   27 import os
   28 import doctest
   29 import configuration
   30 import caches
   31 import common
   32 import byproject
   33 import bylist
   34 
   35 
   36 """
   37 This program checks projects versions through RSS and Atom feeds and
   38 should only print those with new release version.
   39 
   40 It implements checking for projects in github.com and freshcode.club.
   41 Projects must be added to a YAML file (named by default
   42 ~/.config/versions/versions.yaml). One can use --file=FILENAME option
   43 to specify an alternative YAML file. version.yaml is included as an
   44 example in this project.
   45 
   46 Versions uses and produces text files. Those files are cache files
   47 written into ~/.local/versions directory. "*.cache" are cache files
   48 containing the project list and their associated version (the latest).
   49 "*.feed" are information feed cache files containing on only one line
   50 the latest parsed post of the feed.
   51 """
   52 
   53 
   54 def check_versions(versions_conf):
   55     """
   56     Checks versions by parsing online feeds.
   57     """
   58 
   59     # Checks projects from by project sites such as github and sourceforge
   60     byproject_site_list = versions_conf.extract_site_list('byproject')
   61     byproject.check_versions(versions_conf, byproject_site_list)
   62 
   63     # Checks projects from 'list' tupe sites such as freshcode.club
   64     list_site_list = versions_conf.extract_site_list('list')
   65     bylist.check_versions(versions_conf, list_site_list)
   66 # End of check_versions() function
   67 
   68 
   69 def print_cache_or_check_versions(versions_conf):
   70     """
   71     Decide to pretty print projects and their associated version that
   72     are already in the cache or to check versions of that projects upon
   73     selections made at the command line
   74     """
   75 
   76     common.print_debug(versions_conf.options.debug, u'Loading yaml config file')
   77     versions_conf.load_yaml_from_config_file(versions_conf.config_filename)
   78 
   79     if versions_conf.options.list_cache is True:
   80         # Pretty prints all caches.
   81         cache_list = versions_conf.make_site_cache_list_name()
   82         caches.print_versions_from_cache(versions_conf.local_dir, cache_list)
   83 
   84     else:
   85         # Checks version from online feeds
   86         check_versions(versions_conf)
   87 
   88 # End of print_list_or_check_versions() function.
   89 
   90 
   91 def testmodule(name):
   92     """
   93     Runs doctests in the module called 'name'
   94     """
   95 
   96     print(u'{} {} {}'.format(u'»»»»»»»»»»»»»»»» Testing module:', name, u'««««««««««««««««'))
   97     mod = __import__(name)
   98     doctest.testmod(mod, verbose=True)
   99     print(u'{}'.format('End.\n'))
  100 
  101 # End of testmodule() function.
  102 
  103 
  104 def main():
  105     """
  106     This is the where the program begins
  107     """
  108 
  109     if sys.version_info[0] == 2:
  110         sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout)
  111 
  112     versions_conf = configuration.Conf()  # Configuration options
  113 
  114     if versions_conf.options.debug:
  115         module_list = ['__main__', 'common', 'caches', 'configuration', 'byproject', 'bylist']
  116         for module_name in module_list:
  117             testmodule(module_name)
  118 
  119     if os.path.isfile(versions_conf.config_filename):
  120         print_cache_or_check_versions(versions_conf)
  121 
  122     else:
  123         print(u'Error: file {} does not exist'.format(versions_conf.config_filename))
  124 
  125 # End of main() function
  126 
  127 
  128 if __name__ == "__main__":
  129     main()