Re: Finding application data after install - a solution?

Discussion in 'Python' started by Wolodja Wentland, Sep 22, 2009.

  1. On Mon, Sep 21, 2009 at 23:52 -0300, Gabriel Genellina wrote:
    > En Sat, 19 Sep 2009 12:03:52 -0300, Wolodja Wentland
    > <-heidelberg.de> escribió:
    >
    > >reliably finding distribution data from your program seems to be an
    > >unsolved issue for programs packaged with distutils.


    [...]

    > Isn't pkgutil.get_data() what you're looking for?
    > I'm not sure it covers all your use cases though.


    No that pkgutil.get_data() is exactly *not* what I am looking for ;-)

    I have a library which *could* use external data and use this additional
    information to cover more cases, but works perfectly fine without this
    data. The data could change more frequently than i want to release the
    library.

    I use distutils data_files=... to have the data installed, but there
    is/was (until the recipe I posted here) no way to find that data again,
    because the admin could define arbitrary prefixes for libs, scripts and
    data. That means that there might be absolutely no relation between the
    module path and the data file path.

    I want to:

    1. Give administrators the freedom to install the data wherever they
    want
    2. Adhere to the FHS (installing data within modules breaks it)
    3. Be able to find that data again regardless of the installation
    scheme used

    1 and 2 are easily solved... It was just not possible to find the data
    again. The snippet in the original code solves that.

    I still don't think that relying on these internal structures within
    distutils is supported, but can't think of a better way.

    so long and thanks for all the fish

    Wolodja

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.9 (GNU/Linux)

    iQIcBAEBCAAGBQJKuFPBAAoJEIt/fTDK8U783AEP/0ppcyQ9K9ggDdImpLHPLDaK
    494sytZyj2p4o1gmvCpVAPqEz3f/BVmRCeS7ohS9TG1B307Eg8kMZnjkqRpbQI12
    lqgacbgncKq3EPOOZV+w1TMGwcdm/yCYKIyVA9ROtldoQ5EZEuHveTqSdgBV01X/
    9lWFceXdn7/cTBRXE4mXCY5w9VkeD6wZMmkgKmxQ4fbX17OSoR3UIuX7xGTc3S8n
    bjdjsJUslEFpzDcX/pZt1dkvvLwmrL4Ac9RnNUZfiiyHaRoeReW0elZ3t7tiU7f+
    CaIaYhEm+1NtN+KnymYg4PqlRjib1WEl8TzUtfcEQD/UTSjmbhjWlznKcvLnRX42
    s+NTM2jYjtR95/9nassp52Em5gRclNKfSkArMeOVvGc/eemWTojjbggbMG5q6Ita
    EdHOdfaRlHjRDjoyDcyCB0bWW/9Wuhch4srLxmoiGgPGPsmw9xYe6o1o2JX8wEXn
    JbEw0kDwrRsn5L2DNKKdOXQgU9KjOGEun9nqOWIZ+49dO0wzzKElK9ePsXhuCu2p
    +4hTNLO2JSOYsuDUv2N4o90LbBls3Wre9kU2l/952vnuVCWOmw7p97ezZX4e/oFs
    9gwxBZnp2LNEvOrNP8Uq4jPWu2jtNAkbQfzxHPcdXL2ZSkxkS/UUgcG4Ep3Cv6KT
    qAHk+yP8Os2+yCLzxnjy
    =B5aG
    -----END PGP SIGNATURE-----
    Wolodja Wentland, Sep 22, 2009
    #1
    1. Advertising

  2. Wolodja Wentland

    Aahz Guest

    In article <>,
    Wolodja Wentland <-heidelberg.de> wrote:
    >
    >I want to:
    >
    > 1. Give administrators the freedom to install the data wherever they
    > want
    > 2. Adhere to the FHS (installing data within modules breaks it)
    > 3. Be able to find that data again regardless of the installation
    > scheme used
    >
    >1 and 2 are easily solved... It was just not possible to find the data
    >again. The snippet in the original code solves that.


    Given your mention of FHS, it sounds like you are focused on Unix-like
    systems, in which case why not rely on the standard mechanisms for config
    files?
    --
    Aahz () <*> http://www.pythoncraft.com/

    "I won't accept a model of the universe in which free will, omniscient
    gods, and atheism are simultaneously true." --M
    Aahz, Sep 22, 2009
    #2
    1. Advertising

  3. On Tue, Sep 22, 2009 at 07:42 -0700, Aahz wrote:
    > >I want to:
    > >
    > > 1. Give administrators the freedom to install the data wherever they
    > > want
    > > 2. Adhere to the FHS (installing data within modules breaks it)
    > > 3. Be able to find that data again regardless of the installation
    > > scheme used
    > >
    > >1 and 2 are easily solved... It was just not possible to find the data
    > >again. The snippet in the original code solves that.

    > Given your mention of FHS, it sounds like you are focused on Unix-like
    > systems, in which case why not rely on the standard mechanisms for config
    > files?


    I do not intentionally focus on UNIX type systems, but I have grown up
    with *nix and I rather follow one scheme than none at all. But the
    proposed way works on Windows as well, although the users might find
    previously unseen directories like 'PREFIX/share/foo/doc' and the like
    on their system.

    How to solve this platform independently? And what standard mechanisms
    for config files do you mean? Are there library functions I overlooked?

    But the data I am speaking about are not config files. I will explain in
    more detail so you can understand the problem.

    I have a library that parses markup that has a canonical form and a
    localised one. 'Image:' for example is the canonical form and the one
    used for English. In German the canonical form *and* a localised one is
    used ('Bild:'). This scheme (localised+canonical) holds true for all
    (260+) languages this markup is used in.

    The library itself works fine with the canonical forms, but loads
    language specific markup definitions *if they are available* . I
    therefore don't want to install this data along with the library for the
    following reasons:

    1. The data is not needed if the user just want to work with English
    data

    2. The data could change much more frequently than the library that
    works with the data.

    If I couple library and data together I would have to make a new
    release *every time* the data changes, even if the user does not
    care about the other languages.

    I therefore opted to provide a seperate (Python) distribution foo-data
    which contains the language specific markup definitions and install it
    to '$DATA_PREFIX/share/foo/languageinfo' .

    As $DATA_PREFIX is only known at build time there was (until now) no
    reliable way to find the data if the only information one can get is
    $LIB_PREFIX, because these two might be totally unrelated.

    I hope that clarifies my point

    Wolodja

    P.S Which markup format am I speaking about? First one to answer gets a
    brand new Internet!

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.9 (GNU/Linux)

    iQIcBAEBCAAGBQJKuP+NAAoJEIt/fTDK8U78ANQQAJcqixz2NCrxJ/GlmJi2KNrt
    0cqdhB4DTymnrTIBY1Hh02Ryi5Xbf/RmMijLxOCo5ckneH7ebmulRheKs83EObX8
    29LNjSQqMXfRDabZhc+4PrccuDsMejOKkNWab7zIbgmkyr3ZYfH9anH38Fx0Glg6
    +vVPsJ4YATMsbebA0hnxUKR6YYHsEKMpvMF7NCO61qZquNFCZiirg9ek29QQ43E5
    cfYqYUfgshmvKf0r5WOmzomYL2PeEhaj0iHKH5yV6u8MVmkYe9SOnZfwPe+RDNwQ
    Ti8tb63OmCDic7uUn5Djcp6ZlaJZVCHS4s9Kun8l904xiqc/Yn8AjB3zKgZqTBCF
    jfDtS8VqVrUwQuBCzDmMkGMzl8cSAKVZuGWDcsp2UQCzWS33AWKL8FlVP8jqba8Y
    Mowur313OptlL64CP8dP2Lc5kUI4GGDL/OjU9U+EBZiqYkvc7Oa9fQxnegc3VQyW
    W7x4QMeqipyfc6PWGfqf61Zxzd5FSwHdbCQVOnO2TwZTfb8eKd9eHNn/4yLi56ye
    c722EDms7NebrWQNPy4PdJSmwXq8YMjAYXi/8YUfiJynVlCp4PEsqpDtMW6LrZWM
    ca+Q4Gj3OT8h7m2VIPn9PSsHV2IweJCoV2ha/7z1/ySktOWgsRnQQd+XOvIJc/OB
    Im350pRfTh/ys6We1aRN
    =n2LV
    -----END PGP SIGNATURE-----
    Wolodja Wentland, Sep 22, 2009
    #3
  4. En Tue, 22 Sep 2009 13:47:09 -0300, Wolodja Wentland
    <-heidelberg.de> escribió:
    > On Tue, Sep 22, 2009 at 07:42 -0700, Aahz wrote:


    >> >I want to:
    >> >
    >> > 1. Give administrators the freedom to install the data wherever

    >> they
    >> > want
    >> > 2. Adhere to the FHS (installing data within modules breaks it)
    >> > 3. Be able to find that data again regardless of the installation
    >> > scheme used
    >> >
    >> >1 and 2 are easily solved... It was just not possible to find the data
    >> >again. The snippet in the original code solves that.


    >> Given your mention of FHS, it sounds like you are focused on Unix-like
    >> systems, in which case why not rely on the standard mechanisms for
    >> config
    >> files?

    >
    > I do not intentionally focus on UNIX type systems, but I have grown up
    > with *nix and I rather follow one scheme than none at all. But the
    > proposed way works on Windows as well, although the users might find
    > previously unseen directories like 'PREFIX/share/foo/doc' and the like
    > on their system.


    I think many Windows users would say WTF!? when seeing those directories -
    and send cordial greetings to you, your parents and your whole family :)
    Instead of ending with, e.g., a directory like c:\usr\share\foo\doc, your
    program should ask the OS for the special folder CSIDL_COMMON_APPDATA and
    add the foo\doc part. Or any other suitable standard folder. A directory
    like c:\usr\share\foo on Windows is as ridiculous as /Documents\ and\
    Settings/All\ Users/Application\ Data/foo on any unix like system.

    > As $DATA_PREFIX is only known at build time there was (until now) no
    > reliable way to find the data if the only information one can get is
    > $LIB_PREFIX, because these two might be totally unrelated.


    You should probably raise this issue at the distutils-sig mailing list:
    http://www.python.org/community/sigs/current/distutils-sig/

    --
    Gabriel Genellina
    Gabriel Genellina, Sep 24, 2009
    #4
  5. On Thu, Sep 24, 2009 at 04:07 -0300, Gabriel Genellina wrote:
    > >I do not intentionally focus on UNIX type systems, but I have grown up
    > >with *nix and I rather follow one scheme than none at all. But the
    > >proposed way works on Windows as well, although the users might find
    > >previously unseen directories like 'PREFIX/share/foo/doc' and the like
    > >on their system.


    > I think many Windows users would say WTF!? when seeing those
    > directories - and send cordial greetings to you, your parents and
    > your whole family :)


    That is probably true, but Windows has a 'etc' directory
    (c:\windows\system32\drivers\etc) which AFAIK contains the hosts file
    and/or other goodies from *NIX.

    > Instead of ending with, e.g., a directory like c:\usr\share\foo\doc,
    > your program should ask the OS for the special folder
    > CSIDL_COMMON_APPDATA and add the foo\doc part. Or any other suitable
    > standard folder.


    Is CSIDL_COMMON_APPDATA and environment variable set on all Windows
    flavours? Are there versions that relying on this env var (if it is one)
    will cause havoc and the death of millions of kittens? (ie. is it
    available on all versions)

    Where can I find Information on these "other" standard folders? Sorry,
    but I have not used a Windows machine in ages.

    > A directory like c:\usr\share\foo on Windows is as ridiculous as
    > /Documents\ and\ Settings/All\ Users/Application\ Data/foo on any unix
    > like system.


    Agreed! Although I find the *NIX flavour more palatable to my eye ;-)

    > >As $DATA_PREFIX is only known at build time there was (until now) no
    > >reliable way to find the data if the only information one can get is
    > >$LIB_PREFIX, because these two might be totally unrelated.

    >
    > You should probably raise this issue at the distutils-sig mailing
    > list: http://www.python.org/community/sigs/current/distutils-sig/


    I already did [1] but the distutils developers are quite busy discussing
    a the new format for setup.cfg. I did not got any feedback on the
    solution I developed and thought that other Python users might have a
    better solution to this problem.

    How do *you* deal with application data in your programs? Is there a way
    that works on as many platforms as possible?

    so long

    Wolodja

    [1] http://mail.python.org/pipermail/distutils-sig/2009-September/013238.html

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.9 (GNU/Linux)

    iQIcBAEBCAAGBQJKu1ZXAAoJEIt/fTDK8U78xHgP/0xfGHz/2PMgESFmd6mSURY5
    +YcqIat4i/xB7SRUQSoWXUYDBDOYGEGBxM8XOasIdrpxgFDJGc+FuqKTP/qd1W4N
    RXaSC40cpYAReiH+uUgSo6gFwTWYiQBfqDrymHkdBunceoeFgqKOf6xd+bzHaZux
    RVn3lWVeXP6Mvi3+CCNlH+Bz/daxkswNfNzXBIknoSGKzoN9/SC4XPiz7T4pq210
    NpXFYHSxWO6qFtJmS1fKn+3ZPXVsRvr/ZKnlJJdaTQKdN2CNe/Cctin1oXtchV5Z
    /PfbpRNYa70DQa5WEIugoXFa94EaXeJ4Zn59VvwXk+lYdRflCEozF1yZ/fqk1Q8g
    P8lCrIWpAgoh2L9wgNxmCFm+avsiDuco1FRUjf3/oN0EKr9wngnwC5jTXRw/1hxs
    wSaywkYnrD7Yh/M9zlmSbYEZtI+OWYuFhX0tFILPHxez8Oucdj5++VDPchwSK85m
    DROUhPsafANzseMKbueexqZuAOCAjpKhEOWhtIlfENU8tIolehbP8lGrWh4Ykw0H
    73/HpeCfZtTEdKthEIkpXmNxq95UOsu4wfmSrA6wIBG8WDW+UkARPkUAz815/8b7
    P1xWc/i0Tc4D5Et8W9ShM+UQcSIJJ8Kef2vvKl8/Gfa1iXgXthtVSjWkIzYqd5oU
    1XKMtxwxeO8esz35UKS7
    =CWz1
    -----END PGP SIGNATURE-----
    Wolodja Wentland, Sep 24, 2009
    #5
  6. Wolodja Wentland

    Tim Golden Guest

    Wolodja Wentland wrote:
    >> I think many Windows users would say WTF!? when seeing those
    >> directories - and send cordial greetings to you, your parents and
    >> your whole family :)

    >
    > That is probably true, but Windows has a 'etc' directory
    > (c:\windows\system32\drivers\etc) which AFAIK contains the hosts file
    > and/or other goodies from *NIX.


    True, but it's little known and -- as you show -- buried deep in the
    innards. I assume that it's the residue (or a symptom) of the Posix
    compatibility layer.

    > Is CSIDL_COMMON_APPDATA and environment variable set on all Windows
    > flavours?


    Certainly all those which Python currently supports. There are
    some small subtleties which have changed between older and
    newer versions.

    Are there versions that relying on this env var (if it is one)
    > will cause havoc and the death of millions of kittens? (ie. is it
    > available on all versions)
    >
    > Where can I find Information on these "other" standard folders? Sorry,
    > but I have not used a Windows machine in ages.


    (drops CSIDL_COMMON_APPDATA into Google and...)

    http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx


    >> A directory like c:\usr\share\foo on Windows is as ridiculous as
    >> /Documents\ and\ Settings/All\ Users/Application\ Data/foo on any unix
    >> like system.

    >
    > Agreed! Although I find the *NIX flavour more palatable to my eye ;-)


    And they say familiarity breeds contempt! ;)

    TJG
    Tim Golden, Sep 24, 2009
    #6
  7. On Thu, Sep 24, 2009 at 12:51 +0100, Tim Golden wrote:
    > Wolodja Wentland wrote:
    > >Is CSIDL_COMMON_APPDATA and environment variable set on all Windows
    > >flavours?

    >
    > Certainly all those which Python currently supports. There are
    > some small subtleties which have changed between older and
    > newer versions.


    Great!

    > >Where can I find Information on these "other" standard folders? Sorry,
    > >but I have not used a Windows machine in ages.


    > http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx


    Thank you! I will definitely consider adding better Windows installation
    support in one of the next releases.

    so long

    Wolodja

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.9 (GNU/Linux)

    iQIcBAEBCAAGBQJKu20QAAoJEIt/fTDK8U78pwoP/3GUnm3SDNgLzWg0pqcBDdMX
    5MhGbG+4rZ2cMSNXceKQK1Q7E9+HevOQl9isYAKHcM7S5BDqysOMHLP9tHSXMPfO
    MbGUEla8PKshwGMAfW0843gL+NO05eviIgKMfZVeoaIGqy5b0SXs7GYIEPoCmCFn
    sqf65zkQg2STtGJZWh73ABY6TwBwznmj9gTf0PI2DIi+owv8bOLeSz2h00NGlMgb
    MnEELqOcPS3vF0GSDuFxx5+ZC2yM2rOXO5ko5B4ZeofE766+UjBVPvFKSIbPa9xv
    4US5nB6al3ikVyPbpTXDzFTF5fXy+aGFC2x+BB9Ceg6qfyLpysyZtdgaCgnpDuI0
    AbmHir9fbeB3+2DBZXUqSEIQHspN/CCwaptJXCvKIBtSueKsA5q86jf9kO43ak5S
    LdWktAVzu6+husa4TihbpxRuR87wUMHhzEJrfv8jDNi+EtQAsRb2QpjX+gx0Owjx
    5ZTSDwRHFwpHP5WRg1CUumUkCTYIn4tU1NNBEVzaOCBfT7f1jsz6mEmIxbQZhtpd
    N40L28kFCZzHesoSO4HdUeHi3DQWmv0VA0ZUZ+w6JoEuMCkT7IRoq/1KlWSQLfTm
    YObftVv8tVwYj9F2qDFVdA9PJLf4Q6PT5SpTUjtrWlgjS8sElryRC1gXkCfe9p1v
    FktNCfxfCcR9wcn1ar0o
    =PzHu
    -----END PGP SIGNATURE-----
    Wolodja Wentland, Sep 24, 2009
    #7
  8. Wolodja Wentland

    Tim Golden Guest

    Wolodja Wentland wrote:
    > On Thu, Sep 24, 2009 at 12:51 +0100, Tim Golden wrote:
    >> Wolodja Wentland wrote:
    >>> Is CSIDL_COMMON_APPDATA and environment variable set on all Windows
    >>> flavours?


    Just to clarify, now that I read your post more carefully,
    there *is* an environment variable APPDATA which is the
    user-specific Application Data (probably what you want).
    If you need the common appdata (as in the question above),
    this isn't exposed as an env var and you'll need to use
    the shell API to query Windows for it.

    Be warned: altho' it might appear that there is a common
    pattern to these locations, they're not guaranteed, especially
    in the face of i18n issues and XP->Vista changes etc.

    TJG
    Tim Golden, Sep 24, 2009
    #8
  9. En Thu, 24 Sep 2009 08:21:59 -0300, Wolodja Wentland
    <-heidelberg.de> escribió:

    >> You should probably raise this issue at the distutils-sig mailing
    >> list: http://www.python.org/community/sigs/current/distutils-sig/

    >
    > I already did [1] but the distutils developers are quite busy discussing
    > a the new format for setup.cfg. I did not got any feedback on the
    > solution I developed and thought that other Python users might have a
    > better solution to this problem.
    >
    > How do *you* deal with application data in your programs? Is there a way
    > that works on as many platforms as possible?


    On linux, using a configuration file like /etc/fooapplication.conf
    On Windows, using a registry key under HKEY_LOCAL_MACHINE\Software\My
    Bussiness Name\Foo Application.
    In either place, there is an entry pointing to the actual directory where
    data is stored.
    I never had the problem you want to solve, probably I'm just lucky (or
    perhaps my users are "geek" enough to know how to edit a config file, or
    dumb enough to never change the system settings...)

    --
    Gabriel Genellina
    Gabriel Genellina, Sep 25, 2009
    #9
  10. On Fri, Sep 25, 2009 at 02:24 -0300, Gabriel Genellina wrote:
    > En Thu, 24 Sep 2009 08:21:59 -0300, Wolodja Wentland
    > >How do *you* deal with application data in your programs? Is there a way
    > >that works on as many platforms as possible?


    > On linux, using a configuration file like /etc/fooapplication.conf
    > On Windows, using a registry key under
    > HKEY_LOCAL_MACHINE\Software\My Bussiness Name\Foo Application.
    > In either place, there is an entry pointing to the actual directory
    > where data is stored.


    How do you you *install* this file within /etc ? Do users have to copy
    it themselves into /etc from DATA_DIR/foo/etc/fooapplication.conf.sample
    ?

    > I never had the problem you want to solve, probably I'm just lucky
    > (or perhaps my users are "geek" enough to know how to edit a config
    > file, or dumb enough to never change the system settings...)


    I am just trying to support all installation schemes supported by
    distutils. That's all ;-)

    so long

    Wolodja

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.9 (GNU/Linux)

    iQIcBAEBCAAGBQJKvJMNAAoJEIt/fTDK8U78S+IP/32C3mryBUyxHncz4XI6mUvE
    CEFe+g7eWuDcEJQb2ifxu/Ifsb43/00NJyBCqCgLEMY8faxKgYu7YUOMGQKVLtiK
    TzzrvOxuk7yT43rA4ELCfUj6izd0vYg1vJapfLzJYA1hd+lOyCC0UYgFBaG2iQX3
    kTzOp2/c8O3ePHnqNEzDgkjEtZOFW7C1eDZ1Qq1SJ85dDodXv7KhlRz8EY6hA8Qv
    FZrN0MR1cTW47thuCswsnE1G0VcCNPrPuaVIUsyOq/OK0S5CqGK/LpMM7vfd3G0q
    n0EkxDwHkvfbNlwwvhFu0BHcHMn/zZfVV66WFW2TuN5/XnvrWn5ih6UP4l1Lc/M3
    98pdWSmaAhpBmsAMZnxlug/Y5zUeQ4+XB9fnlEZP0yZGtaogq2CxmtaLZHXQWxu1
    7bZ6mhwlpSgreza5l154NDexRdbyTqCYHUjnmJBmiN0Z6u3GpKHIk+HuX5Pl+PCq
    dJ/wvIPq/C0Hy1+C2QHTZATj133OXrHh1X1YacqzNMd9ycOYHi8Q/KH8HuAN34KE
    jh0WPjCrWHTlwupjIU5TKFGwD+I4mqVpiJ7wiv7ZhKFbQn4KyLNbvlFz9xAFA8hx
    O36ZmeRQVUg39Rvwwy2PRQBmQ3LHn3Qc2bxn5wfBSq+qcWvBOjr4vtxyjtZ7v/Ux
    gtBOTcB+lzri72NyLoDJ
    =/SUh
    -----END PGP SIGNATURE-----
    Wolodja Wentland, Sep 25, 2009
    #10
  11. En Fri, 25 Sep 2009 06:53:18 -0300, Wolodja Wentland
    <-heidelberg.de> escribió:

    > How do you you *install* this file within /etc ? Do users have to copy
    > it themselves into /etc from DATA_DIR/foo/etc/fooapplication.conf.sample
    > ?


    Nothing fancy here:

    setup(data_files=[
    ('/etc/foo.conf', ['foo.conf.sample']),

    If --install-data is used, one has to edit the /etc/foo.conf file by hand.
    I understand you want this step to be automatic, and I admit it would be
    great, but none of my users complained until now (not that there are so
    many...!)

    --
    Gabriel Genellina
    Gabriel Genellina, Sep 26, 2009
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Andrew Francis
    Replies:
    0
    Views:
    395
    Andrew Francis
    Jun 28, 2006
  2. =?Utf-8?B?Y2FzaGRlc2ttYWM=?=

    Solution file not in the solution folder

    =?Utf-8?B?Y2FzaGRlc2ttYWM=?=, Sep 12, 2006, in forum: ASP .Net
    Replies:
    2
    Views:
    1,085
    Laurent Bugnion
    Sep 12, 2006
  3. , India
    Replies:
    17
    Views:
    1,021
    James Kanze
    Oct 1, 2007
  4. Wolodja Wentland
    Replies:
    0
    Views:
    202
    Wolodja Wentland
    Sep 19, 2009
  5. Max Williams
    Replies:
    12
    Views:
    308
    Max Williams
    Jul 13, 2008
Loading...

Share This Page