That’s a good point; paths could potentially be filled with rules that need
to be broken down, re-defined often and remain well understood.

I would however argue whether or not it is a good idea to rely this heavily
on paths in the first place, as it seems better suited for a schema.

About object composition and schemas, this is what I’m picturing as an
alternative to (my understanding of) pyparsing:
Objects

>>> project.shot(1000).used_assets()
['myasset1', 'myasset2']

As opposed to

>>> path = '/projects/hulk/1000/used_assets/myasset1'>>> project, shot, assets 
>>> = parse(path)

Schema

As an alternative, a schema might be defined as:

['root', 'project', 'shot' ,'used_asset]

Which would map each level of a hierarchy to the respective index.

# For example
$ /myprojects/hulk/1000/myasset1
$       0      1    2     3



On 7 May 2014 12:02, Justin Israel <[email protected]> wrote:

> But what if strings are exactly the thing you have to be dealing with?
> Consider you are trying to design a way to parse paths in a VFX-style
> pipeline. You define a naming convention that will be followed, which could
> have different path strings depending on the specific context. Maybe
> something like:
>
> /projects/<project>/<scene>       /<shot>
>  /<type/stage>/<resolution_colorspace>/<version>/<file.ext>
>
> /projects/<project>/<asset.type>/<name>/<type/stage>/<resolution_colorspace|representation>/<version>/<file.ext>
>
> And maybe even the /project prefix is optional.
>
> I feel like what you might be suggesting in terms of objects, composition,
> lists, ... ultimately is the same thing that pyparsing would be trying to
> abstract for you. From what I have read in the docs, what you are getting
> with pyparsing is grammar primitives, such as a "Word". A Word in this case
> might be the format that defines asset.type. And then you take all of these
> primatives combine them, in a reusable way, into the representation of
> different paths.
>
> So if I defined words/regex for:
>
>
>    - project
>    - scene
>    - asset
>    - shot
>    - assetName
>    - type
>    - resolution
>    - colorspace
>    - version
>    - ...
>
> Then I can start combing those. Like taking a definition for resolution
> and colorspace and saying <resolution>_<colorspace>, or being able to reuse
> the definition for a project format across different path types. Or being
> able to say the '/project' prefix is optional in terms of parsing the path.
>
> I too would like to see some examples from someone who has pyparsing
> experience. But this is what I gleaned from looking over the wiki and docs.
>  Reusable definitions at the word level, to be combined/composed into
> larger grammars that can be used to parse strings. After all...paths are
> strings. Either you are going to define big regular expressions to break
> down the variations of these paths, or you are going to hand roll a class
> that has a bunch of branching code to split and parse the components, or
> you are going to use a library like pyparsing to define grammar and let it
> handle the parsing for you.
>
>
>
>
> On Wed, May 7, 2014 at 9:13 PM, Marcus Ottosson <[email protected]>wrote:
>
>> > Pyparsing is defining a grammer. I haven't used it, but I can see
>> where it would be useful when you have many rules that need to be
>> considered.
>>
>> Ah, see, this is where I hesitate. If you've got that many rules to begin
>> with, doesn't that mean you've quite reliant on strings for things that may
>> be better suited for composition of objects, or a pre-defined schema for
>> lists and the like?
>>
>> I'm eager to witness an example.
>>
>>
>> On 7 May 2014 09:40, Stefan Andersson <[email protected]> wrote:
>>
>>> Thanks guys!
>>> Lot's of information there!
>>>
>>> regards
>>> stefan
>>>
>>>
>>>
>>> On Wed, May 7, 2014 at 9:38 AM, Justin Israel <[email protected]>wrote:
>>>
>>>> The re.compile() thing is a small optimization where you compile the
>>>> pattern ahead of time so that it doesn't have to do it each time you reuse
>>>> it. The re module actually caches the last 100 patterns anyways, so it only
>>>> really matters if you have many regular expressions that you are using over
>>>> and over again.
>>>>
>>>>
>>>> On Wed, May 7, 2014 at 8:35 PM, Stefan Andersson 
>>>> <[email protected]>wrote:
>>>>
>>>>> Thanks! Though I can't get my head around those
>>>>>
>>>>> re.compile(r'\d+')
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Wed, May 7, 2014 at 8:06 AM, Marcus Ottosson <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Sorry, I completely missed the part of your questions containing the
>>>>>> example. :)
>>>>>>
>>>>>> # 1. Get all string in a dict together with their version number
>>>>>> pattern = re.compile(r'\d+')
>>>>>> versions = {}for test in v:
>>>>>>     version = pattern.search(test).group()
>>>>>>     version = int(version)
>>>>>>     versions[version] = test
>>>>>> # 2. Sort version numbers and fill up a new list of strings
>>>>>> sorted_versions = []for version in sorted(versions):
>>>>>>     sorted_versions.append(versions[version])
>>>>>> print sorted_versions
>>>>>>
>>>>>> ['test_v1.ma', 'test_v2.ma' ...]
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 7 May 2014 07:51, Marcus Ottosson <[email protected]> wrote:
>>>>>>
>>>>>>> You could do something like this:
>>>>>>>
>>>>>>> >>> version = re.search(r'v\d+.nk', 'my_nukeFile_v12.nk').group()>>> 
>>>>>>> >>> version'v12.nk'
>>>>>>>
>>>>>>> At this point, you are guaranteed to always have a ‘v’ infront, and
>>>>>>> that it will always end with ‘.nk’. At which point you could
>>>>>>>
>>>>>>> >>> version = int(version[1:-3])12
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 7 May 2014 07:34, Stefan Andersson <[email protected]> wrote:
>>>>>>>
>>>>>>>> So here is a though. How would you guys go about to sort versioning
>>>>>>>> that has no padding? For instance Nuke always adds v1,v2,v3 etc without
>>>>>>>> padding. And some users are used to do that when versioning their 
>>>>>>>> files. I
>>>>>>>> try and trap most of those things to add padding. But... there is 
>>>>>>>> always
>>>>>>>> that case when you can't.
>>>>>>>>
>>>>>>>> v = ["test_v1.ma", "test_v2.ma","test_v11.ma","test_v8.ma","
>>>>>>>> test_v10.ma"]
>>>>>>>>
>>>>>>>> how would you sort and print the last version? In a clever way.
>>>>>>>> Right now there is a lot of splitting and sorting for me to get it 
>>>>>>>> right.
>>>>>>>> But it feels there would be a "smart" way with regex, but I can't get 
>>>>>>>> my
>>>>>>>> head around how to use that.
>>>>>>>>
>>>>>>>> regards
>>>>>>>> stefan
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, May 7, 2014 at 6:42 AM, Marcus Ottosson <
>>>>>>>> [email protected]> wrote:
>>>>>>>>
>>>>>>>>> Just reading up on Pyparsing so I could be off here, but I would
>>>>>>>>> actually argue that if a codebase relies heavily enough on strings 
>>>>>>>>> (for
>>>>>>>>> identification?) that regex no longer cuts it, I would consider 
>>>>>>>>> whether or
>>>>>>>>> not there is a better way of doing it, and not necessarily turn to 
>>>>>>>>> heavier
>>>>>>>>> guns in parsing.
>>>>>>>>>
>>>>>>>>> Again, I could very well be misunderstanding. Does anyone have an
>>>>>>>>> example of Pyparsing in action?
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 7 May 2014 00:12, Jeremy YeoKhoo <[email protected]> wrote:
>>>>>>>>>
>>>>>>>>>> Thanks so much Chad, yes I agree. Not many TDs are aware or
>>>>>>>>>> understand the necessity of good program design and structure (me
>>>>>>>>>> included!) and in this case naming convention! Ill have to have a 
>>>>>>>>>> look at
>>>>>>>>>> that and apply what I can to my own set of tools that i am currently 
>>>>>>>>>> in the
>>>>>>>>>> process of creating
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> -Jeremy
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Sunday, 4 May 2014 20:47:26 UTC+10, Jeremy YeoKhoo wrote:
>>>>>>>>>>
>>>>>>>>>>> Hey guys,
>>>>>>>>>>>
>>>>>>>>>>> This should be fairly easy for you guys who know regex. If I
>>>>>>>>>>> have a string that I want to enable versioning, so say for an 
>>>>>>>>>>> example I
>>>>>>>>>>> want to recognize a string if it contains ['v001', 'v002', etc...]
>>>>>>>>>>> I have something like this...
>>>>>>>>>>>
>>>>>>>>>>> remp= re.search('[0-9]+', 'hello_v001')
>>>>>>>>>>> print temp.group()
>>>>>>>>>>>
>>>>>>>>>>> but I dont want it to return when:
>>>>>>>>>>> remp= re.search('[0-9]+', 'hello_001')
>>>>>>>>>>> print temp.group()
>>>>>>>>>>>
>>>>>>>>>>> Thanks
>>>>>>>>>>> -Jeremy
>>>>>>>>>>>
>>>>>>>>>>>  --
>>>>>>>>>> You received this message because you are subscribed to the
>>>>>>>>>> Google Groups "Python Programming for Autodesk Maya" group.
>>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>>> send an email to [email protected].
>>>>>>>>>>  To view this discussion on the web visit
>>>>>>>>>> https://groups.google.com/d/msgid/python_inside_maya/ba398c57-19f8-4096-8524-07f609f1496c%40googlegroups.com<https://groups.google.com/d/msgid/python_inside_maya/ba398c57-19f8-4096-8524-07f609f1496c%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>>>>>> .
>>>>>>>>>>
>>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> *Marcus Ottosson*
>>>>>>>>> [email protected]
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>>> Groups "Python Programming for Autodesk Maya" group.
>>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>>> send an email to [email protected].
>>>>>>>>>  To view this discussion on the web visit
>>>>>>>>> https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD-0rkPSh1QZrzntoLmk7Fawst3%3DGHWmT5w0Fo0yEgn5Q%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD-0rkPSh1QZrzntoLmk7Fawst3%3DGHWmT5w0Fo0yEgn5Q%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>>> .
>>>>>>>>>
>>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Stefan Andersson | Digital Janitor
>>>>>>>> social media -> "sanders3d"
>>>>>>>>
>>>>>>>> --
>>>>>>>> You received this message because you are subscribed to the Google
>>>>>>>> Groups "Python Programming for Autodesk Maya" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>>>> send an email to [email protected].
>>>>>>>>  To view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/python_inside_maya/CAKW24e29hZ%3DgrJndzhGxpw1j%2BEgVPc6Oi%2Bdcop5d_DMTwxtxCg%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAKW24e29hZ%3DgrJndzhGxpw1j%2BEgVPc6Oi%2Bdcop5d_DMTwxtxCg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>>>> .
>>>>>>>>
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> *Marcus Ottosson*
>>>>>>> [email protected]
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> *Marcus Ottosson*
>>>>>> [email protected]
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Python Programming for Autodesk Maya" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to [email protected].
>>>>>>  To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB1gRWVdmQW%3DpN83Th9tRfcgpquF135%2BnZw5uHf%3DFSN1g%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB1gRWVdmQW%3DpN83Th9tRfcgpquF135%2BnZw5uHf%3DFSN1g%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Stefan Andersson | Digital Janitor
>>>>> social media -> "sanders3d"
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Python Programming for Autodesk Maya" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to [email protected].
>>>>>  To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/python_inside_maya/CAKW24e3iNZDGBFTweCyBR%3DfYTFugtM%2BPYf9ZidDuHDDWM4Q-dQ%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAKW24e3iNZDGBFTweCyBR%3DfYTFugtM%2BPYf9ZidDuHDDWM4Q-dQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Python Programming for Autodesk Maya" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>>  To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA0h9_C7qLE6iy%3DLXtm9U%2BjCRpFEzupFn2zPEG-8FxjO3w%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA0h9_C7qLE6iy%3DLXtm9U%2BjCRpFEzupFn2zPEG-8FxjO3w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>>
>>> --
>>> Stefan Andersson | Digital Janitor
>>> social media -> "sanders3d"
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Python Programming for Autodesk Maya" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>>  To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/python_inside_maya/CAKW24e2TOXcVLf38S8ShKUGsZhZkrE0EWhqyewvLDUjoCKyJ_A%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAKW24e2TOXcVLf38S8ShKUGsZhZkrE0EWhqyewvLDUjoCKyJ_A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>
>>
>> --
>> *Marcus Ottosson*
>> [email protected]
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Python Programming for Autodesk Maya" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>>  To view this discussion on the web visit
>> https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD%3Dnvg0WiedApoPYVUoNoc7s6H3sVRn0wSw33_QPA%3DHVg%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOD%3Dnvg0WiedApoPYVUoNoc7s6H3sVRn0wSw33_QPA%3DHVg%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Python Programming for Autodesk Maya" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA2o4Zos4gsmmFWKZkNWs9N9OEAGNuZEh6e3OTMjH6HJ5w%40mail.gmail.com<https://groups.google.com/d/msgid/python_inside_maya/CAPGFgA2o4Zos4gsmmFWKZkNWs9N9OEAGNuZEh6e3OTMjH6HJ5w%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
> For more options, visit https://groups.google.com/d/optout.
>



-- 
*Marcus Ottosson*
[email protected]

-- 
You received this message because you are subscribed to the Google Groups 
"Python Programming for Autodesk Maya" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/python_inside_maya/CAFRtmOB6emfzNK%2BmJoLBG0JF79QdtUhgnk301vgf2LZGVMCTaA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to