Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #41568

Re: Best way to find starting directory

Path csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!feeder.erje.net!eu.feeder.erje.net!eweka.nl!lightspeed.eweka.nl!194.134.4.91.MISMATCH!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail
Return-Path <python-python-list@m.gmane.org>
X-Original-To python-list@python.org
Delivered-To python-list@mail.python.org
X-Spam-Status OK 0.002
X-Spam-Evidence '*H*': 1.00; '*S*': 0.00; 'context': 0.05; 'say,': 0.05; 'schema': 0.05; 'class,': 0.07; 'parameter': 0.07; 'type,': 0.07; 'users,': 0.07; 'definition,': 0.09; 'parsers': 0.09; 'path.': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'stored': 0.10; 'files.': 0.13; 'skip:f 30': 0.15; 'different,': 0.16; 'parser.': 0.16; 'received:80.91.229.3': 0.16; 'received:plane.gmane.org': 0.16; 'wrote:': 0.17; 'directory.': 0.17; 'else,': 0.17; 'module,': 0.17; 'code,': 0.18; 'module': 0.19; 'putting': 0.20; 'file.': 0.20; 'sort': 0.21; 'import': 0.21; 'parse': 0.22; 'sets': 0.23; 'somewhere': 0.24; 'pass': 0.25; 'header:In-Reply- To:1': 0.25; 'header:User-Agent:1': 0.26; 'common': 0.26; 'am,': 0.27; 'separate': 0.27; 'mind.': 0.27; 'header:X-Complaints-To:1': 0.28; 'decide': 0.28; 'run': 0.28; 'behavior.': 0.29; 'maybe': 0.29; 'becomes': 0.30; 'expect': 0.31; 'sense': 0.31; 'code': 0.31; 'file': 0.32; 'could': 0.32; 'directory,': 0.33; 'to:addr :python-list': 0.33; 'know.': 0.33; 'that,': 0.34; 'wrong': 0.34; 'thanks': 0.34; 'path': 0.35; 'there': 0.35; 'received:org': 0.36; 'created': 0.36; 'explain': 0.36; 'but': 0.36; 'modules': 0.36; 'anything': 0.36; 'xml': 0.37; 'two': 0.37; 'received:co.za': 0.37; 'received:za': 0.37; 'rather': 0.37; 'well.': 0.37; 'data': 0.37; 'subject:: ': 0.38; 'store': 0.38; 'files': 0.38; 'fact': 0.38; 'some': 0.38; 'nothing': 0.38; 'there,': 0.38; 'to:addr:python.org': 0.39; 'called': 0.39; 'where': 0.40; 'header:Received:5': 0.40; 'think': 0.40; 'your': 0.60; 'save': 0.61; 'tracking': 0.61; 'provide': 0.62; 'different': 0.63; 'ever': 0.63; 'more': 0.63; 'within': 0.64; 'making': 0.64; 'therefore': 0.65; 'validate': 0.65; 'received:41': 0.73; 'frank': 0.75; 'companies,': 0.78; 'etc),': 0.84; 'etc,': 0.84; 'shared,': 0.84; 'subject:find': 0.84; 'subject:Best': 0.91; 'angel': 0.93
X-Injected-Via-Gmane http://gmane.org/
To python-list@python.org
From Frank Millman <frank@chagford.com>
Subject Re: Best way to find starting directory
Date Wed, 20 Mar 2013 07:58:11 +0200
References <ki93v1$s7f$1@ger.gmane.org> <ki95lp$bel$1@ger.gmane.org> <ki975r$odu$1@ger.gmane.org> <51485E35.7090501@davea.name> <ki9snt$hrk$1@ger.gmane.org> <51487E55.6040704@davea.name>
Mime-Version 1.0
Content-Type text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding 7bit
X-Gmane-NNTP-Posting-Host 41-133-115-17.dsl.mweb.co.za
User-Agent Mozilla/5.0 (Windows NT 5.2; rv:14.0) Gecko/20120713 Thunderbird/14.0
In-Reply-To <51487E55.6040704@davea.name>
X-BeenThere python-list@python.org
X-Mailman-Version 2.1.15
Precedence list
List-Id General discussion list for the Python programming language <python-list.python.org>
List-Unsubscribe <http://mail.python.org/mailman/options/python-list>, <mailto:python-list-request@python.org?subject=unsubscribe>
List-Archive <http://mail.python.org/pipermail/python-list/>
List-Post <mailto:python-list@python.org>
List-Help <mailto:python-list-request@python.org?subject=help>
List-Subscribe <http://mail.python.org/mailman/listinfo/python-list>, <mailto:python-list-request@python.org?subject=subscribe>
Newsgroups comp.lang.python
Message-ID <mailman.3547.1363759111.2939.python-list@python.org> (permalink)
Lines 75
NNTP-Posting-Host 2001:888:2000:d::a6
X-Trace 1363759111 news.xs4all.nl 6984 [2001:888:2000:d::a6]:46430
X-Complaints-To abuse@xs4all.nl
Xref csiph.com comp.lang.python:41568

