Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
etf
cmssam
Commits
b45ef6ba
Commit
b45ef6ba
authored
Mar 05, 2018
by
Andrea Sciaba
Browse files
mc test in singularity, xrootd storage tests added
parent
b6909756
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
SiteTests/MonteCarlo/cms-MC-test/RuntimeSAMStageOut.py
View file @
b45ef6ba
...
...
@@ -79,6 +79,8 @@ class StageOutDiagnostic:
self
.
complete
()
return
self
.
complete
()
def
complete
(
self
):
"""
_complete_
...
...
@@ -136,6 +138,7 @@ class StageOutDiagnostic:
raise
RuntimeError
,
msg
msg
=
"
\n
SiteConf test successful:
\n
"
self
.
summary
[
'SiteConf'
]
=
"OK"
for
key
,
val
in
self
.
siteConf
.
localStageOut
.
items
():
msg
+=
" %s = %s
\n
"
%
(
key
,
val
)
print
msg
...
...
@@ -167,6 +170,7 @@ class StageOutDiagnostic:
raise
RuntimeError
,
msg
msg
=
"TFC test successful:
\n
"
self
.
summary
[
'TFC'
]
=
"OK"
msg
+=
"Mapped LFN: %s
\n
To PFN: %s
\n
"
%
(
sampleLFN
,
samplePFN
)
print
msg
return
...
...
@@ -220,6 +224,7 @@ class StageOutDiagnostic:
"Failure: Local Stage Out Failed"
raise
RuntimeError
,
msg
if
wasSuccessful
:
self
.
summary
[
'LocalStageOut'
]
=
"OK"
return
except
RuntimeError
,
ex
:
...
...
@@ -257,7 +262,7 @@ class StageOutDiagnostic:
raise
RuntimeError
,
msg
if
wasSuccessful
:
self
.
summary
[
'LocalStageOut'
]
=
""
self
.
summary
[
'LocalStageOut'
]
=
"
OK (fallback)
"
return
# If we got here, nothing worked
...
...
@@ -308,13 +313,15 @@ class StageOutDiagnostic:
self
.
summary
[
'CleanUp'
]
=
"Failure: Cleanup operation Failed"
raise
RuntimeError
,
msg
wasSuccessful
=
True
self
.
summary
[
'CleanUp'
]
=
"OK"
return
except
:
# except for outer try
wasSuccessful
=
False
# See if this fallback worked
if
wasSuccessful
:
self
.
summary
[
'CleanUp'
]
=
""
self
.
summary
[
'CleanUp'
]
=
"
OK (fallback)
"
return
else
:
msg
+=
"Trying Fallback...
\n
"
...
...
SiteTests/SRM/tests/simplejson/.___init__.py
deleted
100644 → 0
View file @
b6909756
File deleted
SiteTests/SRM/tests/simplejson/.__speedups.c
deleted
100644 → 0
View file @
b6909756
File deleted
SiteTests/SRM/tests/simplejson/._scanner.py
deleted
100644 → 0
View file @
b6909756
File deleted
SiteTests/SRM/tests/simplejson/._tool.py
deleted
100644 → 0
View file @
b6909756
File deleted
SiteTests/SRM/tests/simplejson/LICENSE.txt
deleted
100644 → 0
View file @
b6909756
Copyright (c) 2006 Bob Ippolito
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SiteTests/SRM/tests/simplejson/__init__.py
deleted
100644 → 0
View file @
b6909756
r
"""
A simple, fast, extensible JSON encoder and decoder
JSON (JavaScript Object Notation) <http://json.org> is a subset of
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
interchange format.
simplejson exposes an API familiar to uses of the standard library
marshal and pickle modules.
Encoding basic Python object hierarchies::
>>> import simplejson
>>> simplejson.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
'["foo", {"bar": ["baz", null, 1.0, 2]}]'
>>> print simplejson.dumps("\"foo\bar")
"\"foo\bar"
>>> print simplejson.dumps(u'\u1234')
"\u1234"
>>> print simplejson.dumps('\\')
"\\"
>>> print simplejson.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True)
{"a": 0, "b": 0, "c": 0}
>>> from StringIO import StringIO
>>> io = StringIO()
>>> simplejson.dump(['streaming API'], io)
>>> io.getvalue()
'["streaming API"]'
Compact encoding::
>>> import simplejson
>>> simplejson.dumps([1,2,3,{'4': 5, '6': 7}], separators=(',',':'))
'[1,2,3,{"4":5,"6":7}]'
Pretty printing::
>>> import simplejson
>>> print simplejson.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4)
{
"4": 5,
"6": 7
}
Decoding JSON::
>>> import simplejson
>>> simplejson.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
>>> simplejson.loads('"\\"foo\\bar"')
u'"foo\x08ar'
>>> from StringIO import StringIO
>>> io = StringIO('["streaming API"]')
>>> simplejson.load(io)
[u'streaming API']
Specializing JSON object decoding::
>>> import simplejson
>>> def as_complex(dct):
... if '__complex__' in dct:
... return complex(dct['real'], dct['imag'])
... return dct
...
>>> simplejson.loads('{"__complex__": true, "real": 1, "imag": 2}',
... object_hook=as_complex)
(1+2j)
>>> import decimal
>>> simplejson.loads('1.1', parse_float=decimal.Decimal)
Decimal("1.1")
Extending JSONEncoder::
>>> import simplejson
>>> class ComplexEncoder(simplejson.JSONEncoder):
... def default(self, obj):
... if isinstance(obj, complex):
... return [obj.real, obj.imag]
... return simplejson.JSONEncoder.default(self, obj)
...
>>> dumps(2 + 1j, cls=ComplexEncoder)
'[2.0, 1.0]'
>>> ComplexEncoder().encode(2 + 1j)
'[2.0, 1.0]'
>>> list(ComplexEncoder().iterencode(2 + 1j))
['[', '2.0', ', ', '1.0', ']']
Using simplejson from the shell to validate and
pretty-print::
$ echo '{"json":"obj"}' | python -msimplejson.tool
{
"json": "obj"
}
$ echo '{ 1.2:3.4}' | python -msimplejson.tool
Expecting property name: line 1 column 2 (char 2)
Note that the JSON produced by this module's default settings
is a subset of YAML, so it may be used as a serializer for that as well.
"""
__version__
=
'1.9.2'
__all__
=
[
'dump'
,
'dumps'
,
'load'
,
'loads'
,
'JSONDecoder'
,
'JSONEncoder'
,
]
if
__name__
==
'__main__'
:
import
warnings
warnings
.
warn
(
'python -msimplejson is deprecated, use python -msiplejson.tool'
,
DeprecationWarning
)
from
simplejson.decoder
import
JSONDecoder
from
simplejson.encoder
import
JSONEncoder
else
:
from
decoder
import
JSONDecoder
from
encoder
import
JSONEncoder
_default_encoder
=
JSONEncoder
(
skipkeys
=
False
,
ensure_ascii
=
True
,
check_circular
=
True
,
allow_nan
=
True
,
indent
=
None
,
separators
=
None
,
encoding
=
'utf-8'
,
default
=
None
,
)
def
dump
(
obj
,
fp
,
skipkeys
=
False
,
ensure_ascii
=
True
,
check_circular
=
True
,
allow_nan
=
True
,
cls
=
None
,
indent
=
None
,
separators
=
None
,
encoding
=
'utf-8'
,
default
=
None
,
**
kw
):
"""
Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
``.write()``-supporting file-like object).
If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
(``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
will be skipped instead of raising a ``TypeError``.
If ``ensure_ascii`` is ``False``, then the some chunks written to ``fp``
may be ``unicode`` instances, subject to normal Python ``str`` to
``unicode`` coercion rules. Unless ``fp.write()`` explicitly
understands ``unicode`` (as in ``codecs.getwriter()``) this is likely
to cause an error.
If ``check_circular`` is ``False``, then the circular reference check
for container types will be skipped and a circular reference will
result in an ``OverflowError`` (or worse).
If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``)
in strict compliance of the JSON specification, instead of using the
JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
If ``indent`` is a non-negative integer, then JSON array elements and object
members will be pretty-printed with that indent level. An indent level
of 0 will only insert newlines. ``None`` is the most compact representation.
If ``separators`` is an ``(item_separator, dict_separator)`` tuple
then it will be used instead of the default ``(', ', ': ')`` separators.
``(',', ':')`` is the most compact JSON representation.
``encoding`` is the character encoding for str instances, default is UTF-8.
``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg.
"""
# cached encoder
if
(
skipkeys
is
False
and
ensure_ascii
is
True
and
check_circular
is
True
and
allow_nan
is
True
and
cls
is
None
and
indent
is
None
and
separators
is
None
and
encoding
==
'utf-8'
and
default
is
None
and
not
kw
):
iterable
=
_default_encoder
.
iterencode
(
obj
)
else
:
if
cls
is
None
:
cls
=
JSONEncoder
iterable
=
cls
(
skipkeys
=
skipkeys
,
ensure_ascii
=
ensure_ascii
,
check_circular
=
check_circular
,
allow_nan
=
allow_nan
,
indent
=
indent
,
separators
=
separators
,
encoding
=
encoding
,
default
=
default
,
**
kw
).
iterencode
(
obj
)
# could accelerate with writelines in some versions of Python, at
# a debuggability cost
for
chunk
in
iterable
:
fp
.
write
(
chunk
)
def
dumps
(
obj
,
skipkeys
=
False
,
ensure_ascii
=
True
,
check_circular
=
True
,
allow_nan
=
True
,
cls
=
None
,
indent
=
None
,
separators
=
None
,
encoding
=
'utf-8'
,
default
=
None
,
**
kw
):
"""
Serialize ``obj`` to a JSON formatted ``str``.
If ``skipkeys`` is ``True`` then ``dict`` keys that are not basic types
(``str``, ``unicode``, ``int``, ``long``, ``float``, ``bool``, ``None``)
will be skipped instead of raising a ``TypeError``.
If ``ensure_ascii`` is ``False``, then the return value will be a
``unicode`` instance subject to normal Python ``str`` to ``unicode``
coercion rules instead of being escaped to an ASCII ``str``.
If ``check_circular`` is ``False``, then the circular reference check
for container types will be skipped and a circular reference will
result in an ``OverflowError`` (or worse).
If ``allow_nan`` is ``False``, then it will be a ``ValueError`` to
serialize out of range ``float`` values (``nan``, ``inf``, ``-inf``) in
strict compliance of the JSON specification, instead of using the
JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``).
If ``indent`` is a non-negative integer, then JSON array elements and
object members will be pretty-printed with that indent level. An indent
level of 0 will only insert newlines. ``None`` is the most compact
representation.
If ``separators`` is an ``(item_separator, dict_separator)`` tuple
then it will be used instead of the default ``(', ', ': ')`` separators.
``(',', ':')`` is the most compact JSON representation.
``encoding`` is the character encoding for str instances, default is UTF-8.
``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg.
"""
# cached encoder
if
(
skipkeys
is
False
and
ensure_ascii
is
True
and
check_circular
is
True
and
allow_nan
is
True
and
cls
is
None
and
indent
is
None
and
separators
is
None
and
encoding
==
'utf-8'
and
default
is
None
and
not
kw
):
return
_default_encoder
.
encode
(
obj
)
if
cls
is
None
:
cls
=
JSONEncoder
return
cls
(
skipkeys
=
skipkeys
,
ensure_ascii
=
ensure_ascii
,
check_circular
=
check_circular
,
allow_nan
=
allow_nan
,
indent
=
indent
,
separators
=
separators
,
encoding
=
encoding
,
default
=
default
,
**
kw
).
encode
(
obj
)
_default_decoder
=
JSONDecoder
(
encoding
=
None
,
object_hook
=
None
)
def
load
(
fp
,
encoding
=
None
,
cls
=
None
,
object_hook
=
None
,
parse_float
=
None
,
parse_int
=
None
,
parse_constant
=
None
,
**
kw
):
"""
Deserialize ``fp`` (a ``.read()``-supporting file-like object containing
a JSON document) to a Python object.
If the contents of ``fp`` is encoded with an ASCII based encoding other
than utf-8 (e.g. latin-1), then an appropriate ``encoding`` name must
be specified. Encodings that are not ASCII based (such as UCS-2) are
not allowed, and should be wrapped with
``codecs.getreader(fp)(encoding)``, or simply decoded to a ``unicode``
object and passed to ``loads()``
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg.
"""
return
loads
(
fp
.
read
(),
encoding
=
encoding
,
cls
=
cls
,
object_hook
=
object_hook
,
parse_float
=
parse_float
,
parse_int
=
parse_int
,
parse_constant
=
parse_constant
,
**
kw
)
def
loads
(
s
,
encoding
=
None
,
cls
=
None
,
object_hook
=
None
,
parse_float
=
None
,
parse_int
=
None
,
parse_constant
=
None
,
**
kw
):
"""
Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
document) to a Python object.
If ``s`` is a ``str`` instance and is encoded with an ASCII based encoding
other than utf-8 (e.g. latin-1) then an appropriate ``encoding`` name
must be specified. Encodings that are not ASCII based (such as UCS-2)
are not allowed and should be decoded to ``unicode`` first.
``object_hook`` is an optional function that will be called with the
result of any object literal decode (a ``dict``). The return value of
``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser
for JSON floats (e.g. decimal.Decimal).
``parse_int``, if specified, will be called with the string
of every JSON int to be decoded. By default this is equivalent to
int(num_str). This can be used to use another datatype or parser
for JSON integers (e.g. float).
``parse_constant``, if specified, will be called with one of the
following strings: -Infinity, Infinity, NaN, null, true, false.
This can be used to raise an exception if invalid JSON numbers
are encountered.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg.
"""
if
(
cls
is
None
and
encoding
is
None
and
object_hook
is
None
and
parse_int
is
None
and
parse_float
is
None
and
parse_constant
is
None
and
not
kw
):
return
_default_decoder
.
decode
(
s
)
if
cls
is
None
:
cls
=
JSONDecoder
if
object_hook
is
not
None
:
kw
[
'object_hook'
]
=
object_hook
if
parse_float
is
not
None
:
kw
[
'parse_float'
]
=
parse_float
if
parse_int
is
not
None
:
kw
[
'parse_int'
]
=
parse_int
if
parse_constant
is
not
None
:
kw
[
'parse_constant'
]
=
parse_constant
return
cls
(
encoding
=
encoding
,
**
kw
).
decode
(
s
)
#
# Compatibility cruft from other libraries
#
def
decode
(
s
):
"""
demjson, python-cjson API compatibility hook. Use loads(s) instead.
"""
import
warnings
warnings
.
warn
(
"simplejson.loads(s) should be used instead of decode(s)"
,
DeprecationWarning
)
return
loads
(
s
)
def
encode
(
obj
):
"""
demjson, python-cjson compatibility hook. Use dumps(s) instead.
"""
import
warnings
warnings
.
warn
(
"simplejson.dumps(s) should be used instead of encode(s)"
,
DeprecationWarning
)
return
dumps
(
obj
)
def
read
(
s
):
"""
jsonlib, JsonUtils, python-json, json-py API compatibility hook.
Use loads(s) instead.
"""
import
warnings
warnings
.
warn
(
"simplejson.loads(s) should be used instead of read(s)"
,
DeprecationWarning
)
return
loads
(
s
)
def
write
(
obj
):
"""
jsonlib, JsonUtils, python-json, json-py API compatibility hook.
Use dumps(s) instead.
"""
import
warnings
warnings
.
warn
(
"simplejson.dumps(s) should be used instead of write(s)"
,
DeprecationWarning
)
return
dumps
(
obj
)
if
__name__
==
'__main__'
:
import
simplejson.tool
simplejson
.
tool
.
main
()
SiteTests/SRM/tests/simplejson/_speedups.c
deleted
100644 → 0
View file @
b6909756
This diff is collapsed.
Click to expand it.
SiteTests/SRM/tests/simplejson/decoder.py
deleted
100644 → 0
View file @
b6909756
"""
Implementation of JSONDecoder
"""
import
re
import
sys
from
simplejson.scanner
import
Scanner
,
pattern
try
:
from
simplejson._speedups
import
scanstring
as
c_scanstring
except
ImportError
:
pass
FLAGS
=
re
.
VERBOSE
|
re
.
MULTILINE
|
re
.
DOTALL
def
_floatconstants
():
import
struct
import
sys
_BYTES
=
'7FF80000000000007FF0000000000000'
.
decode
(
'hex'
)
if
sys
.
byteorder
!=
'big'
:
_BYTES
=
_BYTES
[:
8
][::
-
1
]
+
_BYTES
[
8
:][::
-
1
]
nan
,
inf
=
struct
.
unpack
(
'dd'
,
_BYTES
)
return
nan
,
inf
,
-
inf
NaN
,
PosInf
,
NegInf
=
_floatconstants
()
def
linecol
(
doc
,
pos
):
lineno
=
doc
.
count
(
'
\n
'
,
0
,
pos
)
+
1
if
lineno
==
1
:
colno
=
pos
else
:
colno
=
pos
-
doc
.
rindex
(
'
\n
'
,
0
,
pos
)
return
lineno
,
colno
def
errmsg
(
msg
,
doc
,
pos
,
end
=
None
):
lineno
,
colno
=
linecol
(
doc
,
pos
)
if
end
is
None
:
return
'%s: line %d column %d (char %d)'
%
(
msg
,
lineno
,
colno
,
pos
)
endlineno
,
endcolno
=
linecol
(
doc
,
end
)
return
'%s: line %d column %d - line %d column %d (char %d - %d)'
%
(
msg
,
lineno
,
colno
,
endlineno
,
endcolno
,
pos
,
end
)
_CONSTANTS
=
{
'-Infinity'
:
NegInf
,
'Infinity'
:
PosInf
,
'NaN'
:
NaN
,
'true'
:
True
,
'false'
:
False
,
'null'
:
None
,
}
def
JSONConstant
(
match
,
context
,
c
=
_CONSTANTS
):
s
=
match
.
group
(
0
)
fn
=
getattr
(
context
,
'parse_constant'
,
None
)
if
fn
is
None
:
rval
=
c
[
s
]
else
:
rval
=
fn
(
s
)
return
rval
,
None
pattern
(
'(-?Infinity|NaN|true|false|null)'
)(
JSONConstant
)
def
JSONNumber
(
match
,
context
):
match
=
JSONNumber
.
regex
.
match
(
match
.
string
,
*
match
.
span
())
integer
,
frac
,
exp
=
match
.
groups
()
if
frac
or
exp
:
fn
=
getattr
(
context
,
'parse_float'
,
None
)
or
float
res
=
fn
(
integer
+
(
frac
or
''
)
+
(
exp
or
''
))
else
:
fn
=
getattr
(
context
,
'parse_int'
,
None
)
or
int
res
=
fn
(
integer
)
return
res
,
None
pattern
(
r
'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?'
)(
JSONNumber
)
STRINGCHUNK
=
re
.
compile
(
r
'(.*?)(["\\\x00-\x1f])'
,
FLAGS
)
BACKSLASH
=
{
'"'
:
u
'"'
,
'
\\
'
:
u
'
\\
'
,
'/'
:
u
'/'
,
'b'
:
u
'
\b
'
,
'f'
:
u
'
\f
'
,
'n'
:
u
'
\n
'
,
'r'
:
u
'
\r
'
,
't'
:
u
'
\t
'
,
}
DEFAULT_ENCODING
=
"utf-8"
def
py_scanstring
(
s
,
end
,
encoding
=
None
,
strict
=
True
,
_b
=
BACKSLASH
,
_m
=
STRINGCHUNK
.
match
):
if
encoding
is
None
:
encoding
=
DEFAULT_ENCODING
chunks
=
[]
_append
=
chunks
.
append
begin
=
end
-
1
while
1
:
chunk
=
_m
(
s
,
end
)
if
chunk
is
None
:
raise
ValueError
(
errmsg
(
"Unterminated string starting at"
,
s
,
begin
))
end
=
chunk
.
end
()
content
,
terminator
=
chunk
.
groups
()
if
content
:
if
not
isinstance
(
content
,
unicode
):
content
=
unicode
(
content
,
encoding
)
_append
(
content
)
if
terminator
==
'"'
:
break
elif
terminator
!=
'
\\
'
:
if
strict
:
raise
ValueError
(
errmsg
(
"Invalid control character %r at"
,
s
,
end
))
else
:
_append
(
terminator
)
continue
try
:
esc
=
s
[
end
]
except
IndexError
:
raise
ValueError
(
errmsg
(
"Unterminated string starting at"
,
s
,
begin
))
if
esc
!=
'u'
:
try
:
m
=
_b
[
esc
]
except
KeyError
:
raise
ValueError
(
errmsg
(
"Invalid
\\
escape: %r"
%
(
esc
,),
s
,
end
))
end
+=
1
else
:
esc
=
s
[
end
+
1
:
end
+
5
]
next_end
=
end
+
5
msg
=
"Invalid
\\
uXXXX escape"
try
:
if
len
(
esc
)
!=
4
:
raise
ValueError
uni
=
int
(
esc
,
16
)
if
0xd800
<=
uni
<=
0xdbff
and
sys
.
maxunicode
>
65535
:
msg
=
"Invalid
\\
uXXXX
\\
uXXXX surrogate pair"
if
not
s
[
end
+
5
:
end
+
7
]
==
'
\\
u'
:
raise
ValueError
esc2
=
s
[
end
+
7
:
end
+
11
]
if
len
(
esc2
)
!=
4
:
raise
ValueError
uni2
=
int
(
esc2
,
16
)
uni
=
0x10000
+
(((
uni
-
0xd800
)
<<
10
)
|
(
uni2
-
0xdc00
))
next_end
+=
6
m
=
unichr
(
uni
)
except
ValueError
:
raise
ValueError
(
errmsg
(
msg
,
s
,
end
))
end
=
next_end