Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Importing a project with linked components from backup produces broken components #8225

Closed
2 tasks done
Bubu opened this issue Oct 16, 2022 · 1 comment
Closed
2 tasks done
Assignees
Labels
bug Something is broken.
Milestone

Comments

@Bubu
Copy link
Contributor

Bubu commented Oct 16, 2022

Describe the issue

When importing a backup of a project which used linked components (weblate:// as repository) the import of the project goes into a broken state. None of the linked components can be accessed.

I've deployed a workaround which allowed re-saving the affected components (by changing the repo to something else and then back): https://codeberg.org/Codeberg-Infrastructure/weblate-docker/src/branch/main/patches/0002-try-to-work-around-import-error-with-linked-componen.patch

The root cause if most likely that https://github.com/WeblateOrg/weblate/blob/main/weblate/trans/models/component.py#L207 returns None at the initial import as the referenced project doesn't exist yet. I don't know what the best way to fix this properly is.

I already tried

  • I've read and searched the documentation.
  • I've searched for similar issues in this repository.

Steps to reproduce the behavior

  1. Import the following project (exported from https://weblate.bubu1.eu/projects/currencies/): 1665868268.zip
  2. Browse to one of the secondary components (i.e. Android app – Settings Activity)
  3. See 500 error

Expected behavior

All components are imported correctly.

If it has been wrongly imported before it should ideally be fixed without user-interaction.

Screenshots

No response

Exception traceback

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python3.10/site-packages/django/views/decorators/cache.py", line 62, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/weblate/trans/views/basic.py", line 245, in show_component
    return render(
  File "/usr/local/lib/python3.10/site-packages/weblate/trans/util.py", line 237, in render
    return django_render(request, template, context, status=status)
  File "/usr/local/lib/python3.10/site-packages/django/shortcuts.py", line 24, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/usr/local/lib/python3.10/site-packages/django/template/backends/django.py", line 62, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 175, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 157, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 63, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/loader_tags.py", line 208, in render
    return template.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 177, in render
    return self._render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 167, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 322, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 1005, in <listcomp>
    return SafeString("".join([node.render_annotated(context) for node in self]))
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 966, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 540, in render
    values = {key: val.resolve(context) for key, val in self.extra_context.items()}
  File "/usr/local/lib/python3.10/site-packages/django/template/defaulttags.py", line 540, in <dictcomp>
    values = {key: val.resolve(context) for key, val in self.extra_context.items()}
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 715, in resolve
    obj = self.var.resolve(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 847, in resolve
    value = self._resolve_lookup(context)
  File "/usr/local/lib/python3.10/site-packages/django/template/base.py", line 914, in _resolve_lookup
    current = current()
  File "/usr/local/lib/python3.10/site-packages/weblate/trans/models/component.py", line 166, in on_link_wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/weblate/trans/models/component.py", line 1123, in get_last_remote_commit
    return self.repository.get_revision_info(self.remote_revision)
  File "/usr/local/lib/python3.10/site-packages/django/utils/functional.py", line 57, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/usr/local/lib/python3.10/site-packages/weblate/trans/models/component.py", line 1114, in repository
    return self.linked_component.repository

Exception Type: AttributeError at /projects/currencies/android-app-preferences/
Exception Value: 'NoneType' object has no attribute 'repository'
Raised during: weblate.trans.views.basic.show_component

How do you run Weblate?

Docker container

Weblate versions

  • Weblate: 4.14.1
  • Django: 4.1.2
  • siphashc: 2.1
  • translate-toolkit: 3.7.3
  • lxml: 4.9.1
  • Pillow: 9.2.0
  • bleach: 5.0.1
  • python-dateutil: 2.8.2
  • social-auth-core: 4.3.0
  • social-auth-app-django: 5.0.0
  • django-crispy-forms: 1.14.0
  • oauthlib: 3.2.1
  • django-compressor: 4.1
  • djangorestframework: 3.13.1
  • django-filter: 22.1
  • django-appconf: 1.0.5
  • user-agents: 2.2.0
  • filelock: 3.8.0
  • rapidfuzz: 2.11.1
  • openpyxl: 3.0.10
  • celery: 5.2.7
  • kombu: 5.2.4
  • translation-finder: 2.14
  • weblate-language-data: 2022.7
  • html2text: 2020.1.16
  • pycairo: 1.21.0
  • pygobject: 3.42.2
  • diff-match-patch: 20200713
  • requests: 2.28.1
  • django-redis: 5.2.0
  • hiredis: 2.0.0
  • sentry_sdk: 1.9.10
  • Cython: 0.29.32
  • misaka: 2.1.1
  • GitPython: 3.1.29
  • borgbackup: 1.2.2
  • pyparsing: 3.0.9
  • pyahocorasick: 1.4.4
  • python-redis-lock: 3.7.0
  • charset-normalizer: 2.1.1
  • Python: 3.10.7
  • Git: 2.30.2
  • psycopg2: 2.9.4
  • psycopg2-binary: 2.9.4
  • phply: 1.2.5
  • ruamel.yaml: 0.17.21
  • tesserocr: 2.5.2
  • boto3: 1.24.91
  • zeep: 4.1.0
  • aeidon: 1.11
  • iniparse: 0.5
  • mysqlclient: 2.1.1
  • Mercurial: 6.2.3
  • git-svn: 2.30.2
  • git-review: 2.3.1
  • Redis server: 6.2.7
  • PostgreSQL server: 14.5
  • Database backends: django.db.backends.postgresql
  • Cache backends: default:RedisCache, avatar:FileBasedCache
  • Email setup: django.core.mail.backends.smtp.EmailBackend: codeberg.org
  • OS encoding: filesystem=utf-8, default=utf-8
  • Celery: redis://cache:6379/1, redis://cache:6379/1, regular
  • Platform: Linux 5.10.0-17-amd64 (x86_64)

Weblate deploy checks

SystemCheckError: System check identified some issues:

CRITICALS:
?: (weblate.E018) Failed to download avatar: 500 Server Error: Internal Server Error for url: https://codeberg.org/user/avatar/noreply@weblate.org/32
	HINT: https://docs.weblate.org/en/weblate-4.14.1/admin/optionals.html#avatars

INFOS:
?: (weblate.I021) Error collection is not set up, it is highly recommended for production use
	HINT: https://docs.weblate.org/en/weblate-4.14.1/admin/install.html#collecting-errors
?: (weblate.I028) Backups are not configured, it is highly recommended for production use
	HINT: https://docs.weblate.org/en/weblate-4.14.1/admin/backup.html

System check identified 3 issues (1 silenced).

(The avatar error is because of another patch: https://codeberg.org/Codeberg-Infrastructure/weblate-docker/src/branch/main/patches/0001-download-avatars-from-codeberg.org.patch)



### Additional context

_No response_
@nijel nijel self-assigned this Oct 25, 2022
@nijel nijel added the bug Something is broken. label Oct 25, 2022
@nijel nijel added this to the 4.14.2 milestone Oct 25, 2022
@nijel nijel closed this as completed in 15dba26 Oct 25, 2022
@github-actions
Copy link

Thank you for your report; the issue you have reported has just been fixed.

  • In case you see a problem with the fix, please comment on this issue.
  • In case you see a similar problem, please open a separate issue.
  • If you are happy with the outcome, don’t hesitate to support Weblate by making a donation.

Bubu pushed a commit to Bubu/weblate that referenced this issue Feb 17, 2023
- repository URL needs to be adjusted on project rename
- the linked_component attribute is only filled in on save()

Fixes WeblateOrg#8225
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something is broken.
Projects
None yet
Development

No branches or pull requests

2 participants