Блоґ одного кібера

Історія хвороби контуженого інформаційним вибухом

Brainf**k

with 5 comments

Хтось напевно страшно об’ївся віагри. І тепер намагається любити мені мозги.

Десь всередині цього коду виникає unicode encode error:

        def __r_call(self, *args, **kw):
            return self.__call(self.__name, args, kw, self.__ns, self.__sa,
                self.__hd, self.__ma)

Клас виглядає так:

    # To handle attribute wierdness
    class __Method:
        # Some magic to bind a SOAP method to an RPC server.
        # Supports "nested" methods (e.g. examples.getStateName) -- concept
        # borrowed from xmlrpc/soaplib -- www.pythonware.com
        # Altered (improved?) to let you inline namespaces on a per call
        # basis ala SOAP::LITE -- www.soaplite.com

        def __init__(self, call, name, ns = None, sa = None, hd = None,
            ma = None, config = Config):

            self.__call 	= call
            self.__name 	= name
            self.__ns   	= ns
            self.__sa   	= sa
            self.__hd   	= hd
            self.__ma           = ma
            self.__config       = config
            return

        def __call__(self, *args, **kw):
            if self.__name[0] == "_": # typically get or mutate 
                if self.__name in ["__repr__","__str__"]:
                    return self.__repr__()
                else:
                    return self.__f_call(*args, **kw)
            else:
                color_print('we expect exception here:', ostream=sys.stderr) # Це я написав. 
                return self.__r_call(*args, **kw)
                        
        def __getattr__(self, name):
            if name == '__del__':
                raise AttributeError, name
            if self.__name[0] == "_":
                # Don't nest method if it is a directive
                return self.__class__(self.__call, name, self.__ns,
                    self.__sa, self.__hd, self.__ma)

            return self.__class__(self.__call, "%s.%s" % (self.__name, name),
                self.__ns, self.__sa, self.__hd, self.__ma)

        def __f_call(self, *args, **kw):
            if self.__name == "_ns": self.__ns = args
            elif self.__name == "_sa": self.__sa = args
            elif self.__name == "_hd": self.__hd = args
            elif self.__name == "_ma": self.__ma = args
            return self

Решта методі не цікаві. Цікаво що на початку файлу гордо красується коментар з ліцензією в якому є такий рядок:
# Copyright (c) 2003, Pfizer

Взагалі це просто пояснюється. Phizer – фармацевтична компанія. Фармація – суто емпірична наука, яка використовує гори статистики щоб вияснити кореляцію між вмістом певних компонент в своїх таблетках і тиском крові в певних місцях. Улюблена мова статистики – R. Улюблена універсальна мова всього світу – Python. Пфайзеру нащось знадобився інтерфейс між ними, і вони створили RSOAP. SOAPPY видно теж знадобилось поправити.

Але проблема з кодуванням залишається. Хоча напевне суть в тому, що Google рівнем вище написав:

        buf = self._buffer_class(
            xml_parser=self._config['xml_parser'],
            pretty_xml=Utils.BoolTypeConvert(self._config['pretty_xml']))
        old_stdout = sys.stdout
        sys.stdout = buf

і тепер я мушу друкувати в stderr щоб щось побачити. Піду напевне досліджувати _buffer_class.

Винен тут Google. Ну нащо їм той SOAP? Дому не використовувати простенький JSON в REST? І найголовніше що мені доведеться до кінця року оцим мучитись.

Advertisements

Written by bunyk

Грудень 30, 2011 at 13:53

Оприлюднено в Кодерство, Павутина

Tagged with ,

Відповідей: 5

Subscribe to comments with RSS.

  1. до кінця року не так вже й багато лищилось, значить і мучатись небагато =)

    danbst

    Грудень 30, 2011 at 14:09

    • То що я цього року не встигну вияснити, ще не означає що виясню до Різдва. Тут щойно ще зустрів рядочки, від яких в мене просто істерика. Google намагається імпортувати парсер XML:

      # Is this running on Google's App Engine?
      try:
        import google.appengine
        from _xmlplus.parsers.expat import ExpatError
      except:
        from xml.parsers.expat import ExpatError
      
      # Check if PyXML is installed.
      try:
        # Is this running on Google's App Engine?
        try:
          import google.appengine
          import _xmlplus
        except:
          try:
            import _xmlplus
          except:
            import xml as _xmlplus
        from xml.dom import minidom
        # Test whether xml.version_info exists.
        version = _xmlplus.__dict__.get('version_info')
        PYXML_LIB = True
      except (ImportError, AttributeError):
        # An anti-anti-hack/workaround for users of python2.5 (and up) to convince
        # Python not to ignore PyXML. We really do want to use _xmlplus here, even
        # though it is 'too old'.
        if ((list(map(eval, MIN_PY_VERSION.split('.'))) <
             list(sys.version_info)[0:3])):
          # The change to the environment variables is only active during the life of
          # a process.
          import os
          os.environ['PY_USE_XMLPLUS'] = 'YES'
          PYXML_LIB = True
        else:
          PYXML_LIB = False
      else:
        if (not version or
            list(version) < (list(map(eval, MIN_PYXML_VERSION.split('.'))))):
          PYXML_LIB = False
      
      # Check if cElementTree or ElementTree is installed ...
      try:
        # ... as a third party.
        import cElementTree as etree
        ETREE_LIB = True
        ETREE_NAME = etree.__name__
        ETREE_VERSION = etree.VERSION
      except (ImportError, AttributeError):
        try:
          # ... natively.
          import xml.etree.cElementTree as etree
          ETREE_LIB = True
          ETREE_NAME = etree.__name__
          ETREE_VERSION = etree.VERSION
        except (ImportError, AttributeError):
          try:
            # ... as a third party.
            import elementtree.ElementTree as etree
            ETREE_LIB = True
            ETREE_NAME = etree.__name__
            ETREE_VERSION = etree.VERSION
          except (ImportError, AttributeError):
            try:
              # ... natively.
              import xml.etree.ElementTree as etree
              ETREE_LIB = True
              ETREE_NAME = etree.__name__
              ETREE_VERSION = etree.VERSION
            except (ImportError, AttributeError):
              ETREE_LIB = False
      
      if not PYXML_LIB and not ETREE_LIB:
        msg = ('PyXML v%s or ElementTree v%s or newer is required.'
               % (MIN_PYXML_VERSION, MIN_ETREE_VERSION))
        raise MissingPackageError(msg)
      

      bunyk

      Грудень 30, 2011 at 14:21

      • anti-anti-hack/workaround б%;№”!

        bunyk

        Грудень 30, 2011 at 14:32

      • Ехх, якби я розумів, наскільки серйозні це проблеми, я б також впав у істерику -)

        danbst

        Грудень 30, 2011 at 15:04


Залишити відповідь

Заповніть поля нижче або авторизуйтесь клікнувши по іконці

Лого WordPress.com

Ви коментуєте, використовуючи свій обліковий запис WordPress.com. Log Out / Змінити )

Twitter picture

Ви коментуєте, використовуючи свій обліковий запис Twitter. Log Out / Змінити )

Facebook photo

Ви коментуєте, використовуючи свій обліковий запис Facebook. Log Out / Змінити )

Google+ photo

Ви коментуєте, використовуючи свій обліковий запис Google+. Log Out / Змінити )

З’єднання з %s

%d блогерам подобається це: