Georg Brandl ge...@python.org added the comment:
#3173 proposes an OS-independent strftime implementation.
--
resolution: - duplicate
status: open - closed
superseder: - external strftime for Python?
___
Python tracker rep...@bugs.python.org
Chris Rebert pyb...@rebertia.com added the comment:
(2) Target file doesn't exist
(4) No application is associated with the file type in question
I think that instead of mapping error codes to custom exceptions, which is
fragile and not trivial to maintain, we should just catch stderr and
Chris Rebert pyb...@rebertia.com added the comment:
The reason I'm not a fan is the fact that, with shell=True, you can use the
*executable* argument to Popen to select a non-default shell. At that point,
passing a list can make sense, even if it isn't useful for the default shell.
Modulo
Serhiy Storchaka storch...@gmail.com added the comment:
No, I do not think that any application will significantly speeded up.
In fact, it is not optimization, and getting rid of the apparent pessimization.
In addition to increasing the speed, memory fragmentation is reduced.
The patch has a
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset 0e1177499762 by Ned Deily in branch 'default':
Issue #13507: OS X installer builds now build liblzma for the new
http://hg.python.org/cpython/rev/0e1177499762
--
nosy: +python-dev
Ned Deily n...@acm.org added the comment:
Thanks for the patch. Applied to default for 3.3.
--
resolution: - fixed
status: open - closed
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue13507
Serhiy Storchaka storch...@gmail.com added the comment:
''.join(c if ord(c) 0x1 else escape(c) for c in s)
--
nosy: +storchaka
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14304
___
New submission from py.user port...@yandex.ru:
import re
re.search(r'(?=a){100,200}bc', 'abc', re.DEBUG)
max_repeat 100 200
assert -1
literal 97
literal 98
literal 99
_sre.SRE_Match object at 0xb7429f38
re.search(r'(?=a){100,200}bc', 'abc', re.DEBUG).group()
'bc'
I expected
New submission from py.user port...@yandex.ru:
http://docs.python.org/py3k/library/re.html
Note that patterns which start with positive lookbehind assertions will never
match at the beginning of the string being searched; you will most likely want
to use the search() function rather than the
New submission from py.user port...@yandex.ru:
http://docs.python.org/py3k/library/re.html
(?Pname...)
Similar to regular parentheses, but the substring matched by the group is
accessible within the rest of the regular expression via the symbolic group
name name. Group names must be valid
New submission from Ned Deily n...@acm.org:
It may also fail in other builds where the build directory is not the same as
the source directory. The problem is in setup.py function _decimal_ext which
fails to create an absolute path for the libmpdec include source directory.
Patch follows.
Changes by Ned Deily n...@acm.org:
--
resolution: - fixed
stage: - committed/rejected
status: open - closed
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14463
___
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset ac60138522fc by Ned Deily in branch 'default':
Issue #14463: Prevent _decimal.so compile failures in OS X installer builds.
http://hg.python.org/cpython/rev/ac60138522fc
--
nosy: +python-dev
Andrew Svetlov andrew.svet...@gmail.com added the comment:
After trying to make a patch I found what current test suite itself has calls
like (str, shell=False), (bytes, shell=True) and (['shell command'],
shell=True).
We can:
1. Implement Eric's suggestion with fixing/removing broken tests.
Antoine Pitrou pit...@free.fr added the comment:
But the sleep(0.1) forces a thread switch so I consider that still
cheating -- nobody in their right mind would consider calling sleep()
inside __hash__.
Well, cheating is fair game when trying to test borderline cases, isn't
it?
--
Andrew Svetlov andrew.svet...@gmail.com added the comment:
We can install signal handlers for everything what can stop process but I
prefer to pass IDLE pid to subintepreter and periodically check for prime
process existing.
--
___
Python tracker
Matt Joiner anacro...@gmail.com added the comment:
The patch attached, rejigs the TestCase inheritance in test.test_socket so that
tests run correctly using unittest discovery. Recent changes have made
test_queue, and test_threading run without similar fixes, so I don't think
fixes for those
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset 6ba569924986 by Stefan Krah in branch 'default':
Issue #14394: Use elaborate phrases that boil down to one to two orders
http://hg.python.org/cpython/rev/6ba569924986
--
nosy: +python-dev
Thomas Spura toms...@fedoraproject.org added the comment:
It might be good to add some documentation to the sqlite3 module and describe
that version_info is only the PYSQLITE_VERSION and not the version of the
sqlite library.
--
nosy: +tomspur
___
Stefan Krah stefan-use...@bytereef.org added the comment:
Leaving this open since a New in version 3.3 speed improvement note
in the docs would be useful.
--
title: missing links on performance claims of cdecimal - Add speed improvement
note to the decimal docs.
Matt Joiner anacro...@gmail.com added the comment:
Attached is a patch for test_concurrent_futures, similar to the patch for
test_socket.
--
Added file:
http://bugs.python.org/file25088/test_concurrent_futures-unittest-discoverability.patch
___
Stefan Krah stefan-use...@bytereef.org added the comment:
Should I contact the extension's author(s)/maintainer(s) and tell them about
this ordering requirement?
FWIW, it is the recommended way in the docs.
The Python build itself has been fixed. Does the http://code.google.com/p/apsw/
Changes by Jesús Cea Avión j...@jcea.es:
--
nosy: +jcea
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14419
___
___
Python-bugs-list mailing list
Yuval Greenfield ubershme...@gmail.com added the comment:
I found this comprehensive description of the '**' convention at
http://www.codeproject.com/Articles/2809/Recursive-patterned-File-Globbing that
can translate directly to unittests.
I'd like to fix the patch for these specs but should
New submission from Antoine Pitrou pit...@free.fr:
This is quite recent.
$ ./python -m test -R 3:2 test_xml_etree_c
[1/1] test_xml_etree_c
beginning 5 repetitions
12345
.
test_xml_etree_c leaked [-2, -2] references, sum=-4
--
assignee: eli.bendersky
components: Library (Lib)
Antoine Pitrou pit...@free.fr added the comment:
I found this comprehensive description of the '**' convention at
http://www.codeproject.com/Articles/2809/Recursive-patterned-File-Globbing
that can translate directly to unittests.
I'd like to fix the patch for these specs but should it be
Yuval Greenfield ubershme...@gmail.com added the comment:
I don't have a strong opinion on rglob vs glob so whichever way the majority
here thinks is fine by me.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue13968
Eli Bendersky eli...@gmail.com added the comment:
Thanks, I'll try to investigate this ASAP
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14464
___
Stefan Krah stefan-use...@bytereef.org added the comment:
OK, here's a version with a low switch interval. Of course it's also
contrived, but it works.
Generally I'd appreciate the RuntimeError, since it's a hint that
something needs to be rewritten in an application.
It might be a problem
Ernest N. Mamikonyan ernest.mamikon...@gmail.com added the comment:
Yes, it is incompatible. But that's because the current behavior is
incompatible with standard (getopt_long(3)) practice. Or perhaps, you
can add another option that implements the optional argument semantics
of GNU's
Antoine Pitrou pit...@free.fr added the comment:
OK, here's a version with a low switch interval. Of course it's also
contrived, but it works.
The drawback of using setswitchinterval() is that it makes the test less
reusable by other implementations (or perhaps it will succeed without
Stefan Behnel sco...@users.sourceforge.net added the comment:
This is now implemented in PyPy:
https://bitbucket.org/pypy/pypy/changeset/623bcea85df3
Are there any objections to applying the equivalent patch to CPython?
--
___
Python tracker
Serhiy Storchaka storch...@gmail.com added the comment:
For ** globbing see http://ant.apache.org/manual/dirtasks.html#patterns .
If we extend pattern syntax of templates, why not implement Perl, Tcl or Bash
extensions?
--
nosy: +storchaka
___
Antoine Pitrou pit...@free.fr added the comment:
The culprit is 0ca32013d77e.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14464
___
___
Antoine Pitrou pit...@free.fr added the comment:
This is totally outdated by the new Connection implementation in 3.3.
--
resolution: - out of date
stage: - committed/rejected
status: open - closed
superseder: - Parent process hanging in multiprocessing if children terminate
Yuval Greenfield ubershme...@gmail.com added the comment:
On Sun, Apr 1, 2012 at 4:42 PM, Serhiy Storchaka rep...@bugs.python.org wrote:
For ** globbing see http://ant.apache.org/manual/dirtasks.html#patterns
They mention that mypackage/test/ is interpreted as if it were
mypackage/test/** so
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset 03396c9ffe8c by Antoine Pitrou in branch '3.2':
Issue #13019: Fix potential reference leaks in bytearray.extend().
http://hg.python.org/cpython/rev/03396c9ffe8c
New changeset 015c546615ca by Antoine Pitrou in branch
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset d3a82a26c705 by Antoine Pitrou in branch '2.7':
Issue #13019: Fix potential reference leaks in bytearray.extend().
http://hg.python.org/cpython/rev/d3a82a26c705
--
___
Antoine Pitrou pit...@free.fr added the comment:
Thanks for the patch. Sorry it took so long to be committed...
--
nosy: +pitrou
resolution: - fixed
stage: - committed/rejected
status: open - closed
versions: +Python 2.7, Python 3.2, Python 3.3
___
R. David Murray rdmur...@bitdance.com added the comment:
Which just goes to show that using Popen correctly is not obvious, I suppose.
Given that adding these errors *would* break backward compatibility, there
would have to be a deprecation if it was done.
Personally I don't see the point in
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset c5cf48752d81 by Eli Bendersky in branch 'default':
Removing the test of Element that causes ref-leak in GC (issue #14464).
http://hg.python.org/cpython/rev/c5cf48752d81
--
nosy: +python-dev
Eli Bendersky eli...@gmail.com added the comment:
Re-opening, since GC collection of length-2 cycles cause refleaks (Issue
#14464).
For now the test was reverted in changeset c5cf48752d81 - it has to be put back
when this is fixed.
--
resolution: fixed -
stage: committed/rejected -
Eli Bendersky eli...@gmail.com added the comment:
For now the refcounts will be clean. Work on the problem will continue in its
original issue (#14065).
--
resolution: - duplicate
stage: needs patch - committed/rejected
status: open - closed
superseder: - Element should support
Popa Claudiu pcmantic...@gmail.com added the comment:
Here are the two diffs. Hope they are good this time.
--
Added file: http://bugs.python.org/file25090/connection.diff
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14151
Changes by Popa Claudiu pcmantic...@gmail.com:
Added file: http://bugs.python.org/file25091/test_multiprocessing.diff
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14151
___
New submission from Tshepang Lekhonkhobe tshep...@gmail.com:
I often miss lxml's pretty_print=True functionality. Can you implement
something similar.
--
components: Library (Lib)
messages: 157299
nosy: eli.bendersky, tshepang
priority: normal
severity: normal
status: open
title: add
Changes by Tshepang Lekhonkhobe tshep...@gmail.com:
--
title: add feature to prettify XML output - xml.etree.ElementTree: add feature
to prettify XML output
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14465
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset 273d7502ced1 by Antoine Pitrou in branch '3.2':
Issue #14151: Raise a ValueError, not a NameError, when trying to create
http://hg.python.org/cpython/rev/273d7502ced1
New changeset 42b29aea1c98 by Antoine Pitrou in
Antoine Pitrou pit...@free.fr added the comment:
Thank you!
For the record, the recommended workflow to produce patches is to use
Mercurial: see
http://docs.python.org/devguide/setup.html#getting-the-source-code
so that you only have to type e.g. hg diff to get a diff of all your local
Changes by Antoine Pitrou pit...@free.fr:
--
resolution: - fixed
stage: - committed/rejected
status: open - closed
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14151
___
New submission from Antoine Pitrou pit...@free.fr:
The devguide describes a mq-based approach (*) for generating patches, but it
seems nobody (almost) uses it. We should therefore replace that description
with a more traditional one (hg diff).
(*)
Changes by Antoine Pitrou pit...@free.fr:
--
nosy: +eric.araujo
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14466
___
___
Python-bugs-list
New submission from Antoine Pitrou pit...@free.fr:
The devguide is growing exotic documentation about e.g. how to install GNU
autoconf. I think this should be avoided, or relegated to the FAQ.
--
components: Devguide
messages: 157303
nosy: dmalcolm, eric.araujo, ezio.melotti, pitrou,
Antoine Pitrou pit...@free.fr added the comment:
Because calling exit() is the right way to end a process. For example,
it does the following:
- atexit()-registered finalizers are run
- stdio streams are flushed and closed (although it could probably
done by the interpreter)
- files
Éric Araujo mer...@netwok.org added the comment:
Agreed. The autoconf doc comes from #7997, which required a FAQ entry.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14467
___
Éric Araujo mer...@netwok.org added the comment:
asked for*
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14467
___
___
Python-bugs-list
Éric Araujo mer...@netwok.org added the comment:
Yes please. We already have text if we look at the history before
73e11f64a704; we only need to agree on recommending “uncommitted changes in a
clone” (which is okay to share patches but not for not ideal for more than one
person working on
Antoine Pitrou pit...@free.fr added the comment:
I, for one, use both uncommitted-changes and named branches; the
former is easiest, but the latter safer: if I screw up a merge in a
clone where I use a named branch, I can revert and retry the merge,
but if I screw up merging pulled changes
Ross Lagerwall rosslagerw...@gmail.com added the comment:
I'm happy to remove the bit about *installing* autoconf altogether.
Do you think the Autoconf section (about regenerating configure) should stay
where it is or be moved somewhere else?
--
Antoine Pitrou pit...@free.fr added the comment:
Do you think the Autoconf section (about regenerating configure)
should stay where it is or be moved somewhere else?
I think it's a fairly rare thing to do (regenerating configure), so
perhaps it can migrate to a FAQ entry.
(besides, I think
New submission from Éric Araujo mer...@netwok.org:
The devguide recommends using hg update to switch between branches in one
repository. This is only practical if you build Python in a custom
(sub)directory, otherwise you’d need to either do the configure-make-test dance
when merging/porting
shinta.nakayama shinta.nakay...@gmail.com added the comment:
Thank you Armaury.
Allowing your advice,I tried that code on other machine(Windows7 without
Antivirus).
But it was same result.
Windows says process cant access to file. that file is using other process..
And could not rotate the
R. David Murray rdmur...@bitdance.com added the comment:
Antoine: I don't think the point of this code is to come up with a unit (or
other) test for the behavior, but to try to determine empirically whether or
not this error is likely to be an issue in naive production code (whether it is
Roundup Robot devn...@psf.upfronthosting.co.za added the comment:
New changeset 27be97280cff by Ross Lagerwall in branch 'default':
Issue 14467: Simplify Autoconf section and move it to FAQ.
http://hg.python.org/devguide/rev/27be97280cff
--
nosy: +python-dev
Antoine Pitrou pit...@free.fr added the comment:
Antoine: I don't think the point of this code is to come up with a
unit (or other) test for the behavior, but to try to determine
empirically whether or not this error is likely to be an issue in
naive production code (whether it is existing
New submission from Serhiy Storchaka storch...@gmail.com:
Other resources links in the Python 3 documentation refer to the Python 2.7
online documentation. It is also strange that http://python.org/doc (for
example from issue tracker sidebar) refer to the Python 2.7 documentation.
--
Changes by R. David Murray rdmur...@bitdance.com:
--
type: - enhancement
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14465
___
___
Martin v. Löwis mar...@v.loewis.de added the comment:
Would you like to provide a patch?
--
nosy: +loewis
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14465
___
R. David Murray rdmur...@bitdance.com added the comment:
The FAQ link (and removing the new style class link, but I think there is
already an issue for that) is the only one I see that should be pointing to 3.x
that isn't.
python.org/doc and docs.python.org is intentionally the 2.7 docs for
Serhiy Storchaka storch...@gmail.com added the comment:
I think that it would be appropriate to start redirect (HTTP 302)
http://docs.python.org/something/ to the http://docs.python.org/2.7/something/.
Today, the situation is Vice versa.
--
___
Eli Bendersky eli...@gmail.com added the comment:
Tshepang,
Frankly, there are a lot of issues to solve in ElementTree (it hasn't been
given love in a long time...) and such features would be low priority, as I'm
not getting much help and am swamped already.
As Martin said, patches can go a
New submission from Andrew Svetlov andrew.svet...@gmail.com:
As Python 3.3 declare:
Windows 2000 and Windows platforms which set COMSPEC to command.com are no
longer supported due to maintenance burden.
We need to drop corresponding code from subprocess.
--
keywords: easy
messages:
Andrew Svetlov andrew.svet...@gmail.com added the comment:
BTW we need to drop win9x and win2000 support, see #14470
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue7839
___
Andrew Svetlov andrew.svet...@gmail.com added the comment:
I'm +1 for going though deprecation process for Popen args to make parameters
combination clean and obvious.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue7839
Antoine Pitrou pit...@free.fr added the comment:
Thank you for doing it :)
--
resolution: - fixed
stage: - committed/rejected
status: open - closed
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14467
Tshepang Lekhonkhobe tshep...@gmail.com added the comment:
Okay, I will try, even though C scares me.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14465
___
Changes by Andrew Svetlov andrew.svet...@gmail.com:
--
components: +Library (Lib), Windows
priority: normal - critical
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14470
___
Changes by Andrew Svetlov andrew.svet...@gmail.com:
--
title: Remove use of w9xopen in subporcess module - Remove using of w9xopen in
subporcess module
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14470
Kristján Valur Jónsson krist...@ccpgames.com added the comment:
I already included this fix in my socket share patch, see issue 14310.
I think this was a bug that should be checked in to all relevant branches. The
reason is this text from msdn documentation for WsaDuplicateSocket:
Both the
Ned Deily n...@acm.org added the comment:
No one uses it? I'm surprised. I do and it seems to me by far the easiest and
safest way to maintain patches in progress when there is constant churn.
--
nosy: +ned.deily
___
Python tracker
Changes by Ned Deily n...@acm.org:
--
nosy: +brian.curtin
title: Remove using of w9xopen in subporcess module - Remove using of w9xopen
in subprocess module
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14470
Kristján Valur Jónsson krist...@ccpgames.com added the comment:
Also, see this: http://support.microsoft.com/kb/179942/EN-US
applies to windows 2000 only, as far as I can tell, though. Don't know if we
still support that.
I have scoured the docs, but found yet no reason to _not_ use this
New submission from Kristján Valur Jónsson krist...@ccpgames.com:
I found this issue with code analyzer in VS2010.
The problem applies to all 3.x versions, but there is no corresponding winreg.c
file in 2.x.
Since I'm not sure of the maintenance state of the individual branches, I'm
creating
Changes by Kristján Valur Jónsson krist...@ccpgames.com:
--
title: Buffer oferrun in winreg.c - Buffer overrun in winreg.c
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14471
___
Raymond Hettinger raymond.hettin...@gmail.com added the comment:
Well, cheating is fair game when trying to test
borderline cases, isn't it?
It is fair game (and necessary) when it comes to
exposing bugs that are hard to reproduce.
I'm wary of the original RuntimeError patch because
* it
Raymond Hettinger raymond.hettin...@gmail.com added the comment:
The correct place for the note is in the optimizations section of whatsnew.
--
nosy: +rhettinger
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14394
Changes by Antoine Pitrou pit...@free.fr:
--
nosy: +loewis
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14471
___
___
Python-bugs-list mailing
Nick Coghlan ncogh...@gmail.com added the comment:
Everyone missed my other argument in favour of alternate constructor
methods: fixing the currently wrong default arguments.
There is no good reason to break working code when beginner confusion can
be better addressed by telling them to avoid
Nick Coghlan ncogh...@gmail.com added the comment:
A thought prompted by Raymond's comment: did we ever try just protecting
the retry as a recursive call? If we can stop the stack blowing up, it
seems to me we'd get the best of both worlds (that is, crashes become
RuntimeError, but naive
Guido van Rossum gu...@python.org added the comment:
Was the crasher ever converted into a unittest? I think that should be done
regardless of the outcome of the ongoing discussion about this issue.
--
___
Python tracker rep...@bugs.python.org
Guido van Rossum gu...@python.org added the comment:
On Sun, Apr 1, 2012 at 1:58 PM, Raymond Hettinger
rep...@bugs.python.org wrote:
[...]
I'm wary of the original RuntimeError patch because
[...]
I had retorts to most of what you wrote, but decided not to post them.
Instead, I really want to
Martin v. Löwis mar...@v.loewis.de added the comment:
The patch looks fine. As it's not a security fix, it should go into 3.2 and
default.
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14471
Changes by Martin v. Löwis mar...@v.loewis.de:
--
versions: -Python 3.1
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14471
___
___
Guido van Rossum gu...@python.org added the comment:
Here's a hack that uses goto instead of recursion to restore the original
behavior, less the stack overflow. With this, hammer_dict_switchinterval.py
loops forever (which is I think what it's supposed to do if RuntimeError is
never
Raymond Hettinger raymond.hettin...@gmail.com added the comment:
IIRC, Jython uses concurrent mappings, so this isn't an issue for them.
CPython's dictresize() relies on the GIL to atomically resize the ma_table.
There are no pure python calls (the existing hash values are reused) and the
Changes by Raymond Hettinger raymond.hettin...@gmail.com:
--
Removed message: http://bugs.python.org/msg157338
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14417
___
Vinay Sajip vinay_sa...@yahoo.co.uk added the comment:
This is not a logging bug. You called basicConfig with a file name, so the file
is opened using a FileHandler and with file name LOG_FILENAME. You then add a
RotatingFileHandler with the same name, so the file has two handles referring
to
Guido van Rossum gu...@python.org added the comment:
Why delete that?
On Sunday, April 1, 2012, Raymond Hettinger wrote:
Changes by Raymond Hettinger raymond.hettin...@gmail.com javascript:;:
--
Removed message: http://bugs.python.org/msg157338
Ezio Melotti ezio.melo...@gmail.com added the comment:
+1
Most of the time hg diff issue12345.diff is all that it's needed to produce
a patch, and whenever I point someone to the devguide they usually get confused
because they think they have to use mq.
FWIW I mostly use uncommitted changes,
Ezio Melotti ezio.melo...@gmail.com added the comment:
+1
--
___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue14468
___
___
Python-bugs-list mailing
100 matches
Mail list logo