Check-in [8e8ad5dfeb]
Overview
| Comment: | Open json/config files in text mode |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | py3 |
| Files: | files | file ages | folders |
| SHA1: |
8e8ad5dfeb100c6bf34f5592f860baa5 |
| User & Date: | mario on 2014-04-11 02:54:16 |
| Other Links: | branch diff | manifest | tags |
Context
|
2014-04-11
| ||
| 22:22 | Fixed syntax error in deleted_streams diff check-in: 4b78a4eba1 user: mario tags: py3 | |
| 02:54 | Open json/config files in text mode check-in: 8e8ad5dfeb user: mario tags: py3 | |
| 02:53 | use compat2and3.urllib functions check-in: f56be1b41d user: mario tags: py3 | |
Changes
Modified config.py from [4880b97351] to [9c4bf2dcba].
| ︙ | ︙ | |||
121 122 123 124 125 126 127 |
if (not os.path.exists(self.dir)):
os.makedirs(self.dir)
# store some configuration list/dict into a file
def save(self, name="settings", data=None, gz=0, nice=0):
name = name + ".json"
| | | 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
if (not os.path.exists(self.dir)):
os.makedirs(self.dir)
# store some configuration list/dict into a file
def save(self, name="settings", data=None, gz=0, nice=0):
name = name + ".json"
if (data is None):
data = dict(self.__dict__) # ANOTHER WORKAROUND: typecast to plain dict(), else json filter_data sees it as object and str()s it
nice = 1
# check for subdir
if (name.find("/") > 0):
subdir = name[0:name.find("/")]
subdir = self.dir + "/" + subdir
if (not os.path.exists(subdir)):
|
| ︙ | ︙ | |||
152 153 154 155 156 157 158 |
# retrieve data from config file
def load(self, name):
name = name + ".json"
file = self.dir + "/" + name
try:
# .gz or normal file
if os.path.exists(file + ".gz"):
| | | | | 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# retrieve data from config file
def load(self, name):
name = name + ".json"
file = self.dir + "/" + name
try:
# .gz or normal file
if os.path.exists(file + ".gz"):
f = gzip.open(file + ".gz", "rt")
elif os.path.exists(file):
f = open(file, "rt")
else:
return # file not found
# decode
r = json.load(f)
f.close()
return r
except Exception as e:
print(dbg.ERR, "PSON parsing error (in "+name+")", e)
# recursive dict update
def update(self, with_new_data):
for key,value in with_new_data.items():
if type(value) == dict:
self[key].update(value)
|
| ︙ | ︙ |
Modified st2.py from [858158ce9f] to [767c1a69b3].
| ︙ | ︙ | |||
28 29 30 31 32 33 34 35 | # # """ project status """ # # The application runs mostly stable. The GUI interfaces are workable. # There haven't been any optimizations regarding memory usage and | > | < < < < < < < < | 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#
#
""" project status """
#
# The application runs mostly stable. The GUI interfaces are workable.
# It's supposed to run on Gtk2 and Gtk3. Python3 support is still WIP.
# There haven't been any optimizations regarding memory usage and
# performance. The current internal API is vastly undocumented.
#
# current bugs:
# - audio- and list-format support is not very robust / needs better API
# - not all keyboard shortcuts work
#
# features:
# - treeview lists are created from datamap[] structure and stream{} dicts
# - channel categories are built-in defaults (can be freshened up however)
# - config vars and cache data get stored as JSON in ~/.config/streamtuner2/
#
# missing:
|
| ︙ | ︙ | |||
64 65 66 67 68 69 70 | # to read the config data -> limited risk, since it's only local files # - HIGH RISK: no verification of downloaded favicon image files (ico/png), # as they are passed to gtk.gdk.Pixbuf (OTOH data pre-filtered by Google) # - MEDIUM: audio players / decoders are easily affected by buffer overflows # from corrupt mp3/stream data, and streamtuner2 executes them # - but since that's the purpose -> no workaround # | < < < < < | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # to read the config data -> limited risk, since it's only local files # - HIGH RISK: no verification of downloaded favicon image files (ico/png), # as they are passed to gtk.gdk.Pixbuf (OTOH data pre-filtered by Google) # - MEDIUM: audio players / decoders are easily affected by buffer overflows # from corrupt mp3/stream data, and streamtuner2 executes them # - but since that's the purpose -> no workaround # # standard modules import sys import os, os.path import re |
| ︙ | ︙ |