コード例 #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
ファイル: test_safer.py プロジェクト: jayd2446/safer
    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
ファイル: test_safer.py プロジェクト: jayd2446/safer
 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
ファイル: test_safer.py プロジェクト: jayd2446/safer
    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
ファイル: test_safer.py プロジェクト: jayd2446/safer
    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
ファイル: test_safer.py プロジェクト: jayd2446/safer
    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
ファイル: test_safer.py プロジェクト: jayd2446/safer
 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
ファイル: test_safer.py プロジェクト: jayd2446/safer
 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
ファイル: test_safer.py プロジェクト: jayd2446/safer
    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
ファイル: cast_recorder.py プロジェクト: rec/scripta
 async def record_to(self, target=None, cast=None):
     await self.record(cast)
     with safer.writer(target) as fp:
         self.cast.write(fp)