def merge_upload( self, request, fileobj: BinaryIO, conflicts: str, author_name: Optional[str] = None, author_email: Optional[str] = None, method: str = "translate", fuzzy: str = "", ): """Top level handler for file uploads.""" from weblate.accounts.models import AuditLog # Optionally set authorship orig_user = None if author_email: from weblate.auth.models import User orig_user = request.user request.user, created = User.objects.get_or_create( email=author_email, defaults={ "username": author_email, "full_name": author_name or author_email, }, ) if created: AuditLog.objects.create( request.user, request, "autocreated", ) try: if method == "replace": return self.handle_replace(request, fileobj) if method == "source": return self.handle_source(request, fileobj) filecopy = fileobj.read() fileobj.close() # Strip possible UTF-8 BOM if filecopy[:3] == codecs.BOM_UTF8: filecopy = filecopy[3:] # Load backend file store = try_load( fileobj.name, filecopy, self.component.file_format_cls, self.component.template_store, ) # Check valid plural forms if hasattr(store.store, "parseheader"): header = store.store.parseheader() try: number, formula = Plural.parse_plural_forms(header["Plural-Forms"]) if not self.plural.same_plural(number, formula): raise PluralFormsMismatch() except (ValueError, KeyError): # Formula wrong or missing pass if method in ("translate", "fuzzy", "approve"): # Merge on units level with self.component.repository.lock: return self.merge_translations( request, store, conflicts, method, fuzzy ) elif method == "add": return self.handle_add_upload(request, store, fuzzy=fuzzy) # Add as sugestions return self.merge_suggestions(request, store, fuzzy) finally: if orig_user: request.user = orig_user
def merge_upload( self, request, fileobj, overwrite, author_name=None, author_email=None, method="translate", fuzzy="", ): """Top level handler for file uploads.""" # Optionally set authorship orig_user = None if author_email: from weblate.auth.models import User orig_user = request.user request.user = User.objects.get_or_create( email=author_email, defaults={ "username": author_email, "is_active": False, "full_name": author_name or author_email, }, )[0] if method == "replace": return self.handle_replace(request, fileobj) filecopy = fileobj.read() fileobj.close() # Strip possible UTF-8 BOM if filecopy[:3] == codecs.BOM_UTF8: filecopy = filecopy[3:] # Load backend file store = try_load( fileobj.name, filecopy, self.component.file_format_cls, self.component.template_store, ) # Check valid plural forms if hasattr(store.store, "parseheader"): header = store.store.parseheader() try: number, equation = Plural.parse_formula(header["Plural-Forms"]) if not self.plural.same_plural(number, equation): raise PluralFormsMismatch() except (ValueError, KeyError): # Formula wrong or missing pass try: if method in ("translate", "fuzzy", "approve"): # Merge on units level with self.component.repository.lock: return self.merge_translations(request, store, overwrite, method, fuzzy) # Add as sugestions return self.merge_suggestions(request, store, fuzzy) finally: if orig_user: request.user = orig_user