Skip to content

stub for poplib #1211

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 27, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions stdlib/2and3/poplib.pyi
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Stubs for poplib (Python 2 and 3)

from mypy_extensions import NoReturn
import socket
import ssl
import sys
from typing import Any, BinaryIO, Dict, List, Optional, Pattern, Text, Tuple

class error_proto(Exception): pass

POP3_PORT: int
POP3_SSL_PORT: int
CR: bytes
LF: bytes
CRLF: bytes


class POP3:
if sys.version_info >= (3, 0):
encoding: Text

host: Text
port: int
sock: socket.socket
file: BinaryIO
welcome: bytes

def __init__(self, host: Text, port: int = ..., timeout: float = ...) -> None: ...
def getwelcome(self) -> bytes: ...
def set_debuglevel(self, level: int) -> None: ...
def user(self, user: Text) -> bytes: ...
def pass_(self, pswd: Text) -> bytes: ...
def stat(self) -> Tuple[int, int]: ...
def list(self, which: Optional[Text] = ...) -> bytes: ...
def retr(self, which: Text) -> bytes: ...
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just found (through testing against some working code) that this is wrong -- it returns a tuple (https://docs.python.org/2/library/poplib.html#poplib.POP3.retr). It also conceivably accepts an int as argument.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right, I'll submit another PR to fix.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As for the argument type, it really accepts anything because the only thing it does with the argument is "%s". I think I put Text because that's the only type that's actually used in the tests. I think I'll just make it Any instead to be safe.

def dele(self, which: Text) -> bytes: ...
def noop(self) -> bytes: ...
def rset(self) -> bytes: ...
def quit(self) -> bytes: ...
def close(self) -> None: ...
def rpop(self, user: Text) -> bytes: ...

timestamp: Pattern[Text]

if sys.version_info < (3, 0):
def apop(self, user: Text, secret: Text) -> bytes: ...
else:
def apop(self, user: Text, password: Text) -> bytes: ...
def top(self, which: Text, howmuch: int) -> bytes: ...
def uidl(self, which: Optional[Text] = ...) -> bytes: ...
if sys.version_info >= (3, 5):
def utf8(self) -> bytes: ...
if sys.version_info >= (3, 4):
def capa(self) -> Dict[Text, List[Text]]: ...
def stls(self, context: Optional[ssl.SSLContext] = ...) -> bytes: ...


class POP3_SSL(POP3):
if sys.version_info >= (3, 0):
def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ...,
timeout: float = ..., context: Optional[ssl.SSLContext] = ...) -> None: ...
else:
def __init__(self, host: Text, port: int = ..., keyfile: Optional[Text] = ..., certfile: Optional[Text] = ...,
timeout: float = ...) -> None: ...

if sys.version_info >= (3, 4):
# "context" is actually the last argument, but that breaks LSP and it doesn't really matter because all the arguments are ignored
def stls(self, context: Any = ..., keyfile: Any = ..., certfile: Any = ...) -> bytes: ...