Show key headers only | View raw


On 19/03/2013 17:03, Dave Angel wrote:
> On 03/19/2013 10:29 AM, Frank Millman wrote:
>> On 19/03/2013 14:46, Dave Angel wrote:
>>
>> As you say, there is a variety of types of data that one might to store
>> externally. My current scenario is that, in my business/accounting
>> application, I use xml to store form definitions, report definitions,
>> etc, which are kept in the database (compressed). I am now constructing
>> some xml schemas to validate the xml files. I need to store the schemas
>> somewhere, so I have created a directory called 'schemas' under the main
>> directory. I need to access them from various parts of the application,
>> so I need a reliable way to locate the 'schemas' directory.
>
> Rather than having various parts of the code all figuring this sort of
> thing out for themself, let them all call a common place.  If there's
> nothing in common but the directory, then save that as a global in some
> module that multiple modules can import.  But if there's more that
> could/should be shared, then make a whole module, or maybe a class,
> implemmnting that behavior.  If nothing else, it then means there's only
> one place to change when you change your mind.
>
>>
>> In theory I could store them somewhere different, and use a parameter to
>> provide the path. But they are only used within the context of the
>> application, so I think it makes sense to keep them alongside the 'py'
>> files that make up the application.
>>
>
> In putting them there, you are making two assumptions.  One is that only
> one user will ever run this, and two is that the user will not need two
> sets of those 'schemas'.  If the user is tracking two different
> companies, each with the same code, but different xml and different
> database, this would be the wrong place to put it.  But it's up to you
> to decide those assumptions, not I.
>

Maybe I did not explain very well. I fully expect a large number of 
users, tracking a large number of companies, to access the same schema 
file at the same time.

In fact I use lxml to parse the xml once it has been read from the 
database and decompressed. There are a limited number of 'types' of xml 
file (form definition, service definition, report definition, etc), and 
each type has its own schema. lxml will use a validating schema if you 
pass the path to the xsd file as a parameter to the parser. I create 
separate parsers, one for each type, when the program starts. But I 
still need to tell it where to find the xsd file.

They are stored in a sub-directory called 'schemas'. Therefore when I 
create the parsers I have the following -

import os
import __main__
from lxml import etree

schema_path = os.path.join(
     os.path.dirname(__main__.__file__),
     'schemas')

form_schema=etree.XMLSchema(
     file=os.path.join(schema_path, 'form.xsd'))

form_parser = etree.XMLParser(
     schema=form_schema, attribute_defaults=True,
     remove_comments=True, remove_blank_text=True)

I hope that is clearer. If you can see anything wrong with this 
approach, please let me know. I would much rather find out now rather 
than when my 'large number of users' becomes a reality!

Thanks

Frank

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

Re: Best way to find starting directory Frank Millman <frank@chagford.com> - 2013-03-20 07:58 +0200

csiph-web