code: def namespaces(self, psuedo=True):
          
          if self._namespaces is None:
              result = self.call({'action': 'query',
                                  'meta': 'siteinfo',
                                  'siprop': 'namespaces'})
              self._namespaces = {}
              self._psuedo_namespaces = {}
              for nsid in result['query']['namespaces']:
                  if int(nsid) >= 0:
                      self._namespaces[int(nsid)] = \
                          result['query']['namespaces'][nsid]['*']
                  else:
                      self._psuedo_namespaces[int(nsid)] = \
                          result['query']['namespaces'][nsid]['*']
          if psuedo:
              retval = {}
              retval.update(self._namespaces)
              retval.update(self._psuedo_namespaces)
              return retval
          else:
              return self._namespaces
docs: Fetches a list of namespaces for this wiki and returns them as a
          dictionary of namespace IDs corresponding to namespace names. If
          *psuedo* is ``True``, the dictionary will also list psuedo-namespaces,
          which are the "Special:" and "Media:" namespaces (special because they
          have no content associated with them and their IDs are negative).
  
          :param psuedo: boolean to determine inclusion of psuedo-namespaces
          :returns: dictionary of namespace IDs and names