Exemplo n.º 1
0
async def search(query: str, index: InvertedIndex, writer: asyncio.StreamWriter) -> int:
    chars = index.search(query)
    lines = (line.encode() + CRLF for line in format_results(chars))
    writer.writelines(lines)
    await writer.drain()
    writer.write(f"{'-'*66}".encode() + CRLF + f"{len(chars)} founded".encode() + CRLF)
    await writer.drain()
    return len(chars)
Exemplo n.º 2
0
async def send_msg(stream: StreamWriter, data: bytes) -> None:
    """
    encodes the size of payload into its header and then sends combined
    header and payload as a msg on wire.
    """
    size_bytes = len(data).to_bytes(_NUM_BYTES_HEADER, byteorder=_BYTE_ORDER)
    stream.writelines([size_bytes, data])
    await stream.drain()
async def search(
        query: str,  # <1>
        index: InvertedIndex,
        writer: asyncio.StreamWriter) -> int:
    chars = index.search(query)  # <2>
    lines = (
        line.encode() + CRLF for line  # <3>
        in format_results(chars))
    writer.writelines(lines)  # <4>
    await writer.drain()  # <5>
    status_line = f'{"─" * 66} {len(chars)} found'  # <6>
    writer.write(status_line.encode() + CRLF)
    await writer.drain()
    return len(chars)
Exemplo n.º 4
0
async def send_file(filepath: Path, writer: aio.StreamWriter, logger: logging.Logger):
    """ Used by server side to send file contents to a given client """
    logger.debug(f'trying to send file {filepath}')

    with open(filepath, 'rb') as f:
        checksum = hashlib.md5()
        for line in f:
            checksum.update(line)
        checksum = checksum.digest()

        # logger.info(f'checksum of: {checksum}')
        await Message.write(writer, checksum)

        filesize = filepath.stat().st_size
        await Message.write(writer, filesize)

        f.seek(0)
        writer.writelines(f) # don't need to encode
        await writer.drain()
Exemplo n.º 5
0
async def handle_client(reader: asyncio.StreamReader,
                        writer: asyncio.StreamWriter):
    request = await reader.readuntil(b"\r\n\r\n")

    print(request.decode())

    writer.writelines((b"HTTP/1.1 200 OK\r\n", b"\r\n"))
    await writer.drain()
    writer.write(b"""
        <html>
            <head>
                <title>An Example Page</title>
            </head>
            <body>
                <p>Hello World, this is a very simple HTML document.</p>
            </body>
        </html>
        """)
    await writer.drain()
    writer.write(b"\r\n")
    await writer.drain()

    writer.close()
Exemplo n.º 6
0
async def send_msg(stream: StreamWriter, data: bytes):
    size_bytes = len(data).to_bytes(4, byteorder='big')
    stream.writelines([size_bytes, data])
    await stream.drain()
Exemplo n.º 7
0
async def send_msg(stream: StreamWriter, data: bytes):
    size_bytes = len(data).to_bytes(4, byteorder="big")
    # Write is the inverse of read: first we send the length of the data, encoded as 4 bytes, and thereafter the data.
    stream.writelines([size_bytes, data])
    await stream.drain()
Exemplo n.º 8
0
async def send_msg(stream: StreamWriter, data: bytes):
    # prepare the 'header' - the size of the data
    size_bytes = len(data).to_bytes(4, byteorder='big')
    stream.writelines([size_bytes, data])   # send the data size and the data itself
    await stream.drain()