so, i did a lot of digging and experimenting.  it came down to adding this 
line:

    response.meta.keywords = ""

so, i'm guessing instantiating keywords as a string forced it to be of type 
string.  and i confirmed with the final html in the browser and verified it 
was outputting the string of keywords and it is.

so, in conclusion, i think there is a bug in 2.20.4 of web2py and that a 
line of code should be added to instantiate the response.meta.keywords = "" 
to force it to type string.

On Thursday, September 3, 2020 at 8:45:51 AM UTC-4 villas wrote:

> If necessary,  update pydal
> Explanation:  It sounds like an instance of iteritems is not being 
> converted to python 3 - I think that happens in pydal._compat.py.
>
> If that is not the problem, continue...
>
> Check value of:  type(c.keywords)
> Check value of:  print(list(c.keywords))
>
> If  type(c.keywords)  is map, then surely this should work:
> response.meta.keywords =  ', '.join( list( c.keywords)  )  
>
> My idea would be to convert c.keywords to a simple string,  then 
> concatenate it to response.meta.keywords afterwards. 
>
> General info:   response.meta is a Storage object which is really just a 
> special web2py dict.  
> In other words,  this:  response.meta.keywords = 'my key word string' 
> would be equivalent to this:  response.meta['keywords'] = 'my key word 
> string' 
>
>
>
>
>
> On Thursday, 3 September 2020 at 12:14:45 UTC+1 lucas wrote:
>
>> ok, i've tried what you suggested but on response.meta.keywords:
>>
>>         list(response.meta.keywords).append(', '+c.keywords if c.keywords 
>> else "")
>>
>> which does not except out, but when i view the final html code in the 
>> browser, web2py still returns:
>>
>> <meta name="keywords" content="<map object at 0x7f42e140f9d0>">
>>
>> on the new centos 8.2 server.  BUT on the old centos 7.6 it returns the 
>> proper string of keywords.
>>
>> On Thursday, September 3, 2020 at 6:52:07 AM UTC-4 lucas wrote:
>>
>>> maybe i didn't explain what happened here.  i've been running web2py on 
>>> a centos 7.6 server with python 2.7.5.  i created a brand new server with 
>>> centos 8.2 with python 3.8.0.  both servers are running web2py 2.20.4. 
>>>  when i copy the application code from the centos 7.6 to the new centos 8.2 
>>> and run the code the application excepts out on the response.meta.keywords 
>>> = "some string" because its of <type 'map'> whereas on the centos 7.6 is of 
>>> <type 'list'> where the += "some string" appends to the list.
>>>
>>> it doesn't make sense because web2py is the same version on both servers 
>>> and for the object to change type so much is confusing.  and map isn't a 
>>> real thing in python because when i read about it, it always points to type 
>>> dict.
>>>
>>> On Wednesday, September 2, 2020 at 10:58:00 PM UTC-4 lucas wrote:
>>>
>>>>
>>>> no, i tried all those tests.  when i simply do return 
>>>> BODY(type(response.meta.keywords)) it returns 'map'.
>>>> On Wednesday, September 2, 2020 at 7:07:13 PM UTC-4 villas wrote:
>>>>
>>>>> I may have an older version,  but I imagine that 
>>>>> response.meta.keywords is still just a string.
>>>>> It may be  c.keywords  is type map?
>>>>> I think type map would be an iterator which you can convert to a list.
>>>>> Once you've used it,  it's gone.
>>>>>
>>>>> So, did you try something like on e of these?:  
>>>>> response.meta.keywords =  ', '.join( c.keyword) )  # if it's a list
>>>>> or
>>>>> response.meta.keywords =  ', '.join( list( c.keywords)  )  # convert 
>>>>> map to a list
>>>>> or 
>>>>> response.meta.keywords =  ', '.join(  [ i[0] for i in 
>>>>> list(c.keyword)] )  # it may be a list of lists
>>>>>
>>>>> Sorry, but as you can see,  my motto is simply 'try everything until 
>>>>> it works'!
>>>>> You may wish to read up about the map function and iterators if this 
>>>>> is a new concept.
>>>>>
>>>>>
>>>>> On Wednesday, 2 September 2020 at 16:16:09 UTC+1 lucas wrote:
>>>>>
>>>>>> very simply, i'm trying to add keywords of type string to the 
>>>>>> response.meta.keywords, which used to be of type string and now its of 
>>>>>> type 
>>>>>> map, which exceptions out as above.
>>>>>>
>>>>>> i've also tried appending to the list like 
>>>>>> "response.meta.keywords.append("some string here")" and I've tried 
>>>>>> treating 
>>>>>> like a dictionary like, "response.meta.keywords['variable name'] = 
>>>>>> "keyword 
>>>>>> string"" and both blew up with an exception also.  very strange change 
>>>>>> of 
>>>>>> response.meta.keywords.
>>>>>>
>>>>>> On Wednesday, September 2, 2020 at 10:39:37 AM UTC-4 villas wrote:
>>>>>>
>>>>>>> I'm not sure what you are doing exactly but you seem to have created 
>>>>>>> a map iterator.  Maybe you could convert that to a list?  You might be 
>>>>>>> able 
>>>>>>> to work with it more easily.  Something like this:   
>>>>>>> list( response.meta.keywords )
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wednesday, 2 September 2020 at 12:52:27 UTC+1 lucas wrote:
>>>>>>>
>>>>>>>> in fact, when i inspect the head of the final html in the browser, 
>>>>>>>> w2p doesn't return a string at all, in fact it returns a reference to 
>>>>>>>> an 
>>>>>>>> object:
>>>>>>>>
>>>>>>>> <meta name="keywords" content="<map object at 0x7f693a6a98e0>">
>>>>>>>>
>>>>>>>> On Tuesday, September 1, 2020 at 10:03:28 PM UTC-4 lucas wrote:
>>>>>>>>
>>>>>>>>> hello one and all,
>>>>>>>>>
>>>>>>>>> its been a while since i've been on here.  that is a good sign for 
>>>>>>>>> my sites have been working great.  love python and web2py.  ok, so, 
>>>>>>>>> i'm 
>>>>>>>>> slowing porting to python 3.8 from 2.7.  still constant on web2py 
>>>>>>>>> 2.20.4. 
>>>>>>>>>  do i had some code under a controller that looks like:
>>>>>>>>>
>>>>>>>>> response.meta.keywords += (', '+c.keywords if c.keywords else "")
>>>>>>>>>
>>>>>>>>> and it errors saying that "TypeError(unsupported operand type(s) 
>>>>>>>>> for +=: 'map' and 'str')".  after a bit of investigation i found 
>>>>>>>>> that response.meta.keywords is of type "map" instead of it used to 
>>>>>>>>> being a 
>>>>>>>>> string.  i'm obviously concatenating strings above.
>>>>>>>>>
>>>>>>>>> what the heck is type "map" and how's that work with keywords?
>>>>>>>>>
>>>>>>>>> lucas
>>>>>>>>>
>>>>>>>>

-- 
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/3221f92d-7f6b-4371-bb6b-f8c129aa84b6n%40googlegroups.com.

Reply via email to