old_contents: # -*- coding: UTF-8 -*-
  # pylint: disable=C0111,R0903
  
  """Display a stock quote from finance.yahoo.com
  
  Requires the following python packages:
      * requests
  
  Parameters:
      * stock.symbols : Comma-separated list of symbols to fetch
      * stock.change : Should we fetch change in stock value (defaults to True)
  
  
  contributed by `msoulier <https://github.com/msoulier>`_ - many thanks!
  """
  
  import json
  import urllib.request
  
  import logging
  
  import core.module
  import core.widget
  import core.decorators
  
  import util.format
  
  
  class Module(core.module.Module):
      @core.decorators.every(hours=1)
      def __init__(self, config, theme):
          super().__init__(config, theme, core.widget.Widget(self.value))
  
          self.__symbols = self.parameter("symbols", "")
          self.__change = util.format.asbool(self.parameter("change", True))
          self.__value = None
  
      def value(self, widget):
          results = []
          if not self.__value:
              return "n/a"
          data = json.loads(self.__value)
  
          for symbol in data["quoteResponse"]["result"]:
              valkey = "regularMarketChange" if self.__change else "regularMarketPrice"
              sym = symbol.get("symbol", "n/a")
              currency = symbol.get("currency", "USD")
              val = "n/a" if not valkey in symbol else "{:.2f}".format(symbol[valkey])
              results.append("{} {} {}".format(sym, val, currency))
          return " ".join(results)
  
      def fetch(self):
          if self.__symbols:
              url = "https://query1.finance.yahoo.com/v7/finance/quote?symbols="
              url += (
                  self.__symbols
                  + "&fields=regularMarketPrice,currency,regularMarketChange"
              )
              return urllib.request.urlopen(url).read().strip()
          else:
              logging.error("unable to retrieve stock exchange rate")
              return None
  
      def update(self):
          self.__value = self.fetch()
  
  
  # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
  
new_contents: # -*- coding: UTF-8 -*-
  # pylint: disable=C0111,R0903
  
  """Display a stock quote from finance.yahoo.com
  
  Requires the following python packages:
      * requests
  
  Parameters:
      * stock.symbols : Comma-separated list of symbols to fetch
      * stock.change : Should we fetch change in stock value (defaults to True)
  
  
  contributed by `msoulier <https://github.com/msoulier>`_ - many thanks!
  """
  
  import json
  import urllib.request
  
  import logging
  
  import core.module
  import core.widget
  import core.decorators
  
  import util.format
  
  
  class Module(core.module.Module):
      @core.decorators.every(hours=1)
      def __init__(self, config, theme):
          super().__init__(config, theme, core.widget.Widget(self.value))
  
          self.__symbols = self.parameter("symbols", "")
          self.__change = util.format.asbool(self.parameter("change", True))
          self.__value = None
  
      def value(self, widget):
          results = []
          if not self.__value:
              return "n/a"
          data = json.loads(self.__value)
  
          for symbol in data["quoteResponse"]["result"]:
              valkey = "regularMarketChange" if self.__change else "regularMarketPrice"
              sym = symbol.get("symbol", "n/a")
              currency = symbol.get("currency", "USD")
              val = "n/a" if not valkey in symbol else "{:.2f}".format(symbol[valkey])
              results.append("{} {} {}".format(sym, val, currency))
          return " ".join(results)
  
      def fetch(self):
          if self.__symbols:
              url = "https://query1.finance.yahoo.com/v7/finance/quote?symbols="
              url += (
                  self.__symbols
                  + "&fields=regularMarketPrice,currency,regularMarketChange"
              )
              try:
                  return urllib.request.urlopen(url).read().strip()
              except urllib.request.URLError:
                  logging.error("unable to open stock exchange url")
                  return None
          else:
              logging.error("unable to retrieve stock exchange rate")
              return None
  
      def update(self):
          self.__value = self.fetch()
  
  
  # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
  
subject: handle urllib request exception