On Sunday, April 25, 2021 at 12:52:24 PM UTC-7 lucas wrote:
> i'm sorry that doesn't make sense to me. nonetheless, i tried it with > different variable names, as: My thought was that using the same name was getting into type problems,. > > if 1: > ss = Storage(s='main') > ss.happy = 'yes happy' > print("1:::", ss, type(ss)) > s1 = repr(ss) > print("2:::", s1, type(s1)) > s2 = eval(s1) > print("3:::", s2, type(s2)) > > and i still got the same error: > 1::: <Storage {'s': 'main', 'happy': 'yes happy'}> <class > 'gluon.storage.Storage'> > 2::: <Storage {'s': 'main', 'happy': 'yes happy'}> <class 'str'> > Traceback (most recent call last): > File "./web2py_Storage.py", line 17, in <module> > s2 = eval(s1) > File "<string>", line 1 > <Storage {'s': 'main', 'happy': 'yes happy'}> > ^ > SyntaxError: invalid syntax > > there are so many convertors like to and from json, wouldn't it make sense > to and from string for storage? thank you again, lucas > Storage is a special version of dictionary (er, dict), and I don't recognize eval() as a way to initialize a dictionary. Storage is also pretty simple as a child of dict; gluon/storage.py isn't many lines, and Storage isn't the only class defined there. This does work: s1 = "<Storage {'s': 'main', 'happy': 'yes happy'}>" s2 = Storage() for sub in s1.replace("<Storage {'",'').replace("'}>",'').split(','): key, val = sub.replace("'", "").split(':') key = key.strip().rstrip() val = val.strip().rstrip() s2[key] = val print(s1, type(s1)) print(s2, type(s2)) Most of the mess in the code comes from de-formatting s1 > On Sunday, April 25, 2021 at 3:07:29 AM UTC-4 snide...@gmail.com wrote: > >> On Friday, April 23, 2021 at 9:43:19 AM UTC-7 lucas wrote: >> >>> hello one and all, >>> >>> i'd like to save and recover Storage instances to a text blob field in a >>> database. converting to the string is not hard to store it in the field. >>> recovering it back to a Storage instance is other issue, especially when >>> they're embedded Storage objects in the main Storage object. i've tried >>> from a script file not under a web2py application as: >>> >>> #!/usr/bin/env python3 >>> # -*- coding: utf-8 -*- >>> from sys import path, argv >>> path.append('/opt/web2py_apps/web2py/') >>> from gluon import * >>> from gluon.storage import Storage >>> if 1: >>> ss = Storage(s='main') >>> ss.happy = 'yes happy' >>> #ss.status = Storage(s1="1status1", s2="2status2") >>> print("1:::", ss, type(ss)) >>> ss = repr(ss) >>> print("2:::", ss, type(ss)) >>> #xglobal, xlocal = globals(), { } >>> #eval(ss, xglobal, xlocal) >>> ss = eval(ss) >>> print("3:::", ss, type(ss)) >>> exit() >>> >>> with output: >>> 1::: <Storage {'s': 'main', 'happy': 'yes happy'}> <class >>> 'gluon.storage.Storage'> >>> 2::: <Storage {'s': 'main', 'happy': 'yes happy'}> <class 'str'> >>> Traceback (most recent call last): >>> File "./web2py_Storage.py", line 17, in <module> >>> ss = eval(ss) >>> File "<string>", line 1 >>> <Storage {'s': 'main', 'happy': 'yes happy'}> >>> ^ >>> SyntaxError: invalid syntax >>> >>> any ideas how to make this work smoothly? thank you in advance, lucas >>> >> >> When you convert the storage to string (via the repr() call), don't use >> the same name. >> >> /dps >> >> >> > -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/bea6a851-8336-4ee6-904a-c3d3aba52ce6n%40googlegroups.com.