Class PyShadowString
- java.lang.Object
-
- org.python.core.PyObject
-
- org.python.core.PySequence
-
- org.python.core.PyBaseString
-
- org.python.core.PyString
-
- org.python.core.PyShadowString
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.CharSequence
,BufferProtocol
- Direct Known Subclasses:
PyShadowStringDerived
public class PyShadowString extends PyString
This class provides a string that sometimes seems to change value, as far as equality tests andstartswith
are concerned. This solves a problem that Jython users sometimes experience with libraries that are sensitive to platform.A library may test for a particular platform in order to adjust to local file name conventions or to decide which operating system commands are available. In Jython,
os.name
andsys.platform
indicate that Java is the platform, which is necessary information in some parts of the standard library, but other libraries assuming CPython then draw incorrect conclusions.With hindsight, a better choice could be made, where
sys.platform
etc. indicated Windows or Posix, and something else indicates the implementation. A change in Jython 2 would cause more problems than it solved, but we expect Jython 3 to work that way. In the Python Standard Library, the Jython project can make all necessary changes. It can't do anything about third-party libraries. But it would be a big help if users could causesys.platform
oros.name
to appear to have the OS-dependent value as far as those troublesome libraries were concerned.This is what this class achieves.
os.name
andsys.platform
regular strings for most purposes, but each has a "shadow" value that is used in contexts the user may specify.- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.python.core.PyObject
PyObject.ConversionException
-
-
Field Summary
Fields Modifier and Type Field Description static PyType
TYPE
-
Fields inherited from class org.python.core.PyObject
gcMonitorGlobal
-
-
Constructor Summary
Constructors Constructor Description PyShadowString()
Empty string (not very useful but needed for technical reasons).PyShadowString(java.lang.String primary, java.lang.String shadow)
Construct an instance specifying primary and shadow values.PyShadowString(PyObject primary, java.lang.String shadow)
Deprecated.use the constructor with strings instead.PyShadowString(PyType subtype, PyObject primary, PyObject shadow)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PyObject
__eq__(PyObject other)
Compare thisPyShadowString
with anotherPyObject
for equality.PyObject
__getslice__(PyObject start, PyObject stop, PyObject step)
PyString
__repr__()
Equivalent to the standard Python__repr__
method.void
addTarget(java.lang.String className, java.lang.String methodName)
Specify a context (class, method) in which the shadow string is allowed to match.PyString
getshadow()
Get the shadow value.PyList
getTargets()
Return a list of the tuples specifying the contexts in which the shadow value will be consulted during matching.void
shadowstr_addtarget(PyObject classname, PyObject methodname)
PyString
shadowstr_getshadow()
PyObject
shadowstr_gettargets()
boolean
startswith(PyObject prefix)
Equivalent to the Pythonstr.startswith
method testing whether a string starts with a specified prefix.boolean
startswith(PyObject prefix, PyObject start)
Equivalent to the Pythonstr.startswith
method, testing whether a string starts with a specified prefix, where a sub-range is specified by[start:]
.boolean
startswith(PyObject prefix, PyObject start, PyObject end)
Equivalent to the Pythonstr.startswith
method, testing whether a string starts with a specified prefix, where a sub-range is specified by[start:end]
.-
Methods inherited from class org.python.core.PyString
__add__, __cmp__, __complex__, __contains__, __float__, __format__, __ge__, __getnewargs__, __gt__, __int__, __invert__, __le__, __len__, __long__, __lt__, __mod__, __mul__, __ne__, __neg__, __pos__, __rmul__, __str__, __tojava__, __unicode__, asDouble, asInt, asLong, asName, asString, asString, atof, atoi, atoi, atol, atol, capitalize, center, charAt, count, count, count, count, count, count, createInstance, decode, decode, decode, decode_UnicodeEscape, encode, encode, encode, encode_UnicodeEscape, endswith, endswith, endswith, expandtabs, expandtabs, find, find, find, find, find, find, fromInterned, getBuffer, getInt, getString, hashCode, index, index, index, index, index, index, internedString, isalnum, isalpha, isBasicPlane, isdecimal, isdigit, islower, isnumeric, isspace, istitle, isunicode, isupper, join, length, ljust, ljust, lower, lstrip, lstrip, lstrip, partition, replace, replace, rfind, rfind, rfind, rfind, rfind, rfind, rindex, rindex, rindex, rindex, rindex, rindex, rjust, rpartition, rsplit, rsplit, rsplit, rsplit, rsplit, rstrip, rstrip, rstrip, split, split, split, split, split, splitlines, splitlines, str___mod__, strip, strip, strip, subSequence, substring, swapcase, title, toBytes, toCodePoints, toString, translate, translate, translate, translate, upper, zfill
-
Methods inherited from class org.python.core.PySequence
__delitem__, __delslice__, __finditem__, __finditem__, __getitem__, __iter__, __nonzero__, __setitem__, __setitem__, __setslice__, isMappingType, isNumberType, isSequenceType
-
Methods inherited from class org.python.core.PyObject
__abs__, __and__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __call__, __coerce__, __coerce_ex__, __delattr__, __delattr__, __delete__, __delitem__, __delslice__, __dir__, __div__, __divmod__, __ensure_finalizer__, __findattr__, __findattr__, __findattr_ex__, __finditem__, __floordiv__, __get__, __getattr__, __getattr__, __getitem__, __getslice__, __hash__, __hex__, __iadd__, __iand__, __idiv__, __idivmod__, __ifloordiv__, __ilshift__, __imod__, __imul__, __index__, __ior__, __ipow__, __irshift__, __isub__, __iternext__, __itruediv__, __ixor__, __lshift__, __not__, __oct__, __or__, __pow__, __pow__, __radd__, __rand__, __rdiv__, __rdivmod__, __reduce__, __reduce_ex__, __reduce_ex__, __rfloordiv__, __rlshift__, __rmod__, __ror__, __rpow__, __rrshift__, __rshift__, __rsub__, __rtruediv__, __rxor__, __set__, __setattr__, __setattr__, __setitem__, __setslice__, __sub__, __truediv__, __trunc__, __xor__, _add, _and, _callextra, _cmp, _div, _divmod, _doget, _doget, _doset, _eq, _floordiv, _ge, _gt, _iadd, _iand, _idiv, _idivmod, _ifloordiv, _ilshift, _imod, _imul, _in, _ior, _ipow, _irshift, _is, _isnot, _isub, _itruediv, _ixor, _jcall, _jcallexc, _jthrow, _le, _lshift, _lt, _mod, _mul, _ne, _notin, _or, _pow, _rshift, _sub, _truediv, _xor, asIndex, asIndex, asInt, asIterable, asLong, asName, asStringOrNull, asStringOrNull, bit_length, conjugate, delDict, delType, dispatch__init__, equals, fastGetClass, fastGetDict, getDict, getType, implementsDescrDelete, implementsDescrGet, implementsDescrSet, invoke, invoke, invoke, invoke, invoke, invoke, isCallable, isDataDescr, isIndex, isInteger, noAttributeError, object___subclasshook__, readonlyAttributeError, setDict, setType
-
-
-
-
Field Detail
-
TYPE
public static final PyType TYPE
-
-
Constructor Detail
-
PyShadowString
public PyShadowString()
Empty string (not very useful but needed for technical reasons).
-
PyShadowString
public PyShadowString(java.lang.String primary, java.lang.String shadow)
Construct an instance specifying primary and shadow values.
-
PyShadowString
@Deprecated public PyShadowString(PyObject primary, java.lang.String shadow)
Deprecated.use the constructor with strings instead.Construct an instance specifying primary and shadow values (bytes object expected for primary). This somewhat uncanonical constructor was removed in Jython 2.7.2. The deprecated version is kept for compatibility with JyNI 2.7-alpha5.
-
-
Method Detail
-
getshadow
public PyString getshadow()
Get the shadow value.
-
shadowstr_getshadow
public final PyString shadowstr_getshadow()
-
addTarget
public void addTarget(java.lang.String className, java.lang.String methodName)
Specify a context (class, method) in which the shadow string is allowed to match.- Parameters:
className
- class name to match or null to match anything.methodName
- method name to match or null to match anything.
-
getTargets
public PyList getTargets()
Return a list of the tuples specifying the contexts in which the shadow value will be consulted during matching.
-
shadowstr_gettargets
public final PyObject shadowstr_gettargets()
-
__eq__
public PyObject __eq__(PyObject other)
Compare thisPyShadowString
with anotherPyObject
for equality. APyShadowString
is equal to the other object if its primary value is equal to it, or if its shadow value is equal to the other object and the test is made in one of its target contexts. (TwoPyShadowString
are equal if the primary values are equal, the primary of one matches the shadow of the other in the shadow's context, or their shadows match and both are in context.
-
__getslice__
public PyObject __getslice__(PyObject start, PyObject stop, PyObject step)
- Overrides:
__getslice__
in classPySequence
-
startswith
public boolean startswith(PyObject prefix)
Description copied from class:PyString
Equivalent to the Pythonstr.startswith
method testing whether a string starts with a specified prefix.prefix
can also be a tuple of prefixes to look for.- Overrides:
startswith
in classPyString
- Parameters:
prefix
- string to check for (or aPyTuple
of them).- Returns:
true
if this string slice starts with a specified prefix, otherwisefalse
.
-
startswith
public boolean startswith(PyObject prefix, PyObject start)
Description copied from class:PyString
Equivalent to the Pythonstr.startswith
method, testing whether a string starts with a specified prefix, where a sub-range is specified by[start:]
.start
is interpreted as in slice notation, with null orPy.None
representing "missing".prefix
can also be a tuple of prefixes to look for.- Overrides:
startswith
in classPyString
- Parameters:
prefix
- string to check for (or aPyTuple
of them).start
- start of slice.- Returns:
true
if this string slice starts with a specified prefix, otherwisefalse
.
-
startswith
public boolean startswith(PyObject prefix, PyObject start, PyObject end)
Description copied from class:PyString
Equivalent to the Pythonstr.startswith
method, testing whether a string starts with a specified prefix, where a sub-range is specified by[start:end]
. Argumentsstart
andend
are interpreted as in slice notation, with null orPy.None
representing "missing".prefix
can also be a tuple of prefixes to look for.- Overrides:
startswith
in classPyString
- Parameters:
prefix
- string to check for (or aPyTuple
of them).start
- start of slice.end
- end of slice.- Returns:
true
if this string slice starts with a specified prefix, otherwisefalse
.
-
-