Changeset 36


Ignore:
Timestamp:
01/29/06 17:34:38 (9 years ago)
Author:
xi
Message:

Implement new YAML<->Python string conversion (fix #42).

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/syck/dumpers.py

    r25 r36  
    109109 
    110110    def represent_str(self, object): 
    111         return _syck.Scalar(str(object), tag="tag:yaml.org,2002:str") 
     111        try: 
     112            return _syck.Scalar(object.encode('ascii'), tag="tag:yaml.org,2002:str") 
     113        except UnicodeDecodeError: 
     114            try: 
     115                return _syck.Scalar(unicode(object, 'utf-8').encode('utf-8'), 
     116                        tag="tag:python.yaml.org,2002:str") 
     117            except UnicodeDecodeError: 
     118                return _syck.Scalar(object.encode('base64'), 
     119                        tag="tag:yaml.org,2002:binary") 
     120 
     121    def represent_unicode(self, object): 
     122        try: 
     123            return _syck.Scalar(object.encode('ascii'), tag="tag:python.yaml.org,2002:unicode") 
     124        except UnicodeEncodeError: 
     125            return _syck.Scalar(object.encode('utf-8'), tag="tag:yaml.org,2002:str") 
    112126 
    113127    def represent_list(self, object): 
     
    139153    def represent_long(self, object): 
    140154        return _syck.Scalar(repr(object), tag="tag:python.yaml.org,2002:long") 
    141  
    142     def represent_unicode(self, object): 
    143         return _syck.Scalar(object.encode('utf-8'), tag="tag:python.yaml.org,2002:unicode") 
    144155 
    145156    def represent_tuple(self, object): 
  • trunk/lib/syck/loaders.py

    r25 r36  
    2525import _syck 
    2626 
    27 import sys, re 
     27import sys, re, warnings 
    2828 
    2929__all__ = ['GenericLoader', 'Loader', 
    30     'parse', 'load', 'parse_documents', 'load_documents'] 
     30    'parse', 'load', 'parse_documents', 'load_documents', 
     31    'NotUnicodeInputWarning'] 
     32 
     33class NotUnicodeInputWarning(UserWarning): 
     34    pass 
    3135 
    3236class GenericLoader(_syck.Parser): 
     
    180184        return False 
    181185 
     186    def construct_str(self, node): 
     187        try: 
     188            value = unicode(node.value, 'utf-8') 
     189        except UnicodeDecodeError: 
     190            warnings.warn("scalar value is not utf-8", NotUnicodeInputWarning) 
     191            return node.value 
     192        try: 
     193            return value.encode('ascii') 
     194        except UnicodeEncodeError: 
     195            return value 
     196 
    182197    def construct_numeric_base60(self, num_type, node): 
    183198        digits = [num_type(part) for part in node.value.split(':')] 
  • trunk/setup.cfg

    r32 r36  
    55 
    66# List of directories to search for 'syck.h' (separated by ':'). 
    7 include_dirs=/usr/local/include:../../include 
     7#include_dirs=/usr/local/include:../../include 
    88 
    99# List of directories to search for 'libsyck.a' (separated by ':'). 
    10 library_dirs=/usr/local/lib:../../lib 
     10#library_dirs=/usr/local/lib:../../lib 
    1111 
  • trunk/tests/test_pickle.py

    r25 r36  
    348348        nodes = syck.parse(NODES) 
    349349        output = syck.dump(nodes) 
    350         print output 
     350        #print output 
    351351        nodes2 = syck.load(output) 
    352352        output2 = syck.emit(nodes2) 
     
    358358        nodes = syck.parse(BUGGY_NODES) 
    359359        output = syck.dump(nodes) 
    360         print output 
     360        #print output 
    361361        nodes2 = syck.load(output) 
    362362        output2 = syck.emit(nodes2) 
  • trunk/tests/test_syck.py

    r34 r36  
    99from test_pickle import * 
    1010from test_threads import * 
     11from test_unicode import * 
    1112 
    1213def main(module='__main__'): 
Note: See TracChangeset for help on using the changeset viewer.