Management commands to help backup and restore your project database and media files

Overview

Django Database Backup

Documentation Status https://coveralls.io/repos/django-dbbackup/django-dbbackup/badge.svg?branch=master&service=github Code Health

This Django application provides management commands to help backup and restore your project database and media files with various storages such as Amazon S3, Dropbox, local file storage or any Django storage.

It is made for:

  • Ensure your backup with GPG signature and encryption
  • Archive with compression
  • Deal easily with remote archiving
  • Great to keep your development database up to date.
  • Use Crontab or Celery to setup automated backups.

Docs

See our offical documentation at Read The Docs.

Why use DBBackup

This software doesn't reinvent the wheel, in few words it is a pipe between your Django project and your backup storage. It tries to use the traditional dump & restore mechanisms, apply compression and/or encryption and use the storage system you desire.

It gives a simple interface to backup and restore your database or media files.

Management Commands

dbbackup

Backup your database to the specified storage. By default this will backup all databases specified in your settings.py file and will not delete any old backups. You can optionally specify a server name to be included in the backup filename.

Usage: ./manage.py dbbackup [options]

Options:
  --noinput             Tells Django to NOT prompt the user for input of any
                        kind.
  -q, --quiet           Tells Django to NOT output other text than errors.
  -c, --clean           Clean up old backup files
  -d DATABASE, --database=DATABASE
                        Database to backup (default: everything)
  -s SERVERNAME, --servername=SERVERNAME
                        Specify server name to include in backup filename
  -z, --compress        Compress the backup files
  -e, --encrypt         Encrypt the backup files
  -o OUTPUT_FILENAME, --output-filename=OUTPUT_FILENAME
                        Specify filename on storage
  -O OUTPUT_PATH, --output-path=OUTPUT_PATH
                        Specify where to store on local filesystem
  -x EXCLUDE_TABLES, --exclude-tables=EXCLUDE_TABLES
                        Exclude tables data from backup (-x 'public.table1, public.table2')

dbrestore

Restore your database from the specified storage. By default this will lookup the latest backup and restore from that. You may optionally specify a servername if you you want to backup a database image that was created from a different server. You may also specify an explicit local file to backup from.

Usage: ./manage.py dbrestore [options]

Options:
  --noinput             Tells Django to NOT prompt the user for input of any
                        kind.
  -d DATABASE, --database=DATABASE
                        Database to restore
  -i INPUT_FILENAME, --input-filename=INPUT_FILENAME
                        Specify filename to backup from
  -I INPUT_PATH, --input-path=INPUT_PATH
                        Specify path on local filesystem to backup from
  -s SERVERNAME, --servername=SERVERNAME
                        Use a different servername backup
  -c, --decrypt         Decrypt data before restoring
  -p PASSPHRASE, --passphrase=PASSPHRASE
                        Passphrase for decrypt file
  -z, --uncompress      Uncompress gzip data before restoring

mediabackup

Backup media files by get them one by one, include in a TAR file.

Usage: ./manage.py mediabackup [options]

Options:
  --noinput             Tells Django to NOT prompt the user for input of any
                        kind.
  -q, --quiet           Tells Django to NOT output other text than errors.
  -c, --clean           Clean up old backup files
  -s SERVERNAME, --servername=SERVERNAME
                        Specify server name to include in backup filename
  -z, --compress        Compress the archive
  -e, --encrypt         Encrypt the backup files
  -o OUTPUT_FILENAME, --output-filename=OUTPUT_FILENAME
                        Specify filename on storage
  -O OUTPUT_PATH, --output-path=OUTPUT_PATH
                        Specify where to store on local filesystem

mediarestore

Restore media files from storage backup to your media storage.

Usage: ./manage.py mediarestore [options]

