docs: def by_issn(issn):
      """
      Query aleph for records with given `issn`. The lookup is directed to the
      NTK's Aleph.
  
      Args:
          issn (str): ISSN of the periodical.
  
      Returns:
          obj: :class:`Model` instances for each record.
      """
      # monkeypatched to allow search in NTK's Aleph
      old_url = aleph.ALEPH_URL
      aleph.ALEPH_URL = NTK_ALEPH_URL
      records = aleph.getISSNsXML(issn, base="STK02")
      aleph.ALEPH_URL = old_url
  
      # process all records
      for record in records:
          marc = MARCXMLRecord(record)
  
          # following values were requested by @bjackova in
          # https://github.com/WebArchivCZ/WA-KAT/issues/66
          additional_info = {
              "222": marc.get("222", None),
              "PER": marc.get("PER", None),
              "776": marc.get("776", None),
              "008": marc.get("008", None),
              "alt_end_date": ""  # just reminder that it is filled later
          }
          additional_info = {
              key: val
              for key, val in additional_info.iteritems()
              if val
          }
  
          # check whether there is alternative date in 008
          alt_end_date = None
          alt_creation_date = None
          if additional_info["008"]:
              # 131114c20139999xr-q||p|s||||||---a0eng-c -> 2013
              alt_creation_date = additional_info["008"][7:11]
  
              # 131114c20139999xr-q||p|s||||||---a0eng-c -> 9999
              alt_end_date = additional_info["008"][11:15]
              if alt_end_date in ["9999", "****"]:
                  alt_creation_date += "-"  # library convention is xxxx-
                  alt_end_date = None
  
              additional_info["alt_end_date"] = alt_end_date
  
          # parse author
          author = Author.parse_author(marc)
  
          model = Model(
              url=_first_or_none(
                  marc.get("856u")
              ),
              conspect=_first_or_none(
                  marc.get("072a")
              ),
              annotation_tags=_first_or_none(
                  marc.get("520a")
              ),
              periodicity=_first_or_none(
                  marc.get("310a")
              ),
              title_tags=_first_or_none(
                  marc.get("222a")
              ),
              subtitle_tags=_first_or_none(
                  marc.get("245b")
              ),
              place_tags=remove_hairs(
                  _first_or_none(marc.get("260a")) or ""
              ),
              author_tags=author._asdict() if author else None,
              publisher_tags=remove_hairs(
                  (
                      _first_or_none(marc.get("260b")) or
                      _first_or_none(marc.get("264b")) or
                      "",
                  ),
                  ", "
              ),
              creation_dates=_first_or_none(
                  marc.get("260c", [alt_creation_date])
              ),
              lang_tags=_first_or_none(
                  marc.get("040b")
              ),
              keyword_tags=marc.get("650a07"),
              source_info=_first_or_none(
                  marc.get("500a")
              ),
              original_xml=record,
              additional_info=additional_info,
          )
  
          yield _add_source(model)