示例#1
0
class InputStream(object):
    """
    FCGI_STDIN or FCGI_DATA stream.
    Uses temporary file to store received data once max_mem bytes
    have been received.
    """
    def __init__(self, max_mem=1024):
        self._file = SpooledTemporaryFile(max_mem)
        self._eof_received = Event()

    def feed(self, data):
        if self._eof_received.is_set():
            raise IOError('Feeding file beyond EOF mark')
        if not data:  # EOF mark
            self._file.seek(0)
            self._eof_received.set()
        else:
            self._file.write(data)

    def __iter__(self):
        self._eof_received.wait()
        return iter(self._file)

    def read(self, size=-1):
        self._eof_received.wait()
        return self._file.read(size)

    def readlines(self, sizehint=0):
        self._eof_received.wait()
        return self._file.readlines(sizehint)

    @property
    def eof_received(self):
        return self._eof_received.is_set()
示例#2
0
    def from_csv(
        cls,
        db: Session,
        title: str,
        course_id: int,
        csv_file: SpooledTemporaryFile,
    ) -> "Lesson":
        slug = slug_from_title(title)

        csv_file.seek(0)
        lines = [
            line.decode("utf-8").replace(r"\n", "")
            for line in csv_file.readlines()
        ]

        entries = list(
            DictReader(
                lines,
                delimiter=";",
                fieldnames=["target", "source", "hint"],
            ))

        errors = [
            index for index, row in enumerate(entries)
            if row["target"] is None or row["source"] is None
        ]
        if errors:
            raise HTTPException(
                status_code=400,
                detail=f"csv file malformatted at row(s) {errors}.",
            )

        db_lesson = Lesson(title=title, slug=slug, course_id=course_id)

        db.add(db_lesson)
        db.commit()
        db.refresh(db_lesson)

        for entry in entries:
            source = list(map(lambda x: x.strip(), entry["source"].split("|")))
            target = list(map(lambda x: x.strip(), entry["target"].split("|")))
            hint = entry["hint"]
            vocab = Vocab(lesson_id=db_lesson.id,
                          source=source,
                          target=target,
                          hint=hint)
            db.add(vocab)

        db.commit()
        db.refresh(db_lesson)

        return db_lesson
示例#3
0
class InputStream(object):
    """
    FCGI_STDIN or FCGI_DATA stream.
    Uses temporary file to store received data once max_mem bytes
    have been received.
    """
    def __init__(self, max_mem=1024):
        self._file = SpooledTemporaryFile(max_mem)
        self._eof_received = Event()

    def __del__(self):
        self._file.close()

    def feed(self, data):
        if self._eof_received.is_set():
            raise IOError('Feeding file beyond EOF mark')
        if not data:  # EOF mark
            self._file.seek(0)
            self._eof_received.set()
        else:
            if isinstance(data, six.text_type):
                data = data.encode("ISO-8859-1")
            self._file.write(data)

    def __iter__(self):
        self._eof_received.wait()
        return iter(self._file)

    def read(self, size=-1):
        self._eof_received.wait()
        return self._file.read(size)

    def readline(self, size=-1):
        self._eof_received.wait()
        return self._file.readline(size)

    def readlines(self, sizehint=0):
        self._eof_received.wait()
        return self._file.readlines(sizehint)

    @property
    def eof_received(self):
        return self._eof_received.is_set()
示例#4
0
from tempfile import SpooledTemporaryFile

f = SpooledTemporaryFile(max_size=1024)
f.write("Hello")
f.seek(0)
print(f.readlines())
f.close()