[Sugar-devel] ObjectChooser() Issue?

James Cameron quozl at laptop.org
Sun Nov 21 19:11:50 EST 2010


On Sat, Nov 20, 2010 at 04:37:24PM -0500, Art Hunkins wrote:
> This code tests for the presence of an XO-1 (thanks originally to Walter):
> 
>   if os.path.exists("/sys/power/olpc-pm"):
> 
> Normally this is also a test for Sugar 0.82. I want, however, also
> to test for Sugar *upgrades* on the XO-1; I don't want the same
> result as for 0.82 (as, for example, if 0.84 is installed).

This is not a test for Sugar version.

> So, do I use the same test, or do I need some other (if so, what)?

If you need to test for Sugar version, use config.version ... which is
what "About my computer" uses:

from jarabe import config
print config.version

Test this on all the versions you support; I'm not sure if it works for
all versions.  ;-)

> (Another way of phrasing the question: is the above essentially a
> hardware or a software test?)

Checking for /sys/power/olpc-pm is a software test, however the software
component (a kernel module that is compiled into the kernel) is not
meant to be present except on XO-1 or XO-1.5.

Walter has shown a different method.

Yet another hardware detection method can be found in hw.py in the
Record activity, and here it is below:

# Copyright (C) 2010, One Laptop per Child
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

import os

def _get_dmi(node):
    path = os.path.join('/sys/class/dmi/id', node)
    try:
        return open(path).readline().strip()
    except:
        return None

def get_xo_version():
    if _get_dmi('product_name') != 'XO':
        return 0
    version = _get_dmi('product_version')
    if version == '1':
        return 1
    if version == '1.5':
        return 1.5
    else:
        return 0

-- 
James Cameron
http://quozl.linux.org.au/


More information about the Sugar-devel mailing list