diff --git a/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_MtpktNo.jpg b/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_MtpktNo.jpg new file mode 100644 index 0000000..c3b552f Binary files /dev/null and b/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_MtpktNo.jpg differ diff --git a/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_YKJJNDz.jpg b/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_YKJJNDz.jpg new file mode 100644 index 0000000..c3b552f Binary files /dev/null and b/.media/tinywiki/img/fabian-bachli-jQAe44MEIXU-unsplash_YKJJNDz.jpg differ diff --git a/tinywiki/management/__init__.py b/tinywiki/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tinywiki/management/commands/__init__.py b/tinywiki/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tinywiki/management/commands/twexport.py b/tinywiki/management/commands/twexport.py new file mode 100644 index 0000000..9aa12ba --- /dev/null +++ b/tinywiki/management/commands/twexport.py @@ -0,0 +1,28 @@ +from django.core.management.base import BaseCommand, CommandError # noqa +from ...utils import export_wiki_content + + +class Command(BaseCommand): + help = "Export wiki content for an app" + + def add_arguments(self, parser): + parser.add_argument('app', nargs=1, type=str) + parser.add_argument('--file', type=str) + parser.add_argument('--prefix', type=str) + parser.add_argument('--page-version', type=int) + parser.add_argument('--image-version', type=int) + + def handle(self, *args, **options): + app = options['app'][0] + page_version = options['page_version'] + if page_version is None: + page_version = 0 + image_version = options['image_version'] + if image_version is None: + image_version = 0 + prefix = options['prefix'] + filename = options['file'] + if filename is None: + filename = f"{app}.tinyiki.zip" + + export_wiki_content(app, filename, prefix, page_version, image_version) diff --git a/tinywiki/migrations/0002_initial_data.py b/tinywiki/migrations/0002_initial_data.py index 88d4da4..58b1d7e 100644 --- a/tinywiki/migrations/0002_initial_data.py +++ b/tinywiki/migrations/0002_initial_data.py @@ -76,7 +76,7 @@ class Migration(migrations.Migration): data = json.loads(ifile.read()) version = data["version"] - app = data["app"] + app = 'tinywiki' prefix = data['prefix'] for slug, spec in data['pages'].items(): @@ -109,7 +109,7 @@ class Migration(migrations.Migration): images_data = json.loads(ifile.read()) version = images_data['version'] - app = images_data['app'] + app = 'tinywiki' prefix = images_data['prefix'] for slug, _spec in images_data['images'].items(): diff --git a/tinywiki/utils.py b/tinywiki/utils.py index 6314db9..f1e13e3 100644 --- a/tinywiki/utils.py +++ b/tinywiki/utils.py @@ -262,7 +262,7 @@ def import_builtin_images_from_zip(zip: str | Path, user=None): spec['slug'] = slug spec['user'] = user if user else get_tinywiki_default_user() - img = Imagwith zie(**spec) + img = Image(**spec) with zf.open(image_filename) as ifile: img_file = ImageFile(ifile, image_basename) img.image.save(image_basename, img_file) @@ -271,9 +271,10 @@ def import_builtin_images_from_zip(zip: str | Path, user=None): BuiltinImages.objects.create(app=app, prefix=prefix, version=version) return True + def export_wiki_content(app: str, filename, - prefix: str|None = None, + prefix: str | None = None, page_version: int = 0, image_version: int = 0) -> bool: prefix = prefix @@ -281,7 +282,7 @@ def export_wiki_content(app: str, bp = BuiltinPages.objects.get(app=app) if page_version < bp.version: page_version = bp.version + 1 - if prefix is None: + if not prefix: prefix = bp.prefix except BuiltinPages.DoesNotExist: bp = None @@ -290,16 +291,16 @@ def export_wiki_content(app: str, bi = BuiltinImages.objects.get(app=app) if image_version < bi.version: image_version = bi.version + 1 - if prefix is None: + if not prefix: prefix = bp.prefix except BuiltinImages.DoesNotExist: bi = None if not prefix: - raise RuntimeError("No slug prefix! Can not export!", file=sys.stderr) + raise RuntimeError("No slug prefix! Can not export!") pages = Page.objects.filter(slug__startswith=prefix) - images = Image.objects.filter(slug__statrswith=prefix) + images = Image.objects.filter(slug__startswith=prefix) if not pages and not images: return False @@ -353,7 +354,7 @@ def export_wiki_content(app: str, 'description': i.description, } zf.write(i.image.path, arcname) - zf.writestr(images.json, json.dumps(images_data, ensure_ascii=False, indent=4)) + zf.writestr('images.json', json.dumps(images_data, ensure_ascii=False, indent=4)) if bi: bi.version = image_version bi.save()