Options:
  --noinput             Tells Django to NOT prompt the user for input of any
                        kind.
  -q, --quiet           Tells Django to NOT output other text than errors.
  -i INPUT_FILENAME, --input-filename=INPUT_FILENAME
                        Specify filename to backup from
  -I INPUT_PATH, --input-path=INPUT_PATH
                        Specify path on local filesystem to backup from
  -e, --decrypt         Decrypt data before restoring
  -p PASSPHRASE, --passphrase=PASSPHRASE
                        Passphrase for decrypt file
  -z, --uncompress      Uncompress gzip data before restoring
  -r, --replace         Replace existing files

Contributing

All contribution are very welcomed, propositions, problems, bugs and enhancement are tracked with GitHub issues system and patch are submitted via pull requests.

We use Travis coupled with Coveralls as continious integration tools.

https://ga-beacon.appspot.com/UA-87461-7/django-dbbackup/home

Tests

Tests are stored in dbbackup.tests and for run them you must launch:

python runtests.py

In fact, runtests.py acts as a manage.py file and all Django command are available. So you could launch:

python runtests.py shell

For get a Python shell configured with the test project. Also all test command options are available and usable for run only some chosen tests. See Django test command documentation for more informations about it.

There are even functional tests:

./functional.sh

See documentation for details about

To run the tests across all supported versions of Django and Python, you can use Tox. Firstly install Tox:

pip install tox

To run the tests just use the command tox in the command line. If you want to run the tests against just one specific test environment you can run tox -e <testenv>. For example, to run the tests with Python3.3 and Django1.9 you would run:

tox -e py3.3-django1.9

The available test environments can be found in tox.ini.

