qishibo/AnotherRedisDesktopManager · warning
Pickle is readonly now!
Error message
Pickle is readonly now!
What it means
Element UI toast deliberately returned by the Python pickle viewer's getContent() — the viewer is read-only by design. Python pickle payloads are arbitrary bytecode-driven object graphs; unserializing then re-serializing user edits safely is not feasible, so the component blocks the write path: getContent() always toasts 'Pickle is readonly now!' and returns false, which tells the parent viewer to abort the save. copyContent() still allows copying raw bytes.
Source
Thrown at src/components/viewers/ViewerPickle.vue:23
<script type="text/javascript">
import JsonEditor from '@/components/JsonEditor';
import { Parser } from 'pickleparser';
export default {
props: ['content'],
components: { JsonEditor },
computed: {
newContent() {
try {
return (new Parser()).parse(this.content);
} catch (e) {
return 'Pickle parsed failed!';
}
},
},
methods: {
getContent() {
this.$message.error('Pickle is readonly now!');
return false;
},
copyContent() {
return this.$refs.editor.getRawContent();
},
},
};
</script>
View on GitHub (pinned to c149855106)
Solutions
- Treat the pickle view as read-only — edit the value in your Python application instead
- If the value is actually JSON or msgpack, switch the viewer mode manually to a writable viewer before editing
- Delete and re-SET the key through the app/console with the new pickled bytes produced by Python
- If write support is required, the app cannot safely re-pickle arbitrary edits; keep the readonly contract
Defensive patterns
Strategy: validation
Validate before calling
// viewer contract: getContent() === false means 'not writable' const canWrite = viewer.getContent !== ViewerPickle.prototype.getContent;
Type guard
const isWritableViewer = (viewer) => typeof viewer.getContent === 'function' && viewer.isReadOnly !== true;
Prevention
- Hide the save button for read-only viewers instead of relying on the toast
- Encode edits on the producer side (Python pickle.dumps) and SET bytes via console
- If values need in-app editing, store JSON instead of pickle
When it happens
Trigger: Opening a key whose value the app identified as Python pickle (via pickletools-style detection), editing the decoded view, and clicking save/apply — getContent() unconditionally rejects; any attempt to write through this viewer hits the same wall, there is no code path that succeeds.
Common situations: Users of Python services (Django/celery sessions, scylla/redis-py caches) expecting to edit pickle values in place like JSON; double-clicking a value then pressing Ctrl+S in the editor.
Related errors
- Java unserialization is readonly now!
- Select a correct .proto file
- Zlib Gzip Parse Failed!
- Zlib Deflate Parse Failed!
- Zlib DeflateRaw Parse Failed!
AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22).
Data as JSON: /api/errors/d2ed51a52d5498e9.
Report an issue: GitHub.