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 [email protected] 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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/web2py/bea6a851-8336-4ee6-904a-c3d3aba52ce6n%40googlegroups.com.