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.