예제 #1
0
 def test_std_error(self, safer_writer):
     for file in (sys.stdout, sys.stderr, None):
         with safer_writer(file) as fp:
             fp.write('boo')
         with self.assertRaises(ValueError) as m:
             safer.writer(file, close_on_exit=True)
         assert m.exception.args[0] == 'You cannot close stdout or stderr'
예제 #2
0
    def test_create_parent(self):
        with TemporaryDirectory() as td:
            filename = td + '/foo/test.txt'
            with self.assertRaises(OSError):
                with safer.writer(filename):
                    pass

            with safer.writer(filename, create_parent=True) as fp:
                fp.write('hello')
            assert read_text(filename) == 'hello'
예제 #3
0
 def test_copy(self):
     with TemporaryDirectory() as td:
         filename = td + '/test.txt'
         write_text(filename, 'c')
         with safer.writer(filename, 'a') as fp:
             fp.write('hello')
         assert read_text(filename) == 'chello'
예제 #4
0
파일: manpages.py 프로젝트: rec/gitz
 def write(self):
     manfile = (dirs.MAN / self.command).with_suffix('.1')
     with safer.writer(manfile) as self.fp:
         self._print(HEADER.format(**vars(self)))
         for field in FIELDS:
             if field in self.sections:
                 self._write_field(field)
예제 #5
0
파일: cast.py 프로젝트: rec/gitz
    def write(self, fp):
        if isinstance(fp, (str, Path)):
            with safer.writer(fp) as fp2:
                return self.write(fp2)

        for i in (self.header, *self.lines):
            print(json.dumps(i), file=fp)
예제 #6
0
    def test_error_with_copy(self):
        with TemporaryDirectory() as td:
            filename = td + '/test.txt'
            write_text(filename, 'hello')

            with self.assertRaises(ValueError):
                with safer.writer(filename, 'a') as fp:
                    fp.write('GONE')
                    raise ValueError

            assert read_text(filename) == 'hello'
예제 #7
0
    def test_file_perms(self):
        with TemporaryDirectory() as td:
            filename = td + '/test.txt'

            write_text(td + '/test2.txt', 'hello')

            with safer.writer(filename) as fp:
                fp.write('hello')
            assert read_text(filename) == 'hello'
            mode = os.stat(filename).st_mode
            assert mode in (0o100664, 0o100644)
            new_mode = mode & 0o100770

            os.chmod(filename, new_mode)
            with safer.writer(filename) as fp:
                fp.write('bye')
            assert read_text(filename) == 'bye'
            assert os.stat(filename).st_mode == new_mode

            with safer.writer(filename, 'a') as fp:
                fp.write(' there')
            assert read_text(filename) == 'bye there'
            assert os.stat(filename).st_mode == new_mode
예제 #8
0
    def test_two_errors(self):
        with TemporaryDirectory() as td:
            filename = td + '/test.txt'
            write_text(filename, 'hello')
            before = set(os.listdir(td))

            with self.assertRaises(ValueError):
                with safer.writer(filename) as fp:
                    fp.write('GONE')
                    raise ValueError
            assert read_text(filename) == 'hello'

            after = set(os.listdir(td))
            assert before == after

            with self.assertRaises(ValueError):
                with safer.writer(filename, delete_failures=False) as fp:
                    fp.write('GONE')
                    raise ValueError

            assert read_text(filename) == 'hello'
            after = set(os.listdir(td))
            assert len(before) + 1 == len(after)
            assert len(after.difference(before)) == 1

            with safer.writer(filename) as fp:
                fp.write('OK!')
                after = set(os.listdir(td))
                assert len(before) + 2 == len(after)
                assert len(after.difference(before)) == 2

            assert read_text(filename) == 'OK!'

            after = set(os.listdir(td))
            assert len(before) + 1 == len(after)
            assert len(after.difference(before)) == 1
예제 #9
0
파일: doc_index.py 프로젝트: rec/gitz
def main(commands):
    with safer.writer(README) as fp:
        print('gitz commands', file=fp)
        print('-------------', file=fp)

        for command, help in commands.items():
            print(file=fp)
            print(LINK.format(command), file=fp)

            summary = help[help['COMMAND'].replace('git-', 'git ')]
            for s in summary:
                print(' ', s.strip(), file=fp)
        print(file=fp)
        print(HOME_LINK, file=fp)
        print('=' * len(HOME_LINK), file=fp)
예제 #10
0
def main(commands):
    with safer.writer(README) as fp:
        all_movie_url = upload.all_movie_url()

        for line in open(README):
            ls = line.strip()
            if ls.startswith(TAIL_TAG):
                _tail(fp, _sort_by_danger(commands))
                return  # Everything after this tag is ignored.

            if ls.startswith(IMAGE_TAG):
                fp.write('%s %s.png\n' % (IMAGE_TAG, all_movie_url))
            elif ls.startswith(TARGET_TAG.strip()):
                _, query = ls.split('?')
                fp.write('%s %s?%s\n' % (TARGET_TAG, all_movie_url, query))
            else:
                fp.write(line)
예제 #11
0
def doks(
    source=None,
    target=None,
    auto=False,
    command=False,
    force=False,
    window=None,
    verbose=False,
):
    """
    Write documentation for a file or module.
    Returns True if `target` was written, and False if it was unchanged.

    ARGUMENTS
      source
        path to the Python file or module.

      target
        path to the output file or `None`, in which case
        output is printed to stdout

      auto
        If true, automatically guess both source and target files

      command
        If true, use command line help from executing source file

      force
        If true, write .rst documentation even if it is malformed

      verbose
        Emit more print messages
    """
    if auto:
        source = source or _guess_source()
        target = target or README

    elif not source:
        raise ValueError('Source must be set if --auto/-a is not used')

    if window is None:
        window = render.ERROR_WINDOW

    if command:
        lines = from_command.from_command(source)
    else:
        lines = from_file.from_file(source)
    lines = list(lines)

    if lines and lines[-1]:
        lines.append('')
    lines.append(_DOKS_MSG % _timestamp())

    body = '\n'.join(lines) + '\n'
    if not (render.render(body, window) or force):
        raise ValueError(f'The .rst code in {source} is malformed')

    if not target:
        print(body)
        return True

    p = Path(target)
    written = 'rewritten' if p.exists() else 'written'
    if p.exists() and p.read_text().splitlines()[:-1] == lines[:-1]:
        print(f'{target} unchanged', file=sys.stderr)
        return False

    with safer.writer(target) as fp:
        fp.write(body)

    print(f'{target} {written}', file=sys.stderr)
    return True
예제 #12
0
 def test_read(self):
     with TemporaryDirectory() as td:
         filename = td + '/test.txt'
         write_text(filename, 'hello')
         with safer.writer(filename, 'r+') as fp:
             assert fp.read() == 'hello'
예제 #13
0
 def test_simple(self):
     with TemporaryDirectory() as td:
         filename = td + '/test.txt'
         with safer.writer(filename) as fp:
             fp.write('hello')
         assert read_text(filename) == 'hello'
예제 #14
0
    def test_int_filename(self):
        with self.assertRaises(IOError) as m:
            with safer.writer(1) as fp:
                fp.write('hello')

        assert m.exception.args[0] == '`file` argument must be a string'
예제 #15
0
 async def record_to(self, target=None, cast=None):
     await self.record(cast)
     with safer.writer(target) as fp:
         self.cast.write(fp)