[pypy-dev] [pypy-svn] r79938 - in pypy/trunk/pypy: module/posix module/posix/test rpython/module translator/c/test

Maciej Fijalkowski fijall at gmail.com
Thu Dec 9 21:39:52 CET 2010


Do we *really* need those functions available on RPython level?

On Thu, Dec 9, 2010 at 7:30 PM,  <arigo at codespeak.net> wrote:
> Author: arigo
> Date: Thu Dec  9 18:30:33 2010
> New Revision: 79938
>
> Modified:
>   pypy/trunk/pypy/module/posix/__init__.py
>   pypy/trunk/pypy/module/posix/interp_posix.py
>   pypy/trunk/pypy/module/posix/test/test_posix2.py
>   pypy/trunk/pypy/rpython/module/ll_os.py
>   pypy/trunk/pypy/translator/c/test/test_extfunc.py
> Log:
> Implement os.getloadavg().  (Phew, we really need to edit files in all
> corners of the world for this...)
>
>
> Modified: pypy/trunk/pypy/module/posix/__init__.py
> ==============================================================================
> --- pypy/trunk/pypy/module/posix/__init__.py    (original)
> +++ pypy/trunk/pypy/module/posix/__init__.py    Thu Dec  9 18:30:33 2010
> @@ -111,6 +111,8 @@
>         interpleveldefs['sysconf_names'] = 'space.wrap(os.sysconf_names)'
>     if hasattr(os, 'ttyname'):
>         interpleveldefs['ttyname'] = 'interp_posix.ttyname'
> +    if hasattr(os, 'getloadavg'):
> +        interpleveldefs['getloadavg'] = 'interp_posix.getloadavg'
>
>     for name in ['setsid', 'getuid', 'geteuid', 'getgid', 'getegid', 'setuid',
>                  'seteuid', 'setgid', 'setegid', 'getpgrp', 'setpgrp',
>
> Modified: pypy/trunk/pypy/module/posix/interp_posix.py
> ==============================================================================
> --- pypy/trunk/pypy/module/posix/interp_posix.py        (original)
> +++ pypy/trunk/pypy/module/posix/interp_posix.py        Thu Dec  9 18:30:33 2010
> @@ -963,6 +963,17 @@
>     return space.w_None
>  chown.unwrap_spec = [ObjSpace, str, "c_nonnegint", "c_nonnegint"]
>
> +def getloadavg(space):
> +    try:
> +        load = os.getloadavg()
> +    except OSError, e:
> +        raise OperationError(space.w_OSError,
> +                             space.wrap("Load averages are unobtainable"))
> +    return space.newtuple([space.wrap(load[0]),
> +                           space.wrap(load[1]),
> +                           space.wrap(load[2])])
> +getloadavg.unwrap_spec = [ObjSpace]
> +
>  if _WIN:
>     from pypy.rlib import rwin32
>
>
> Modified: pypy/trunk/pypy/module/posix/test/test_posix2.py
> ==============================================================================
> --- pypy/trunk/pypy/module/posix/test/test_posix2.py    (original)
> +++ pypy/trunk/pypy/module/posix/test/test_posix2.py    Thu Dec  9 18:30:33 2010
> @@ -521,6 +521,14 @@
>                 assert os.WIFEXITED(status)
>                 assert os.WEXITSTATUS(status) == exit_status
>
> +    if hasattr(os, 'getloadavg'):
> +        def test_os_getloadavg(self):
> +            os = self.posix
> +            l0, l1, l2 = os.getloadavg()
> +            assert type(l0) is float and l0 >= 0.0
> +            assert type(l1) is float and l0 >= 0.0
> +            assert type(l2) is float and l0 >= 0.0
> +
>     if hasattr(os, 'fsync'):
>         def test_fsync(self):
>             os = self.posix
>
> Modified: pypy/trunk/pypy/rpython/module/ll_os.py
> ==============================================================================
> --- pypy/trunk/pypy/rpython/module/ll_os.py     (original)
> +++ pypy/trunk/pypy/rpython/module/ll_os.py     Thu Dec  9 18:30:33 2010
> @@ -730,6 +730,22 @@
>         return extdef([traits.str, int, int], int, traits.ll_os_name('open'),
>                       llimpl=os_open_llimpl, oofakeimpl=os_open_oofakeimpl)
>
> +    @registering_if(os, 'getloadavg')
> +    def register_os_getloadavg(self):
> +        AP = rffi.CArrayPtr(lltype.Float)
> +        c_getloadavg = self.llexternal('getloadavg', [AP, rffi.INT], rffi.INT)
> +
> +        def getloadavg_llimpl():
> +            load = lltype.malloc(AP.TO, 3, flavor='raw')
> +            r = c_getloadavg(load, 3)
> +            result_tuple = load[0], load[1], load[2]
> +            lltype.free(load, flavor='raw')
> +            if r != 3:
> +                raise OSError
> +            return result_tuple
> +        return extdef([], (float, float, float),
> +                      "ll_os.ll_getloadavg", llimpl=getloadavg_llimpl)
> +
>  # ------------------------------- os.read -------------------------------
>
>     @registering(os.read)
>
> Modified: pypy/trunk/pypy/translator/c/test/test_extfunc.py
> ==============================================================================
> --- pypy/trunk/pypy/translator/c/test/test_extfunc.py   (original)
> +++ pypy/trunk/pypy/translator/c/test/test_extfunc.py   Thu Dec  9 18:30:33 2010
> @@ -755,3 +755,13 @@
>         for i in range(5):
>             res = func(i)
>             assert res == os.uname()[i]
> +
> +if hasattr(os, 'getloadavg'):
> +    def test_os_getloadavg():
> +        def does_stuff():
> +            a, b, c = os.getloadavg()
> +            print a, b, c
> +            return a + b + c
> +        f = compile(does_stuff, [])
> +        res = f()
> +        assert type(res) is float and res >= 0.0
> _______________________________________________
> pypy-svn mailing list
> pypy-svn at codespeak.net
> http://codespeak.net/mailman/listinfo/pypy-svn
>


More information about the Pypy-dev mailing list