Comments
  • Refactor to remove tight coupling with Django??

    Refactor to remove tight coupling with Django??

    Feature Request

    I'm looking for a generic Python package for database backups that I can use on all projects (not just Django).

    I can't find anything suitable and I was wondering whether there may be any appetite to make django-dbbackup more loosely coupled to Django?

    Describe the solution you'd like

    I've not dug deep enough to know for sure whether this is sensible, but I think I'm suggesting decoupling BaseCommandDBConnector and BaseDbBackupCommand so that they can be used in plain Python or with other frameworks by using alternative base classes.

    opened by isedwards 1
  • HINT: Use DROP ... CASCADE to also remove linked objects. Partitioning table causing error?

    HINT: Use DROP ... CASCADE to also remove linked objects. Partitioning table causing error?

    Is there a solution for this error?

    I use architect 0.6.0 for table partitioning. betik_app_staff_workinghourmodel_y2022m05 table is a partition table.

    Error: public.betik_app_staff_workinghourmodel_y2022m05 table depends on public.betik_app_staff_workinghourmodel table object

    HINT: Use DROP ... CASCADE to also remove linked objects.

    Traceback (most recent call last):
    [email protected]    |   File "manage.py", line 22, in <module>
    [email protected]    |     main()
    [email protected]    |   File "manage.py", line 18, in main
    [email protected]    |     execute_from_command_line(sys.argv)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
    [email protected]    |     utility.execute()
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
    [email protected]    |     self.fetch_command(subcommand).run_from_argv(self.argv)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
    [email protected]    |     self.execute(*args, **cmd_options)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
    [email protected]    |     output = self.handle(*args, **options)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/management/commands/dbrestore.py", line 68, in handle
    [email protected]    |     self._restore_backup()
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/management/commands/dbrestore.py", line 118, in _restore_backup
    [email protected]    |     self.connector.restore_dump(input_file)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/db/base.py", line 105, in restore_dump
    [email protected]    |     return self._restore_dump(dump)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/db/postgresql.py", line 89, in _restore_dump
    [email protected]    |     return super()._restore_dump(dump)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/db/postgresql.py", line 64, in _restore_dump
    [email protected]    |     stdout, stderr = self.run_command(cmd, stdin=dump, env=self.restore_env)
    [email protected]    |   File "/usr/local/lib/python3.8/site-packages/dbbackup/db/base.py", line 171, in run_command
    [email protected]    |     raise exceptions.CommandConnectorError(
    [email protected]    | dbbackup.db.exceptions.CommandConnectorError: Error running:  psql --dbname=postgresql://postgres_user:[email protected]:5432/db --set ON_ERROR_STOP=on --single-transaction db
    [email protected]    | ERROR:  Unable to remove table "public.betik_app_staff_workinghourmodel" because other objects depend on it
    [email protected]    | DETAIL:  **public.betik_app_staff_workinghourmodel_y2022m05** table depends on **public.betik_app_staff_workinghourmodel** table object
    
    opened by lidyum 0
  • fix: restore tempfile created 0 B

    fix: restore tempfile created 0 B

    Type of PR (feature, enhancement, bug fix, etc.)

    Description

    File coming from external server like FTP are not well restored due to this error: Restore tempfile created 0 B

    I don't know if the fix is the good way to do it.

    Fixes #463

    opened by rsommerard 3
  • Restore tempfile created: 0 B

    Restore tempfile created: 0 B

    Bug Report

    Running the dbrestore command raise an error which is due to Restore tempfile created: 0 B.

    Describe the bug

    I use an FTP server as backup storage. Backup is store without issue on the FTP while the restore fail. If I download the file and run the command by filling the local path via the -I params it works well.

    File is not encrypted, not compressed.

    The command fail at: https://github.com/jazzband/django-dbbackup/blob/af443c5026a480fffd33c4bbb6b4b1981e6700cb/dbbackup/db/base.py#L157-L163

    And here is the traceback:

    Finding latest backup
    Restoring backup for database 'default' and server 'None'
    Restoring: default-me-myproject-2022-10-05-141541.psql.bin
    Restore tempfile created: 0 B
    Are you sure you want to continue? [Y/n] Y
    Traceback (most recent call last):
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/db/base.py", line 157, in run_command
        process = Popen(
      File "/usr/lib/python3.8/subprocess.py", line 808, in __init__
        errread, errwrite) = self._get_handles(stdin, stdout, stderr)
      File "/usr/lib/python3.8/subprocess.py", line 1477, in _get_handles
        p2cread = stdin.fileno()
    io.UnsupportedOperation: fileno
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/__main__.py", line 39, in <module>
        cli.main()
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 430, in main
        run()
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/adapter/../../debugpy/launcher/../../debugpy/../debugpy/server/cli.py", line 284, in run_file
        runpy.run_path(target, run_name="__main__")
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 321, in run_path
        return _run_module_code(code, init_globals, run_name,
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 135, in _run_module_code
        _run_code(code, mod_globals, init_globals,
      File "/home/me/.vscode/extensions/ms-python.python-2022.14.0/pythonFiles/lib/python/debugpy/_vendored/pydevd/_pydevd_bundle/pydevd_runpy.py", line 124, in _run_code
        exec(code, run_globals)
      File "/home/me/myproject/manage.py", line 25, in <module>
        execute_from_command_line(sys.argv)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 419, in execute_from_command_line
        utility.execute()
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 413, in execute
        self.fetch_command(subcommand).run_from_argv(self.argv)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 354, in run_from_argv
        self.execute(*args, **cmd_options)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 398, in execute
        output = self.handle(*args, **options)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/management/commands/dbrestore.py", line 68, in handle
        self._restore_backup()
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/management/commands/dbrestore.py", line 118, in _restore_backup
        self.connector.restore_dump(input_file)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/db/base.py", line 105, in restore_dump
        return self._restore_dump(dump)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/db/postgresql.py", line 124, in _restore_dump
        stdout, stderr = self.run_command(cmd, stdin=dump, env=self.restore_env)
      File "/home/me/myproject/.venv/lib/python3.8/site-packages/dbbackup/db/base.py", line 180, in run_command
        raise exceptions.CommandConnectorError(
    dbbackup.db.exceptions.CommandConnectorError: Error running:  pg_restore --dbname=postgresql://postgres:postgre[email protected]:30032/postgres --single-transaction --clean 
    fileno
    

    To Reproduce

    1. Run a local FTP server docker run -e FTP_USER_NAME=foo -e FTP_USER_PASS=pass -e FTP_USER_HOME=/home/foo -p 21:21 -p 30000-30009:30000-30009 -d stilliard/pure-ftpd
    2. Add the configuration
    DBBACKUP_CONNECTORS = {
        "default": {"CONNECTOR": "dbbackup.db.postgresql.PgDumpBinaryConnector"}
    }
    DBBACKUP_STORAGE = "storages.backends.ftp.FTPStorage"
    DBBACKUP_STORAGE_OPTIONS = {"location": "ftp://foo:[email protected]:21"}
    
    1. Backup the db: python manage.py dbbackup
    2. Restore: python manage.py dbrestore

    Versions

    • django-dbbackup==4.0.2

    • django-storages==1.13.1

    • Django==3.2.7

    • Python: 3.8

    • OS: Ubuntu 22.04.1 LTS x86_64

    Misc

    The mediarestore command works with the same params (no compression, not encrypted)

    opened by rsommerard 1
  • Fixed TypeError when performing SQLite dbbackup

    Fixed TypeError when performing SQLite dbbackup

    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) [email protected] 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.

    opened by SidSidSid16 3
Releases(4.0.2)
  • 4.0.2(Sep 27, 2022)

    What's Changed

    • Docs: Fix removed host option, explain new options by @bittner in https://github.com/jazzband/django-dbbackup/pull/333
    • dbbackup.db.postgres typo fix by @LeeHanYeong in https://github.com/jazzband/django-dbbackup/pull/341
    • Replace ugettext_lazy with gettext_lazy by @sumanthratna in https://github.com/jazzband/django-dbbackup/pull/342
    • Fix broken link by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/349
    • Remove base_url in docs as it's not used by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/348
    • Update commands.rst to add missing command by @sumit4613 in https://github.com/jazzband/django-dbbackup/pull/337
    • Add changelog by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/351
    • Add documentation for django-storage by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/352
    • Fix headings for changelog by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/354
    • Changed logging settings from settings.py to late init by @asaf-kali in https://github.com/jazzband/django-dbbackup/pull/332
    • Drop django 1.11 and python 2.7 by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/353
    • Fix authentication error when postgres is password protected by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/361
    • using exclude-table-data instead by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/363
    • Add some issue templates by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/366
    • Replace travis with github actions by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/368
    • 'six' package dependency removed by @jerinpetergeorge in https://github.com/jazzband/django-dbbackup/pull/371
    • Add support for exclude tables data in the command interface by @KessoumML in https://github.com/jazzband/django-dbbackup/pull/375
    • Make the binary connector the default by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/339
    • Env password is no longer used since #361 by @jonathan-s in https://github.com/jazzband/django-dbbackup/pull/362
    • auth source added in mongodb. authentication issue fixed with mongodb… by @Ajaysainisd in https://github.com/jazzband/django-dbbackup/pull/379
    • Add support for Python 3.9-3.10 and Django 3.2 by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/401
    • Update CHANGELOG by @sumanthratna in https://github.com/jazzband/django-dbbackup/pull/376
    • Clean up README by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/407
    • Add support for Django 4.0 by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/408
    • Update changelog for PRs merged since 3.3.0 release by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/410
    • Include long description in package metadata by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/411
    • Add build environment by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/412
    • Fix RemovedInDjango41Warning related to default_app_config by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/413
    • Release 4.0.0b0 by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/414
    • Fix GitHub Actions configuration by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/419
    • Enable functional tests in CI by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/420
    • Update settings.py comment by @aaronvarghese in https://github.com/jazzband/django-dbbackup/pull/427
    • Jazzband transfer tasks by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/418
    • Add Jazzband contributing guidelines by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/435
    • Create release CI by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/436
    • Fix docs build and URLs by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/437
    • Refactoring and tooling by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/438
    • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-dbbackup/pull/439
    • Include package data to fix docs and pypi by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/440
    • Set package as not zip_safe by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/441
    • Fix manifest warning by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/442
    • Move VERSION source directory by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/443
    • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-dbbackup/pull/444
    • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-dbbackup/pull/446
    • Correct spelling mistakes by @EdwardBetts in https://github.com/jazzband/django-dbbackup/pull/447
    • Correct grammar in Docs and ReadMe by @millerthegorilla in https://github.com/jazzband/django-dbbackup/pull/448
    • fix GPG manual anchor and typo by @millerthegorilla in https://github.com/jazzband/django-dbbackup/pull/449
    • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-dbbackup/pull/450
    • [pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/jazzband/django-dbbackup/pull/451
    • v4.0.1 by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/453
    • support for prometheus wrapped dbs by @tsundokum in https://github.com/jazzband/django-dbbackup/pull/455
    • Backup of SQLite fail if there are Virtual Tables (e.g. FTS tables). by @xbello in https://github.com/jazzband/django-dbbackup/pull/458
    • Closes #460: python-gnupg version increase breaks unencrypt_file func… by @chambersh1129 in https://github.com/jazzband/django-dbbackup/pull/461
    • v4.0.2 by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/462

    New Contributors

    • @bittner made their first contribution in https://github.com/jazzband/django-dbbackup/pull/333
    • @LeeHanYeong made their first contribution in https://github.com/jazzband/django-dbbackup/pull/341
    • @sumanthratna made their first contribution in https://github.com/jazzband/django-dbbackup/pull/342
    • @jonathan-s made their first contribution in https://github.com/jazzband/django-dbbackup/pull/349
    • @sumit4613 made their first contribution in https://github.com/jazzband/django-dbbackup/pull/337
    • @asaf-kali made their first contribution in https://github.com/jazzband/django-dbbackup/pull/332
    • @jerinpetergeorge made their first contribution in https://github.com/jazzband/django-dbbackup/pull/371
    • @KessoumML made their first contribution in https://github.com/jazzband/django-dbbackup/pull/375
    • @Ajaysainisd made their first contribution in https://github.com/jazzband/django-dbbackup/pull/379
    • @johnthagen made their first contribution in https://github.com/jazzband/django-dbbackup/pull/401
    • @aaronvarghese made their first contribution in https://github.com/jazzband/django-dbbackup/pull/427
    • @Archmonger made their first contribution in https://github.com/jazzband/django-dbbackup/pull/418
    • @pre-commit-ci made their first contribution in https://github.com/jazzband/django-dbbackup/pull/439
    • @EdwardBetts made their first contribution in https://github.com/jazzband/django-dbbackup/pull/447
    • @millerthegorilla made their first contribution in https://github.com/jazzband/django-dbbackup/pull/448
    • @tsundokum made their first contribution in https://github.com/jazzband/django-dbbackup/pull/455
    • @xbello made their first contribution in https://github.com/jazzband/django-dbbackup/pull/458
    • @chambersh1129 made their first contribution in https://github.com/jazzband/django-dbbackup/pull/461

    Full Changelog: https://github.com/jazzband/django-dbbackup/compare/3.3.0...4.0.2

    Source code(tar.gz)
    Source code(zip)
  • 4.0.0rc1(May 10, 2022)

    What's Changed

    • As of this version, dbbackup is now within Jazzband! This version tests our Jazzband release CI, and adds miscellaneous refactoring/cleanup.
    • Fix GitHub Actions configuration by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/419
    • Enable functional tests in CI by @johnthagen in https://github.com/jazzband/django-dbbackup/pull/420
    • Update settings.py comment by @aaronvarghese in https://github.com/jazzband/django-dbbackup/pull/427
    • Jazzband transfer tasks by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/418
    • Refactoring and tooling by @Archmonger in https://github.com/jazzband/django-dbbackup/pull/438

    New Contributors

    • @aaronvarghese made their first contribution in https://github.com/jazzband/django-dbbackup/pull/427
    • @Archmonger made their first contribution in https://github.com/jazzband/django-dbbackup/pull/418

    Full Changelog: https://github.com/jazzband/django-dbbackup/compare/4.0.0b0...4.0.0rc1

    Source code(tar.gz)
    Source code(zip)
  • 4.0.0b0(Dec 19, 2021)

    What's Changed

    • Docs: Fix removed host option, explain new options by @bittner in https://github.com/django-dbbackup/django-dbbackup/pull/333
    • dbbackup.db.postgres typo fix by @LeeHanYeong in https://github.com/django-dbbackup/django-dbbackup/pull/341
    • Replace ugettext_lazy with gettext_lazy by @sumanthratna in https://github.com/django-dbbackup/django-dbbackup/pull/342
    • Fix broken link by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/349
    • Remove base_url in docs as it's not used by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/348
    • Update commands.rst to add missing command by @sumit4613 in https://github.com/django-dbbackup/django-dbbackup/pull/337
    • Add changelog by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/351
    • Add documentation for django-storage by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/352
    • Fix headings for changelog by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/354
    • Changed logging settings from settings.py to late init by @asaf-kali in https://github.com/django-dbbackup/django-dbbackup/pull/332
    • Drop django 1.11 and python 2.7 by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/353
    • Fix authentication error when postgres is password protected by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/361
    • using exclude-table-data instead by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/363
    • Add some issue templates by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/366
    • Replace travis with github actions by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/368
    • 'six' package dependency removed by @jerinpetergeorge in https://github.com/django-dbbackup/django-dbbackup/pull/371
    • Add support for exclude tables data in the command interface by @KessoumML in https://github.com/django-dbbackup/django-dbbackup/pull/375
    • Make the binary connector the default by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/339
    • Env password is no longer used since #361 by @jonathan-s in https://github.com/django-dbbackup/django-dbbackup/pull/362
    • auth source added in mongodb. authentication issue fixed with mongodb… by @Ajaysainisd in https://github.com/django-dbbackup/django-dbbackup/pull/379
    • Add support for Python 3.9-3.10 and Django 3.2 by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/401
    • Update CHANGELOG by @sumanthratna in https://github.com/django-dbbackup/django-dbbackup/pull/376
    • Clean up README by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/407
    • Add support for Django 4.0 by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/408
    • Update changelog for PRs merged since 3.3.0 release by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/410
    • Include long description in package metadata by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/411
    • Add build environment by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/412
    • Fix RemovedInDjango41Warning related to default_app_config by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/413
    • Release 4.0.0b0 by @johnthagen in https://github.com/django-dbbackup/django-dbbackup/pull/414

    New Contributors

    • @bittner made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/333
    • @LeeHanYeong made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/341
    • @sumanthratna made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/342
    • @jonathan-s made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/349
    • @sumit4613 made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/337
    • @asaf-kali made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/332
    • @jerinpetergeorge made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/371
    • @KessoumML made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/375
    • @Ajaysainisd made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/379
    • @johnthagen made their first contribution in https://github.com/django-dbbackup/django-dbbackup/pull/401

    Full Changelog: https://github.com/django-dbbackup/django-dbbackup/compare/3.3.0...4.0.0b0

    Source code(tar.gz)
    Source code(zip)
Container images for portable development environments

Docker Dev Spin up a container to develop from anywhere! To run, just: docker run -ti aghost7/nodejs-dev:boron tmux new Alternatively, if on Linux: p

Jonathan Boudreau 163 Dec 22, 2022
Tmux Based Dropdown Dashboard For Python

sextans It's a private configuration and an ongoing experiment while I use Archlinux. A simple drop down dashboard based on tmux. It includes followin

秋葉 4 Dec 22, 2021
🌈 Generate color palettes based on Neovim colorschemes.

Iris Iris is a Neovim plugin that generates a normalized color palette based on your colorscheme. It is named for the goddess Iris of Greek mythology,

N. G. Scheurich 45 Jul 28, 2022
Command-line program for organizing and managing ebook collections

Command-line program for organizing and managing ebook collections. It is a Python port from the original shell scripts ebook-tools

Raul 14 Nov 12, 2022
Analysis of a daily word game "Wordle"

Wordle Analysis of a daily word game "Wordle" https://www.powerlanguage.co.uk/wordle/ Description Worlde is a daily word game in which a player attemp

Bartek 1 Feb 07, 2022
A command line interface to interact with the Hypixel api allowing the user to get stats, leaderboards, etc

HyConsole is a way to get data on players and leaderboards from the Hypixel Minecraft server from the command line. Keep in mind I have no a

1 Feb 14, 2022
Simple Terminal Styling for Python

escape Escape is a very simple terminal styling library largely inspired by the excellent javascript chalk library. There are other terminal styling l

Syed Abbas 8 Sep 03, 2019
A simple CLI tool for converting logs from Poker Now games to other formats

🂡 Poker Now Log Converter 🂡 A command line utility for converting logs from Poker Now games to other formats. Introduction Poker Now is a free onlin

6 Dec 23, 2022
Play WORDLE game in your terminal.

Wordle TUI Play WORDLE game in your terminal. The game will be kept the same as the Web version. Prerequisites Python 3.7+ Linux/MacOS (Windows is not

Frost Ming 61 Oct 30, 2022
[WIP]An ani-cli like cli tool for movies and webseries

mov-cli A cli to browse and watch movies. Installation This project is a work in progress. However, you can try it out python git clone https://github

166 Dec 30, 2022
alternative cli util for update-alternatives

altb altb is a cli utility influenced by update-alternatives of ubuntu. Linked paths are added to $HOME/.local/bin according to XDG Base Directory Spe

Elran Shefer 8 Dec 07, 2022
This is a CLI utility that allows you to view RedFlagDeals.com on the command line.

RFD Description Motivation Installation Usage View Hot Deals View and Sort Hot Deals Search Advanced View Posts Shell Completion bash zsh Description

Dave G 8 Nov 29, 2022
Hack-All is a simple CLI tool that helps ethical-hackers to make a reverse connection without knowing the target device in use is it computer or phone

Hack-All is a simple CLI tool that helps ethical-hackers to make a reverse connection without knowing the target device in use is it computer

LightYagami17 5 Nov 22, 2022
Plumbum: Shell Combinators

Plumbum: Shell Combinators Ever wished the compactness of shell scripts be put into a real programming language? Say hello to Plumbum Shell Combinator

Tomer Filiba 2.5k Dec 28, 2022
YouCompleteMe: a code-completion engine for Vim

YouCompleteMe: a code-completion engine for Vim Help, Advice, Support Looking for help, advice or support? Having problems getting YCM to work? First

24.5k Jan 06, 2023
pypyr task-runner cli & api for automation pipelines.

pypyr task-runner cli & api for automation pipelines. Automate anything by combining commands, different scripts in different languages & applications into one pipeline process.

pypyr 471 Dec 15, 2022
Python CLI for accessing CSCI320 PDM Database

p320_14 Python CLI for accessing CSCI320 PDM Database Authors: Aidan Mellin Dan Skigen Jacob Auger Kyle Baptiste Before running the application for th

Aidan Mellin 1 Nov 23, 2021
A Command Line Calculator With Python

CalculadoraPY Usando no Termux apt install python3 apt install git pip3 install termcolor git clone https://github.com/kayke981/CalculadoraPY.git

kayake 5 Jan 30, 2022
Ralph is a command-line tool to fetch, extract, convert and push your tracking logs from various storage backends to your LRS or any other compatible storage or database backend.

Ralph is a command-line tool to fetch, extract, convert and push your tracking logs (aka learning events) from various storage backends to your

France Université Numérique 18 Jan 05, 2023
Lexeme - CLI to play a word-guessing game like Wordle

What is this? Python program to play a word-guessing game like Wordle, but… More addictive because you can play it over and over and over, not just on

Dan Lenski 6 Oct 26, 2022