[Django] #29412: django.utils.text.slugify / SafeString

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[Django] #29412: django.utils.text.slugify / SafeString

Django
#29412: django.utils.text.slugify / SafeString
-----------------------------------------+------------------------
               Reporter:  Andreas Pelme  |          Owner:  nobody
                   Type:  Uncategorized  |         Status:  new
              Component:  Utilities      |        Version:  2.0
               Severity:  Normal         |       Keywords:
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+------------------------
 https://github.com/django/django/commit/ccfd1295f986cdf628d774937d0b38a14584721f
 changed `SafeString.__str__` to return itself rather than a native string.

 This works fine in most places. However, interning (`sys.intern`) a
 `SafeString` does not work, it needs to be converted to a regular string
 first.

 I use slugify to generate file names and passing it on to pathlib.Path.
 Path interns strings and this breaks:

 {{{
 >>> from django.utils.text import slugify
 >>> import pathlib
 >>> pathlib.Path(slugify('foo'))
 Traceback (most recent call last):
   File "<input>", line 1, in <module>
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 999, in __new__
     self = cls._from_parts(args, init=False)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 656, in _from_parts
     drv, root, parts = self._parse_args(args)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 649, in _parse_args
     return cls._flavour.parse_parts(parts)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 69, in parse_parts
     parsed.append(sys.intern(rel))
 TypeError: can't intern SafeText
 >>> pathlib.Path(str(slugify('foo')))
 Traceback (most recent call last):
   File "<input>", line 1, in <module>
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 999, in __new__
     self = cls._from_parts(args, init=False)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 656, in _from_parts
     drv, root, parts = self._parse_args(args)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 649, in _parse_args
     return cls._flavour.parse_parts(parts)
   File
 "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/pathlib.py",
 line 69, in parse_parts
     parsed.append(sys.intern(rel))
 TypeError: can't intern SafeText
 >>> pathlib.Path(slugify('foo') + '') # workaround
 PosixPath('foo')

 }}}

 The only way to work around this is to use some kind of string operation
 that will turn it into a native string but that feels like a workaround.

 Maybe the problem is not SafeString but rather that
 `django.utils.text.slugify` that does return a SafeString instead of a
 regular string? The builtin slugify filter could still return a safe
 string?

--
Ticket URL: <https://code.djangoproject.com/ticket/29412>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

--
You received this message because you are subscribed to the Google Groups "Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/048.1cd96bbd57e860ebcd8608aabd5b35b9%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: [Django] #29412: django.utils.text.slugify / SafeString

Django
#29412: django.utils.text.slugify / SafeString
-------------------------------+------------------------------------
     Reporter:  Andreas Pelme  |                    Owner:  nobody
         Type:  Uncategorized  |                   Status:  new
    Component:  Utilities      |                  Version:  2.0
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Accepted
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+------------------------------------
Changes (by Claude Paroz):

 * stage:  Unreviewed => Accepted


Comment:

 I would also question the usage of `mark_safe` in `slugify`. I think the
 only backwards incompatibility would be that the result of adding a
 `SafeString` to a `slugify()` value would not be safe. I don't think it's
 much of an issue, if it's documented in release notes.

--
Ticket URL: <https://code.djangoproject.com/ticket/29412#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

--
You received this message because you are subscribed to the Google Groups "Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/063.cd560120b29c01ad39fda6d66a38d5e4%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: [Django] #29412: django.utils.text.slugify / SafeString

Django
In reply to this post by Django
#29412: django.utils.text.slugify / SafeString
-------------------------------+----------------------------------------
     Reporter:  Andreas Pelme  |                    Owner:  Windson yang
         Type:  Uncategorized  |                   Status:  assigned
    Component:  Utilities      |                  Version:  2.0
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Accepted
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+----------------------------------------
Changes (by Windson yang):

 * owner:  nobody => Windson yang
 * status:  new => assigned


--
Ticket URL: <https://code.djangoproject.com/ticket/29412#comment:2>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

--
You received this message because you are subscribed to the Google Groups "Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/063.2e7cc56cb220b3350952b438bf77bb80%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.
Reply | Threaded
Open this post in threaded view
|

Re: [Django] #29412: django.utils.text.slugify / SafeString

Django
In reply to this post by Django
#29412: django.utils.text.slugify / SafeString
-------------------------------+----------------------------------------
     Reporter:  Andreas Pelme  |                    Owner:  Windson yang
         Type:  Bug            |                   Status:  assigned
    Component:  Utilities      |                  Version:  2.0
     Severity:  Normal         |               Resolution:
     Keywords:                 |             Triage Stage:  Accepted
    Has patch:  0              |      Needs documentation:  0
  Needs tests:  0              |  Patch needs improvement:  0
Easy pickings:  0              |                    UI/UX:  0
-------------------------------+----------------------------------------
Changes (by Claude Paroz):

 * type:  Uncategorized => Bug


--
Ticket URL: <https://code.djangoproject.com/ticket/29412#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

--
You received this message because you are subscribed to the Google Groups "Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [hidden email].
To post to this group, send email to [hidden email].
To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/063.847b8bf16ff83374c89e04cdb7c6c3f3%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.