# -*- coding: utf-8 -*-

# The 'coding' line above was manually added to the autogenerated code
# to prevent the error message on import:
#   SyntaxError: Non-ASCII character '\xef' in file concrete/nitf/ttypes.py

#
# Autogenerated by Thrift Compiler (0.9.1)
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#
#  options string: py:new_style,utf8strings
#

from thrift.Thrift import TType, TMessageType, TException, TApplicationException

from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol, TProtocol
try:
  from thrift.protocol import fastbinary
except:
  fastbinary = None



class NITFInfo(object):
  """
  Attributes:
   - alternateURL: This field specifies the URL of the article, if published online. In some
  cases, such as with the New York Times, when this field is present,
  the URL is preferred to the URL field on articles published on
  or after April 02, 2006, as the linked page will have richer content.
   - articleAbstract: This field is a summary of the article, possibly written by
  an indexing service.
   - authorBiography: This field specifies the biography of the author of the article.
  Generally, this field is specified for guest authors, and not for
  regular reporters, except to provide the author's email address.
   - banner: The banner field is used to indicate if there has been additional
  information appended to the articles since its publication. Examples of
  banners include ('Correction Appended' and 'Editor's Note Appended').
   - biographicalCategoryList: When present, the biographical category field generally indicates that a
  document focuses on a particular individual. The value of the field
  indicates the area or category in which this individual is best known.
  This field is most often defined for Obituaries and Book Reviews.

  <ol>
  <li>Politics and Government (U.S.)</li>
  <li>Books and Magazines <li>Royalty</li>
  </ol>
   - columnName: If the article is part of a regular column, this field specifies the name
  of that column.
  <br />
  Sample Column Names:
  <br />
  <ol>
  <li>World News Briefs</li>
  <li>WEDDINGS</li>
  <li>The Accessories Channel</li>
  </ol>

   - columnNumber: This field specifies the column in which the article starts in the print
  paper. A typical printed page in the paper has six columns numbered from
  right to left. As a consequence most, but not all, of the values for this
  field fall in the range 1-6.
   - correctionDate: This field specifies the date on which a correction was made to the
  article. Generally, if the correction date is specified, the correction
  text will also be specified (and vice versa).
   - correctionText: For articles corrected following publication, this field specifies the
  correction. Generally, if the correction text is specified, the
  correction date will also be specified (and vice versa).
   - credit: This field indicates the entity that produced the editorial content of
  this document.
   - dayOfWeek: This field specifies the day of week on which the article was published.
  <ul>
  <li>Monday</li>
  <li>Tuesday</li>
  <li>Wednesday</li>
  <li>Thursday</li>
  <li>Friday</li>
  <li>Saturday</li>
  <li>Sunday</li>
  </ul>
   - descriptorList: The &quot;descriptors&quot; field specifies a list of descriptive terms drawn from
  a normalized controlled vocabulary corresponding to subjects mentioned in
  the article.
  <br />
  Examples Include:
  <ol>
  <li>ECONOMIC CONDITIONS AND TRENDS</li>
  <li>AIRPLANES</li>
  <li>VIOLINS</li>
  </ol>
   - featurePage: The feature page containing this article, such as
  <ul>
  <li>Education Page</li>
  <li>Fashion Page</li>
  </ul>
   - generalOnlineDescriptorList: The &quot;general online descriptors&quot; field specifies a list of descriptors
  that are at a higher level of generality than the other tags associated
  with the article.
  <br />
  Examples Include:
  <ol>
  <li>Surfing</li>
  <li>Venice Biennale</li>
  <li>Ranches</li>
  </ol>
   - guid: The GUID field specifies an integer that is guaranteed to be unique for
  every document in the corpus.
   - kicker: The kicker is an additional piece of information printed as an
  accompaniment to a news headline.
   - leadParagraphList: The &quot;lead Paragraph&quot; field is the lead paragraph of the article.
  Generally this field is populated with the first two paragraphs from the
  article.
   - locationList: The &quot;locations&quot; field specifies a list of geographic descriptors drawn
  from a normalized controlled vocabulary that correspond to places
  mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>Wellsboro (Pa)</li>
  <li>Kansas City (Kan)</li>
  <li>Park Slope (NYC)</li>
  </ol>
   - nameList: The &quot;names&quot; field specifies a list of names mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>Azza Fahmy</li>
  <li>George C. Izenour</li>
  <li>Chris Schenkel</li>
  </ol>
   - newsDesk: This field specifies the desk in the newsroom that
  produced the article. The desk is related to, but is not the same as the
  section in which the article appears.
   - normalizedByline: The Normalized Byline field is the byline normalized to the form (last
  name, first name).
   - onlineDescriptorList: This field specifies a list of descriptors from a normalized controlled
  vocabulary that correspond to topics mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>Marriages</li>
  <li>Parks and Other Recreation Areas</li>
  <li>Cooking and Cookbooks</li>
  </ol>
   - onlineHeadline: This field specifies the headline displayed with the article
  online. Often this differs from the headline used in print.
   - onlineLeadParagraph: This field specifies the lead paragraph for the online version.
   - onlineLocationList: This field specifies a list of place names that correspond to geographic
  locations mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>Hollywood</li>
  <li>Los Angeles</li>
  <li>Arcadia</li>
  </ol>
   - onlineOrganizationList: This field specifies a list of organizations that correspond to
  organizations mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>Nintendo Company Limited</li>
  <li>Yeshiva University</li>
  <li>Rose Center</li>
  </ol>
   - onlinePeople: This field specifies a list of people that correspond to individuals
  mentioned in the article.
  <br/>
  Examples Include:
  <ol>
  <li>Lopez, Jennifer</li>
  <li>Joyce, James</li>
  <li>Robinson, Jackie</li>
  </ol>
   - onlineSectionList: This field specifies the section(s) in which the online version of the article
  is placed. This may typically be populated from a semicolon (;) delineated list.
   - onlineTitleList: This field specifies a list of authored works mentioned in the article.
  <br/>
  Examples Include:
  <ol>
  <li>Matchstick Men (Movie)</li>
  <li>Blades of Glory (Movie)</li>
  <li>Bridge & Tunnel (Play)</li>
  </ol>
   - organizationList: This field specifies a list of organization names drawn from a normalized
  controlled vocabulary that correspond to organizations mentioned in the
  article.
  <br />
  Examples Include:
  <ol>
  <li>Circuit City Stores Inc</li>
  <li>Delaware County Community College (Pa)</li>
  <li>CONNECTICUT GRAND OPERA</li>
  </ol>
   - page: This field specifies the page of the section in the paper in which the
  article appears. This is not an absolute pagination. An article that
  appears on page 3 in section A occurs in the physical paper before an
  article that occurs on page 1 of section F. The section is encoded in
  the <strong>section</strong> field.
   - peopleList: This field specifies a list of people from a normalized controlled
  vocabulary that correspond to individuals mentioned in the article.
  <br />
  Examples Include:
  <ol>
  <li>REAGAN, RONALD WILSON (PRES)</li>
  <li>BEGIN, MENACHEM (PRIME MIN)</li>
  <li>COLLINS, GLENN</li>
  </ol>
   - publicationDate: This field specifies the date of the article's publication.
   - publicationDayOfMonth: This field specifies the day of the month on which the article was
  published, always in the range 1-31.
   - publicationMonth: This field specifies the month on which the article was published in the
  range 1-12 where 1 is January 2 is February etc.
   - publicationYear: This field specifies the year in which the article was published. This
  value is in the range 1987-2007 for this collection.
   - section: This field specifies the section of the paper in which the article
  appears. This is not the name of the section, but rather a letter or
  number that indicates the section.
   - seriesName: If the article is part of a regular series, this field specifies the name
  of that column.
   - slug: The slug is a short string that uniquely identifies an article from all
  other articles published on the same day. Please note, however, that
  different articles on different days may have the same slug.
  <ul>
  <li>30other</li>
  <li>12reunion</li>
  </ul>
   - taxonomicClassifierList: This field specifies a list of taxonomic classifiers that place this
  article into a hierarchy of articles. The individual terms of each
  taxonomic classifier are separated with the '/' character.
  <br/>
  Examples Include:
  <ol>
  <li>Top/Features/Travel/Guides/Destinations/North America/United
  States/Arizona</li>
  <li>Top/News/U.S./Rockies</li>
  <li>Top/Opinion</li>
  </ol>
   - titleList: This field specifies a list of authored works that correspond to works
  mentioned in the article.
  <br/>
  Examples Include:
  <ol>
  <li>Greystoke: The Legend of Tarzan, Lord of the Apes (Movie)</li>
  <li>Law & Order (TV Program)</li>
  <li>BATTLEFIELD EARTH (BOOK)</li>
  </ol>
   - typesOfMaterialList: This field specifies a normalized list of terms describing the general
  editorial category of the article.
  <br />
  Examples Include:
  <ol>
  <li>REVIEW</li>
  <li>OBITUARY</li>
  <li>ANALYSIS</li>
  </ol>
   - url: This field specifies the location of the online version of the article. The
  &quot;Alternative Url&quot; field is preferred to this field on articles published
  on or after April 02, 2006, as the linked page will have richer content.
   - wordCount: This field specifies the number of words in the body of the article,
  including the lead paragraph.
  """

  thrift_spec = (
    None, # 0
    (1, TType.STRING, 'alternateURL', None, None, ), # 1
    (2, TType.STRING, 'articleAbstract', None, None, ), # 2
    (3, TType.STRING, 'authorBiography', None, None, ), # 3
    (4, TType.STRING, 'banner', None, None, ), # 4
    (5, TType.LIST, 'biographicalCategoryList', (TType.STRING,None), None, ), # 5
    (6, TType.STRING, 'columnName', None, None, ), # 6
    (7, TType.I32, 'columnNumber', None, None, ), # 7
    (8, TType.I64, 'correctionDate', None, None, ), # 8
    (9, TType.STRING, 'correctionText', None, None, ), # 9
    (10, TType.STRING, 'credit', None, None, ), # 10
    (11, TType.STRING, 'dayOfWeek', None, None, ), # 11
    (12, TType.LIST, 'descriptorList', (TType.STRING,None), None, ), # 12
    (13, TType.STRING, 'featurePage', None, None, ), # 13
    (14, TType.LIST, 'generalOnlineDescriptorList', (TType.STRING,None), None, ), # 14
    (15, TType.I32, 'guid', None, None, ), # 15
    (16, TType.STRING, 'kicker', None, None, ), # 16
    (17, TType.LIST, 'leadParagraphList', (TType.STRING,None), None, ), # 17
    (18, TType.LIST, 'locationList', (TType.STRING,None), None, ), # 18
    (19, TType.LIST, 'nameList', (TType.STRING,None), None, ), # 19
    (20, TType.STRING, 'newsDesk', None, None, ), # 20
    (21, TType.STRING, 'normalizedByline', None, None, ), # 21
    (22, TType.LIST, 'onlineDescriptorList', (TType.STRING,None), None, ), # 22
    (23, TType.STRING, 'onlineHeadline', None, None, ), # 23
    (24, TType.STRING, 'onlineLeadParagraph', None, None, ), # 24
    (25, TType.LIST, 'onlineLocationList', (TType.STRING,None), None, ), # 25
    (26, TType.LIST, 'onlineOrganizationList', (TType.STRING,None), None, ), # 26
    (27, TType.LIST, 'onlinePeople', (TType.STRING,None), None, ), # 27
    (28, TType.LIST, 'onlineSectionList', (TType.STRING,None), None, ), # 28
    (29, TType.LIST, 'onlineTitleList', (TType.STRING,None), None, ), # 29
    (30, TType.LIST, 'organizationList', (TType.STRING,None), None, ), # 30
    (31, TType.I32, 'page', None, None, ), # 31
    (32, TType.LIST, 'peopleList', (TType.STRING,None), None, ), # 32
    (33, TType.I64, 'publicationDate', None, None, ), # 33
    (34, TType.I32, 'publicationDayOfMonth', None, None, ), # 34
    (35, TType.I32, 'publicationMonth', None, None, ), # 35
    (36, TType.I32, 'publicationYear', None, None, ), # 36
    (37, TType.STRING, 'section', None, None, ), # 37
    (38, TType.STRING, 'seriesName', None, None, ), # 38
    (39, TType.STRING, 'slug', None, None, ), # 39
    (40, TType.LIST, 'taxonomicClassifierList', (TType.STRING,None), None, ), # 40
    (41, TType.LIST, 'titleList', (TType.STRING,None), None, ), # 41
    (42, TType.LIST, 'typesOfMaterialList', (TType.STRING,None), None, ), # 42
    (43, TType.STRING, 'url', None, None, ), # 43
    (44, TType.I32, 'wordCount', None, None, ), # 44
  )

  def __init__(self, alternateURL=None, articleAbstract=None, authorBiography=None, banner=None, biographicalCategoryList=None, columnName=None, columnNumber=None, correctionDate=None, correctionText=None, credit=None, dayOfWeek=None, descriptorList=None, featurePage=None, generalOnlineDescriptorList=None, guid=None, kicker=None, leadParagraphList=None, locationList=None, nameList=None, newsDesk=None, normalizedByline=None, onlineDescriptorList=None, onlineHeadline=None, onlineLeadParagraph=None, onlineLocationList=None, onlineOrganizationList=None, onlinePeople=None, onlineSectionList=None, onlineTitleList=None, organizationList=None, page=None, peopleList=None, publicationDate=None, publicationDayOfMonth=None, publicationMonth=None, publicationYear=None, section=None, seriesName=None, slug=None, taxonomicClassifierList=None, titleList=None, typesOfMaterialList=None, url=None, wordCount=None,):
    self.alternateURL = alternateURL
    self.articleAbstract = articleAbstract
    self.authorBiography = authorBiography
    self.banner = banner
    self.biographicalCategoryList = biographicalCategoryList
    self.columnName = columnName
    self.columnNumber = columnNumber
    self.correctionDate = correctionDate
    self.correctionText = correctionText
    self.credit = credit
    self.dayOfWeek = dayOfWeek
    self.descriptorList = descriptorList
    self.featurePage = featurePage
    self.generalOnlineDescriptorList = generalOnlineDescriptorList
    self.guid = guid
    self.kicker = kicker
    self.leadParagraphList = leadParagraphList
    self.locationList = locationList
    self.nameList = nameList
    self.newsDesk = newsDesk
    self.normalizedByline = normalizedByline
    self.onlineDescriptorList = onlineDescriptorList
    self.onlineHeadline = onlineHeadline
    self.onlineLeadParagraph = onlineLeadParagraph
    self.onlineLocationList = onlineLocationList
    self.onlineOrganizationList = onlineOrganizationList
    self.onlinePeople = onlinePeople
    self.onlineSectionList = onlineSectionList
    self.onlineTitleList = onlineTitleList
    self.organizationList = organizationList
    self.page = page
    self.peopleList = peopleList
    self.publicationDate = publicationDate
    self.publicationDayOfMonth = publicationDayOfMonth
    self.publicationMonth = publicationMonth
    self.publicationYear = publicationYear
    self.section = section
    self.seriesName = seriesName
    self.slug = slug
    self.taxonomicClassifierList = taxonomicClassifierList
    self.titleList = titleList
    self.typesOfMaterialList = typesOfMaterialList
    self.url = url
    self.wordCount = wordCount

  def read(self, iprot):
    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
      return
    iprot.readStructBegin()
    while True:
      (fname, ftype, fid) = iprot.readFieldBegin()
      if ftype == TType.STOP:
        break
      if fid == 1:
        if ftype == TType.STRING:
          self.alternateURL = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 2:
        if ftype == TType.STRING:
          self.articleAbstract = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 3:
        if ftype == TType.STRING:
          self.authorBiography = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 4:
        if ftype == TType.STRING:
          self.banner = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 5:
        if ftype == TType.LIST:
          self.biographicalCategoryList = []
          (_etype3, _size0) = iprot.readListBegin()
          for _i4 in xrange(_size0):
            _elem5 = iprot.readString().decode('utf-8')
            self.biographicalCategoryList.append(_elem5)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 6:
        if ftype == TType.STRING:
          self.columnName = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 7:
        if ftype == TType.I32:
          self.columnNumber = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 8:
        if ftype == TType.I64:
          self.correctionDate = iprot.readI64();
        else:
          iprot.skip(ftype)
      elif fid == 9:
        if ftype == TType.STRING:
          self.correctionText = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 10:
        if ftype == TType.STRING:
          self.credit = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 11:
        if ftype == TType.STRING:
          self.dayOfWeek = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 12:
        if ftype == TType.LIST:
          self.descriptorList = []
          (_etype9, _size6) = iprot.readListBegin()
          for _i10 in xrange(_size6):
            _elem11 = iprot.readString().decode('utf-8')
            self.descriptorList.append(_elem11)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 13:
        if ftype == TType.STRING:
          self.featurePage = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 14:
        if ftype == TType.LIST:
          self.generalOnlineDescriptorList = []
          (_etype15, _size12) = iprot.readListBegin()
          for _i16 in xrange(_size12):
            _elem17 = iprot.readString().decode('utf-8')
            self.generalOnlineDescriptorList.append(_elem17)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 15:
        if ftype == TType.I32:
          self.guid = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 16:
        if ftype == TType.STRING:
          self.kicker = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 17:
        if ftype == TType.LIST:
          self.leadParagraphList = []
          (_etype21, _size18) = iprot.readListBegin()
          for _i22 in xrange(_size18):
            _elem23 = iprot.readString().decode('utf-8')
            self.leadParagraphList.append(_elem23)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 18:
        if ftype == TType.LIST:
          self.locationList = []
          (_etype27, _size24) = iprot.readListBegin()
          for _i28 in xrange(_size24):
            _elem29 = iprot.readString().decode('utf-8')
            self.locationList.append(_elem29)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 19:
        if ftype == TType.LIST:
          self.nameList = []
          (_etype33, _size30) = iprot.readListBegin()
          for _i34 in xrange(_size30):
            _elem35 = iprot.readString().decode('utf-8')
            self.nameList.append(_elem35)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 20:
        if ftype == TType.STRING:
          self.newsDesk = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 21:
        if ftype == TType.STRING:
          self.normalizedByline = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 22:
        if ftype == TType.LIST:
          self.onlineDescriptorList = []
          (_etype39, _size36) = iprot.readListBegin()
          for _i40 in xrange(_size36):
            _elem41 = iprot.readString().decode('utf-8')
            self.onlineDescriptorList.append(_elem41)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 23:
        if ftype == TType.STRING:
          self.onlineHeadline = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 24:
        if ftype == TType.STRING:
          self.onlineLeadParagraph = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 25:
        if ftype == TType.LIST:
          self.onlineLocationList = []
          (_etype45, _size42) = iprot.readListBegin()
          for _i46 in xrange(_size42):
            _elem47 = iprot.readString().decode('utf-8')
            self.onlineLocationList.append(_elem47)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 26:
        if ftype == TType.LIST:
          self.onlineOrganizationList = []
          (_etype51, _size48) = iprot.readListBegin()
          for _i52 in xrange(_size48):
            _elem53 = iprot.readString().decode('utf-8')
            self.onlineOrganizationList.append(_elem53)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 27:
        if ftype == TType.LIST:
          self.onlinePeople = []
          (_etype57, _size54) = iprot.readListBegin()
          for _i58 in xrange(_size54):
            _elem59 = iprot.readString().decode('utf-8')
            self.onlinePeople.append(_elem59)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 28:
        if ftype == TType.LIST:
          self.onlineSectionList = []
          (_etype63, _size60) = iprot.readListBegin()
          for _i64 in xrange(_size60):
            _elem65 = iprot.readString().decode('utf-8')
            self.onlineSectionList.append(_elem65)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 29:
        if ftype == TType.LIST:
          self.onlineTitleList = []
          (_etype69, _size66) = iprot.readListBegin()
          for _i70 in xrange(_size66):
            _elem71 = iprot.readString().decode('utf-8')
            self.onlineTitleList.append(_elem71)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 30:
        if ftype == TType.LIST:
          self.organizationList = []
          (_etype75, _size72) = iprot.readListBegin()
          for _i76 in xrange(_size72):
            _elem77 = iprot.readString().decode('utf-8')
            self.organizationList.append(_elem77)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 31:
        if ftype == TType.I32:
          self.page = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 32:
        if ftype == TType.LIST:
          self.peopleList = []
          (_etype81, _size78) = iprot.readListBegin()
          for _i82 in xrange(_size78):
            _elem83 = iprot.readString().decode('utf-8')
            self.peopleList.append(_elem83)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 33:
        if ftype == TType.I64:
          self.publicationDate = iprot.readI64();
        else:
          iprot.skip(ftype)
      elif fid == 34:
        if ftype == TType.I32:
          self.publicationDayOfMonth = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 35:
        if ftype == TType.I32:
          self.publicationMonth = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 36:
        if ftype == TType.I32:
          self.publicationYear = iprot.readI32();
        else:
          iprot.skip(ftype)
      elif fid == 37:
        if ftype == TType.STRING:
          self.section = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 38:
        if ftype == TType.STRING:
          self.seriesName = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 39:
        if ftype == TType.STRING:
          self.slug = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 40:
        if ftype == TType.LIST:
          self.taxonomicClassifierList = []
          (_etype87, _size84) = iprot.readListBegin()
          for _i88 in xrange(_size84):
            _elem89 = iprot.readString().decode('utf-8')
            self.taxonomicClassifierList.append(_elem89)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 41:
        if ftype == TType.LIST:
          self.titleList = []
          (_etype93, _size90) = iprot.readListBegin()
          for _i94 in xrange(_size90):
            _elem95 = iprot.readString().decode('utf-8')
            self.titleList.append(_elem95)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 42:
        if ftype == TType.LIST:
          self.typesOfMaterialList = []
          (_etype99, _size96) = iprot.readListBegin()
          for _i100 in xrange(_size96):
            _elem101 = iprot.readString().decode('utf-8')
            self.typesOfMaterialList.append(_elem101)
          iprot.readListEnd()
        else:
          iprot.skip(ftype)
      elif fid == 43:
        if ftype == TType.STRING:
          self.url = iprot.readString().decode('utf-8')
        else:
          iprot.skip(ftype)
      elif fid == 44:
        if ftype == TType.I32:
          self.wordCount = iprot.readI32();
        else:
          iprot.skip(ftype)
      else:
        iprot.skip(ftype)
      iprot.readFieldEnd()
    iprot.readStructEnd()

  def write(self, oprot):
    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
      return
    oprot.writeStructBegin('NITFInfo')
    if self.alternateURL is not None:
      oprot.writeFieldBegin('alternateURL', TType.STRING, 1)
      oprot.writeString(self.alternateURL.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.articleAbstract is not None:
      oprot.writeFieldBegin('articleAbstract', TType.STRING, 2)
      oprot.writeString(self.articleAbstract.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.authorBiography is not None:
      oprot.writeFieldBegin('authorBiography', TType.STRING, 3)
      oprot.writeString(self.authorBiography.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.banner is not None:
      oprot.writeFieldBegin('banner', TType.STRING, 4)
      oprot.writeString(self.banner.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.biographicalCategoryList is not None:
      oprot.writeFieldBegin('biographicalCategoryList', TType.LIST, 5)
      oprot.writeListBegin(TType.STRING, len(self.biographicalCategoryList))
      for iter102 in self.biographicalCategoryList:
        oprot.writeString(iter102.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.columnName is not None:
      oprot.writeFieldBegin('columnName', TType.STRING, 6)
      oprot.writeString(self.columnName.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.columnNumber is not None:
      oprot.writeFieldBegin('columnNumber', TType.I32, 7)
      oprot.writeI32(self.columnNumber)
      oprot.writeFieldEnd()
    if self.correctionDate is not None:
      oprot.writeFieldBegin('correctionDate', TType.I64, 8)
      oprot.writeI64(self.correctionDate)
      oprot.writeFieldEnd()
    if self.correctionText is not None:
      oprot.writeFieldBegin('correctionText', TType.STRING, 9)
      oprot.writeString(self.correctionText.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.credit is not None:
      oprot.writeFieldBegin('credit', TType.STRING, 10)
      oprot.writeString(self.credit.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.dayOfWeek is not None:
      oprot.writeFieldBegin('dayOfWeek', TType.STRING, 11)
      oprot.writeString(self.dayOfWeek.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.descriptorList is not None:
      oprot.writeFieldBegin('descriptorList', TType.LIST, 12)
      oprot.writeListBegin(TType.STRING, len(self.descriptorList))
      for iter103 in self.descriptorList:
        oprot.writeString(iter103.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.featurePage is not None:
      oprot.writeFieldBegin('featurePage', TType.STRING, 13)
      oprot.writeString(self.featurePage.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.generalOnlineDescriptorList is not None:
      oprot.writeFieldBegin('generalOnlineDescriptorList', TType.LIST, 14)
      oprot.writeListBegin(TType.STRING, len(self.generalOnlineDescriptorList))
      for iter104 in self.generalOnlineDescriptorList:
        oprot.writeString(iter104.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.guid is not None:
      oprot.writeFieldBegin('guid', TType.I32, 15)
      oprot.writeI32(self.guid)
      oprot.writeFieldEnd()
    if self.kicker is not None:
      oprot.writeFieldBegin('kicker', TType.STRING, 16)
      oprot.writeString(self.kicker.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.leadParagraphList is not None:
      oprot.writeFieldBegin('leadParagraphList', TType.LIST, 17)
      oprot.writeListBegin(TType.STRING, len(self.leadParagraphList))
      for iter105 in self.leadParagraphList:
        oprot.writeString(iter105.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.locationList is not None:
      oprot.writeFieldBegin('locationList', TType.LIST, 18)
      oprot.writeListBegin(TType.STRING, len(self.locationList))
      for iter106 in self.locationList:
        oprot.writeString(iter106.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.nameList is not None:
      oprot.writeFieldBegin('nameList', TType.LIST, 19)
      oprot.writeListBegin(TType.STRING, len(self.nameList))
      for iter107 in self.nameList:
        oprot.writeString(iter107.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.newsDesk is not None:
      oprot.writeFieldBegin('newsDesk', TType.STRING, 20)
      oprot.writeString(self.newsDesk.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.normalizedByline is not None:
      oprot.writeFieldBegin('normalizedByline', TType.STRING, 21)
      oprot.writeString(self.normalizedByline.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.onlineDescriptorList is not None:
      oprot.writeFieldBegin('onlineDescriptorList', TType.LIST, 22)
      oprot.writeListBegin(TType.STRING, len(self.onlineDescriptorList))
      for iter108 in self.onlineDescriptorList:
        oprot.writeString(iter108.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.onlineHeadline is not None:
      oprot.writeFieldBegin('onlineHeadline', TType.STRING, 23)
      oprot.writeString(self.onlineHeadline.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.onlineLeadParagraph is not None:
      oprot.writeFieldBegin('onlineLeadParagraph', TType.STRING, 24)
      oprot.writeString(self.onlineLeadParagraph.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.onlineLocationList is not None:
      oprot.writeFieldBegin('onlineLocationList', TType.LIST, 25)
      oprot.writeListBegin(TType.STRING, len(self.onlineLocationList))
      for iter109 in self.onlineLocationList:
        oprot.writeString(iter109.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.onlineOrganizationList is not None:
      oprot.writeFieldBegin('onlineOrganizationList', TType.LIST, 26)
      oprot.writeListBegin(TType.STRING, len(self.onlineOrganizationList))
      for iter110 in self.onlineOrganizationList:
        oprot.writeString(iter110.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.onlinePeople is not None:
      oprot.writeFieldBegin('onlinePeople', TType.LIST, 27)
      oprot.writeListBegin(TType.STRING, len(self.onlinePeople))
      for iter111 in self.onlinePeople:
        oprot.writeString(iter111.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.onlineSectionList is not None:
      oprot.writeFieldBegin('onlineSectionList', TType.LIST, 28)
      oprot.writeListBegin(TType.STRING, len(self.onlineSectionList))
      for iter112 in self.onlineSectionList:
        oprot.writeString(iter112.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.onlineTitleList is not None:
      oprot.writeFieldBegin('onlineTitleList', TType.LIST, 29)
      oprot.writeListBegin(TType.STRING, len(self.onlineTitleList))
      for iter113 in self.onlineTitleList:
        oprot.writeString(iter113.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.organizationList is not None:
      oprot.writeFieldBegin('organizationList', TType.LIST, 30)
      oprot.writeListBegin(TType.STRING, len(self.organizationList))
      for iter114 in self.organizationList:
        oprot.writeString(iter114.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.page is not None:
      oprot.writeFieldBegin('page', TType.I32, 31)
      oprot.writeI32(self.page)
      oprot.writeFieldEnd()
    if self.peopleList is not None:
      oprot.writeFieldBegin('peopleList', TType.LIST, 32)
      oprot.writeListBegin(TType.STRING, len(self.peopleList))
      for iter115 in self.peopleList:
        oprot.writeString(iter115.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.publicationDate is not None:
      oprot.writeFieldBegin('publicationDate', TType.I64, 33)
      oprot.writeI64(self.publicationDate)
      oprot.writeFieldEnd()
    if self.publicationDayOfMonth is not None:
      oprot.writeFieldBegin('publicationDayOfMonth', TType.I32, 34)
      oprot.writeI32(self.publicationDayOfMonth)
      oprot.writeFieldEnd()
    if self.publicationMonth is not None:
      oprot.writeFieldBegin('publicationMonth', TType.I32, 35)
      oprot.writeI32(self.publicationMonth)
      oprot.writeFieldEnd()
    if self.publicationYear is not None:
      oprot.writeFieldBegin('publicationYear', TType.I32, 36)
      oprot.writeI32(self.publicationYear)
      oprot.writeFieldEnd()
    if self.section is not None:
      oprot.writeFieldBegin('section', TType.STRING, 37)
      oprot.writeString(self.section.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.seriesName is not None:
      oprot.writeFieldBegin('seriesName', TType.STRING, 38)
      oprot.writeString(self.seriesName.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.slug is not None:
      oprot.writeFieldBegin('slug', TType.STRING, 39)
      oprot.writeString(self.slug.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.taxonomicClassifierList is not None:
      oprot.writeFieldBegin('taxonomicClassifierList', TType.LIST, 40)
      oprot.writeListBegin(TType.STRING, len(self.taxonomicClassifierList))
      for iter116 in self.taxonomicClassifierList:
        oprot.writeString(iter116.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.titleList is not None:
      oprot.writeFieldBegin('titleList', TType.LIST, 41)
      oprot.writeListBegin(TType.STRING, len(self.titleList))
      for iter117 in self.titleList:
        oprot.writeString(iter117.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.typesOfMaterialList is not None:
      oprot.writeFieldBegin('typesOfMaterialList', TType.LIST, 42)
      oprot.writeListBegin(TType.STRING, len(self.typesOfMaterialList))
      for iter118 in self.typesOfMaterialList:
        oprot.writeString(iter118.encode('utf-8'))
      oprot.writeListEnd()
      oprot.writeFieldEnd()
    if self.url is not None:
      oprot.writeFieldBegin('url', TType.STRING, 43)
      oprot.writeString(self.url.encode('utf-8'))
      oprot.writeFieldEnd()
    if self.wordCount is not None:
      oprot.writeFieldBegin('wordCount', TType.I32, 44)
      oprot.writeI32(self.wordCount)
      oprot.writeFieldEnd()
    oprot.writeFieldStop()
    oprot.writeStructEnd()

  def validate(self):
    return


  def __hash__(self):
    value = 17
    value = (value * 31) ^ hash(self.alternateURL)
    value = (value * 31) ^ hash(self.articleAbstract)
    value = (value * 31) ^ hash(self.authorBiography)
    value = (value * 31) ^ hash(self.banner)
    value = (value * 31) ^ hash(self.biographicalCategoryList)
    value = (value * 31) ^ hash(self.columnName)
    value = (value * 31) ^ hash(self.columnNumber)
    value = (value * 31) ^ hash(self.correctionDate)
    value = (value * 31) ^ hash(self.correctionText)
    value = (value * 31) ^ hash(self.credit)
    value = (value * 31) ^ hash(self.dayOfWeek)
    value = (value * 31) ^ hash(self.descriptorList)
    value = (value * 31) ^ hash(self.featurePage)
    value = (value * 31) ^ hash(self.generalOnlineDescriptorList)
    value = (value * 31) ^ hash(self.guid)
    value = (value * 31) ^ hash(self.kicker)
    value = (value * 31) ^ hash(self.leadParagraphList)
    value = (value * 31) ^ hash(self.locationList)
    value = (value * 31) ^ hash(self.nameList)
    value = (value * 31) ^ hash(self.newsDesk)
    value = (value * 31) ^ hash(self.normalizedByline)
    value = (value * 31) ^ hash(self.onlineDescriptorList)
    value = (value * 31) ^ hash(self.onlineHeadline)
    value = (value * 31) ^ hash(self.onlineLeadParagraph)
    value = (value * 31) ^ hash(self.onlineLocationList)
    value = (value * 31) ^ hash(self.onlineOrganizationList)
    value = (value * 31) ^ hash(self.onlinePeople)
    value = (value * 31) ^ hash(self.onlineSectionList)
    value = (value * 31) ^ hash(self.onlineTitleList)
    value = (value * 31) ^ hash(self.organizationList)
    value = (value * 31) ^ hash(self.page)
    value = (value * 31) ^ hash(self.peopleList)
    value = (value * 31) ^ hash(self.publicationDate)
    value = (value * 31) ^ hash(self.publicationDayOfMonth)
    value = (value * 31) ^ hash(self.publicationMonth)
    value = (value * 31) ^ hash(self.publicationYear)
    value = (value * 31) ^ hash(self.section)
    value = (value * 31) ^ hash(self.seriesName)
    value = (value * 31) ^ hash(self.slug)
    value = (value * 31) ^ hash(self.taxonomicClassifierList)
    value = (value * 31) ^ hash(self.titleList)
    value = (value * 31) ^ hash(self.typesOfMaterialList)
    value = (value * 31) ^ hash(self.url)
    value = (value * 31) ^ hash(self.wordCount)
    return value

  def __repr__(self):
    L = ['%s=%r' % (key, value)
      for key, value in self.__dict__.iteritems()]
    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))

  def __eq__(self, other):
    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__

  def __ne__(self, other):
    return not (self == other)
