django-dbbackup icon indicating copy to clipboard operation
django-dbbackup copied to clipboard

Fixed TypeError when performing SQLite dbbackup

Open SidSidSid16 opened this issue 2 years ago • 3 comments

Fixed TypeError when performing SQLite dbbackup

Description

Running python manage.py dbbackup with an SQLite database returned TypeError: a bytes-like object is required, not 'str'.

(example-venv-3.10.5) sid@Sids-MacBook-Pro example % python manage.py dbbackup
TypeError: a bytes-like object is required, not 'str'
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/utils.py", line 120, in wrapper
    func(*args, **kwargs)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/management/commands/dbbackup.py", line 93, in handle
    self._save_new_backup(database)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/management/commands/dbbackup.py", line 106, in _save_new_backup
    outputfile = self.connector.create_dump()
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/db/sqlite.py", line 67, in create_dump
    self._write_dump(dump_file)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/db/sqlite.py", line 42, in _write_dump
    fileobj.write(f"{sql};\n")
  File "/Users/sid/.pyenv/versions/3.10.5/lib/python3.10/tempfile.py", line 771, in write
    rv = file.write(s)

Traceback (most recent call last):
  File "/Users/sid/pycharm-workspace/Example/example/manage.py", line 14, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
    utility.execute()
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/django/core/management/__init__.py", line 440, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/django/core/management/base.py", line 414, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/django/core/management/base.py", line 460, in execute
    output = self.handle(*args, **options)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/utils.py", line 120, in wrapper
    func(*args, **kwargs)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/management/commands/dbbackup.py", line 93, in handle
    self._save_new_backup(database)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/management/commands/dbbackup.py", line 106, in _save_new_backup
    outputfile = self.connector.create_dump()
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/db/sqlite.py", line 67, in create_dump
    self._write_dump(dump_file)
  File "/Users/sid/.pyenv/versions/3.10.5/envs/example-venv-3.10.5/lib/python3.10/site-packages/dbbackup/db/sqlite.py", line 42, in _write_dump
    fileobj.write(f"{sql};\n")
  File "/Users/sid/.pyenv/versions/3.10.5/lib/python3.10/tempfile.py", line 771, in write
    rv = file.write(s)
TypeError: a bytes-like object is required, not 'str'

Fix

By changing line 42 of the db/sqlite.py to write a UTF-8 encoded byte-type object, the backup is carried out without any errors.

SidSidSid16 avatar Aug 02 '22 14:08 SidSidSid16

Codecov Report

Merging #457 (1afd30d) into master (740d1e7) will not change coverage. The diff coverage is 0.00%.

@@           Coverage Diff           @@
##           master     #457   +/-   ##
=======================================
  Coverage   90.89%   90.89%           
=======================================
  Files          19       19           
  Lines         857      857           
  Branches      171      171           
=======================================
  Hits          779      779           
  Misses         42       42           
  Partials       36       36           
Impacted Files Coverage Δ
dbbackup/db/sqlite.py 89.28% <0.00%> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us.

codecov[bot] avatar Aug 02 '22 14:08 codecov[bot]

Can you add a test for this to prevent future regressions?

Archmonger avatar Aug 11 '22 04:08 Archmonger

Unfortunately, I'll be away for quite a lot of time. I'll be happy if someone else could add the tests.

SidSidSid16 avatar Aug 12 '22 16:08 SidSidSid16