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.

Solutions

  1. Treat the pickle view as read-only — edit the value in your Python application instead
  2. If the value is actually JSON or msgpack, switch the viewer mode manually to a writable viewer before editing
  3. Delete and re-SET the key through the app/console with the new pickled bytes produced by Python
  4. 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

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


AI-assisted analysis of qishibo/AnotherRedisDesktopManager@c149855106 (2026-08-22). Data as JSON: /api/errors/d2ed51a52d5498e9. Report an issue: GitHub.

Appendix: 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)