Esempio n. 1
0
def generate_filename_from_details(
    *,
    mimetype: typing.Optional[str] = None,
    extension: typing.Optional[str] = None,
    data: typing.Optional[bytes] = None,
) -> str:
    """Given optional information about a resource, generate a filename.

    Parameters
    ----------
    mimetype : typing.Optional[builtins.str]
        The mimetype of the content, or `builtins.None` if not known.
    extension : typing.Optional[builtins.str]
        The file extension to use, or `builtins.None` if not known.
    data : typing.Optional[builtins.bytes]
        The data to inspect, or `builtins.None` if not known.

    Returns
    -------
    builtins.str
        A generated quasi-unique filename.
    """
    if data is not None and mimetype is None:
        mimetype = guess_mimetype_from_data(data)

    if extension is None and mimetype is not None:
        extension = guess_file_extension(mimetype)

    if not extension:
        extension = ""
    elif not extension.startswith("."):
        extension = f".{extension}"

    # Nanosecond precision will be less likely to collide.
    return time.uuid() + extension
Esempio n. 2
0
 def __init__(
     self,
     app: traits.BotAware,
     guild_id: snowflakes.Snowflake,
     *,
     timeout: typing.Union[int, float, None],
     limit: typing.Optional[int] = None,
     include_presences: undefined.UndefinedOr[bool] = undefined.UNDEFINED,
     query_limit: int = 0,
     query: str = "",
     users: undefined.UndefinedOr[typing.Sequence[snowflakes.SnowflakeishOr[
         users_.User]]] = undefined.UNDEFINED,
 ) -> None:
     super().__init__(app=app,
                      event_type=shard_events.MemberChunkEvent,
                      limit=limit,
                      timeout=timeout)
     self._guild_id = guild_id
     self._include_presences = include_presences
     self._limit = query_limit
     self._missing_chunks: typing.Optional[
         typing.MutableSequence[int]] = None
     self._nonce = time.uuid()
     self._query = query
     self._users = users
     self.filter(lambda event: event.nonce == self._nonce)