1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # Copyright 2016 Julien Danjou
- # Copyright 2016 Joshua Harlow
- # Copyright 2013-2014 Ray Holder
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import sys
- import typing
- # sys.maxsize:
- # An integer giving the maximum value a variable of type Py_ssize_t can take.
- MAX_WAIT = sys.maxsize / 2
- def find_ordinal(pos_num: int) -> str:
- # See: https://en.wikipedia.org/wiki/English_numerals#Ordinal_numbers
- if pos_num == 0:
- return "th"
- elif pos_num == 1:
- return "st"
- elif pos_num == 2:
- return "nd"
- elif pos_num == 3:
- return "rd"
- elif 4 <= pos_num <= 20:
- return "th"
- else:
- return find_ordinal(pos_num % 10)
- def to_ordinal(pos_num: int) -> str:
- return f"{pos_num}{find_ordinal(pos_num)}"
- def get_callback_name(cb: typing.Callable[..., typing.Any]) -> str:
- """Get a callback fully-qualified name.
- If no name can be produced ``repr(cb)`` is called and returned.
- """
- segments = []
- try:
- segments.append(cb.__qualname__)
- except AttributeError:
- try:
- segments.append(cb.__name__)
- except AttributeError:
- pass
- if not segments:
- return repr(cb)
- else:
- try:
- # When running under sphinx it appears this can be none?
- if cb.__module__:
- segments.insert(0, cb.__module__)
- except AttributeError:
- pass
- return ".".join(segments)
|