DedSec Project

05 Json Settings — DedSec Project

Ρυθμίσεις JSON: αυστηρές λογικές τιμές και όρια επικύρωσης Το συνοδευτικό settings.py φορτώνει αντικείμενο JSON σε UTF-8 και ελέγχει δύο υποχρεωτικές ρυθμίσεις: η γλώσσα πρέπει να είναι en…

Ρυθμίσεις JSON: αυστηρές λογικές τιμές και όρια επικύρωσης

Το συνοδευτικό settings.py φορτώνει αντικείμενο JSON σε UTF-8 και ελέγχει δύο υποχρεωτικές ρυθμίσεις: η γλώσσα πρέπει να είναι en ή gr και το autostart πραγματική λογική τιμή. Το false γίνεται False στην Python, ενώ ο αριθμός 1 είναι int και δεν επιτρέπεται ως υποκατάστατο του true. Έλεγξε τις ρυθμίσεις πριν τις εφαρμόσεις, ειδικά όταν επηρεάζουν την εκκίνηση. Η δοκιμή γράφει μόνο σε προσωρινό φάκελο.

Εκτελέσιμη δοκιμή συνοδευτικού script

Αποθήκευσε ως lab.py δίπλα στο συνοδευτικό script και εκτέλεσε python3 lab.py.

from pathlib import Path
from tempfile import TemporaryDirectory
from settings import load

with TemporaryDirectory() as d:
    path = Path(d) / "prefs.json"
    path.write_text('{"language":"gr","autostart":false}', encoding="utf-8")
    assert load(path) == {"language": "gr", "autostart": False}
    for invalid in (
        "[]",
        '{"language":"en","autostart":1}',
        '{"language":"xx","autostart":false}',
        "{oops}",
    ):
        path.write_text(invalid, encoding="utf-8")
        try:
            load(path)
            raise AssertionError("invalid settings accepted")
        except ValueError:
            pass
print("PASS: JSON settings validation")

Διάγνωση και περιορισμοί

Έγκυρη ελληνική ρύθμιση περνά. Πίνακας JSON αποτυγχάνει επειδή η ρίζα δεν είναι αντικείμενο, το autostart 1 απορρίπτεται στον αυστηρό έλεγχο bool, η γλώσσα xx δεν επιτρέπεται και το ελαττωματικό JSON αποτυγχάνει κατά την ανάλυση. Η JSONDecodeError είναι υποκλάση της ValueError, άρα μία δοκιμή καλύπτει σύνταξη και σχήμα, όμως ένα κανονικό CLI πρέπει να τα διακρίνει στα μηνύματα. Ο σημερινός loader δέχεται άγνωστα πεδία και ο αναλυτής JSON κρατά την τελευταία τιμή διπλού κλειδιού. Διαβάζει επίσης όλο το αρχείο χωρίς όριο μεγέθους. Εξέτασε απόρριψη διπλών κρίσιμων ρυθμίσεων, όριο byte πριν την ανάγνωση και απόκρυψη μυστικών αν προστεθούν, επειδή το CLI εμφανίζει το αντικείμενο.

Ασκήσεις επέκτασης

  1. Απόρριψε διπλά κλειδιά με json.loads(object_pairs_hook=...). 2. Όρισε κανόνα για άγνωστα πεδία. 3. Πρόσθεσε όριο μεγέθους και ξεχώρισε λάθη σύνταξης από λάθη σχήματος. 4. Μην εμφανίζεις μελλοντικά μυστικά στην έξοδο. Τεκμήριο: PASS και πίνακας αποδεκτών/απορριπτέων τύπων JSON.