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

  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.