Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Terse Syntax through External Methods

Reply
Thread Tools

Terse Syntax through External Methods

 
 
Jens
Guest
Posts: n/a
 
      01-25-2008
Hello Everyone

I'm newbie to Zope and i have a few questions regarding external
methods. What i wan't to do
is provide a terse syntax for converting urls to special tracking
urls:

<dtml-var "track('http://myurl/')">

turns the provided url into something like

http://host/tracking?url=http%3A%2F%2Fmyurl%2F

in the output.

i've been trying to use a external procedure like this.

## Script (Python) "track_link"
##bind container=container
##bind context=context
##bind namespace=_
##bind script=script
##bind subpath=traverse_subpath
##parameters=self,url
##title=track link
##
return "%s%s" % (self.tracking_prefix, url_quote(url))

This doesn't work because because the method doesn't have access to
the environment. Obviously I don't wan't to pass everything explicitly
into the function as this would defeat the purpose of the exercise,
namely to provide a terse syntax.

I have a background in other languages so I might be missing something
conceptually with regard Zope and DTML.. Is there a better was of
doing this, perhaps without using external methods? Currently im doing
the following which isn't very elegant:

in content document
<a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
tracking></dtml-let>">link</a>
....
tracking:
<dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>

Appreciate any input you might have on this-


 
Reply With Quote
 
 
 
 
Diez B. Roggisch
Guest
Posts: n/a
 
      01-25-2008
Jens schrieb:
> Hello Everyone
>
> I'm newbie to Zope and i have a few questions regarding external
> methods. What i wan't to do
> is provide a terse syntax for converting urls to special tracking
> urls:
>
> <dtml-var "track('http://myurl/')">
>
> turns the provided url into something like
>
> http://host/tracking?url=http%3A%2F%2Fmyurl%2F
>
> in the output.
>
> i've been trying to use a external procedure like this.
>
> ## Script (Python) "track_link"
> ##bind container=container
> ##bind context=context
> ##bind namespace=_
> ##bind script=script
> ##bind subpath=traverse_subpath
> ##parameters=self,url
> ##title=track link
> ##
> return "%s%s" % (self.tracking_prefix, url_quote(url))
>
> This doesn't work because because the method doesn't have access to
> the environment. Obviously I don't wan't to pass everything explicitly
> into the function as this would defeat the purpose of the exercise,
> namely to provide a terse syntax.
>
> I have a background in other languages so I might be missing something
> conceptually with regard Zope and DTML.. Is there a better was of
> doing this, perhaps without using external methods? Currently im doing
> the following which isn't very elegant:
>
> in content document
> <a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
> tracking></dtml-let>">link</a>
> ...
> tracking:
> <dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>
>
> Appreciate any input you might have on this-


Is it really needed to use an external method for this, or isn't a
"normal" python script enough already?

If it has to be an External method, you can't access such a context
AFAIK. But then you can create a python script that _has_ this context,
and passese it to the external method. Not the nicest solution, but
should work.

Diez
 
Reply With Quote
 
 
 
 
Jens
Guest
Posts: n/a
 
      01-29-2008
On Jan 25, 3:19 pm, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
> Jens schrieb:
>
>
>
> > Hello Everyone

>
> > I'm newbie to Zope and i have a few questions regarding external
> > methods. What i wan't to do
> > is provide a terse syntax for converting urls to special tracking
> > urls:

>
> > <dtml-var "track('http://myurl/')">

>
> > turns the provided url into something like

>
> >http://host/tracking?url=http%3A%2F%2Fmyurl%2F

>
> > in the output.

>
> > i've been trying to use a external procedure like this.

>
> > ## Script (Python) "track_link"
> > ##bind container=container
> > ##bind context=context
> > ##bind namespace=_
> > ##bind script=script
> > ##bind subpath=traverse_subpath
> > ##parameters=self,url
> > ##title=track link
> > ##
> > return "%s%s" % (self.tracking_prefix, url_quote(url))

>
> > This doesn't work because because the method doesn't have access to
> > the environment. Obviously I don't wan't to pass everything explicitly
> > into the function as this would defeat the purpose of the exercise,
> > namely to provide a terse syntax.

>
> > I have a background in other languages so I might be missing something
> > conceptually with regard Zope and DTML.. Is there a better was of
> > doing this, perhaps without using external methods? Currently im doing
> > the following which isn't very elegant:

>
> > in content document
> > <a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
> > tracking></dtml-let>">link</a>
> > ...
> > tracking:
> > <dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>

>
> > Appreciate any input you might have on this-

>
> Is it really needed to use an external method for this, or isn't a
> "normal" python script enough already?
>
> If it has to be an External method, you can't access such a context
> AFAIK. But then you can create a python script that _has_ this context,
> and passese it to the external method. Not the nicest solution, but
> should work.
>
> Diez


Like I said i'm a newbie. I though the deal with Zope was that i
couldn't really do inline scripting (for security reasons)
like in php but had to use these external methods. how does one go
about creating a "normal" python script exactly and
how do I invoke it's functionality?
 
Reply With Quote
 
Bruno Desthuilliers
Guest
Posts: n/a
 
      01-29-2008
Jens a écrit :
> On Jan 25, 3:19 pm, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
>> Jens schrieb:
>>
>>
>>
>>> Hello Everyone
>>> I'm newbie to Zope and i have a few questions regarding external
>>> methods.

(snip)
>>> This doesn't work because because the method doesn't have access to
>>> the environment.


>> If it has to be an External method, you can't access such a context
>> AFAIK.


IIRC, that's what the 'self' argument is for. Now I don't know if it
will solve the OP's problem with dtml (which I avoid like pest).

>> But then you can create a python script that _has_ this context,
>> and passese it to the external method. Not the nicest solution, but
>> should work.
>>

>
> Like I said i'm a newbie. I though the deal with Zope was that i
> couldn't really do inline scripting (for security reasons)
> like in php but had to use these external methods. how does one go
> about creating a "normal" python script exactly and
> how do I invoke it's functionality?


Zope (well... Zope2.x) has an object type named "Script (Python)". What
you can do with them is restricted (for security reasons) but is
obviously enough for what you want here. And really, you should *not*
use dtml unless you have no other choice at all.

Anyway: Zope is a world in itself, and most pythoneers don't use it. The
Zope experts are mostly on the Zope's mailing list, so that's where you
should post such questions.

HTH
 
Reply With Quote
 
Diez B. Roggisch
Guest
Posts: n/a
 
      01-29-2008
Jens schrieb:
> On Jan 25, 3:19 pm, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
>> Jens schrieb:
>>
>>
>>
>>> Hello Everyone
>>> I'm newbie to Zope and i have a few questions regarding external
>>> methods. What i wan't to do
>>> is provide a terse syntax for converting urls to special tracking
>>> urls:
>>> <dtml-var "track('http://myurl/')">
>>> turns the provided url into something like
>>> http://host/tracking?url=http%3A%2F%2Fmyurl%2F
>>> in the output.
>>> i've been trying to use a external procedure like this.
>>> ## Script (Python) "track_link"
>>> ##bind container=container
>>> ##bind context=context
>>> ##bind namespace=_
>>> ##bind script=script
>>> ##bind subpath=traverse_subpath
>>> ##parameters=self,url
>>> ##title=track link
>>> ##
>>> return "%s%s" % (self.tracking_prefix, url_quote(url))
>>> This doesn't work because because the method doesn't have access to
>>> the environment. Obviously I don't wan't to pass everything explicitly
>>> into the function as this would defeat the purpose of the exercise,
>>> namely to provide a terse syntax.
>>> I have a background in other languages so I might be missing something
>>> conceptually with regard Zope and DTML.. Is there a better was of
>>> doing this, perhaps without using external methods? Currently im doing
>>> the following which isn't very elegant:
>>> in content document
>>> <a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
>>> tracking></dtml-let>">link</a>
>>> ...
>>> tracking:
>>> <dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>
>>> Appreciate any input you might have on this-

>> Is it really needed to use an external method for this, or isn't a
>> "normal" python script enough already?
>>
>> If it has to be an External method, you can't access such a context
>> AFAIK. But then you can create a python script that _has_ this context,
>> and passese it to the external method. Not the nicest solution, but
>> should work.
>>
>> Diez

>
> Like I said i'm a newbie. I though the deal with Zope was that i
> couldn't really do inline scripting (for security reasons)
> like in php but had to use these external methods. how does one go
> about creating a "normal" python script exactly and
> how do I invoke it's functionality?


Read the docs:

http://www.zope.org/Documentation/Bo...iptingZope.stx

There's everything in there you need.

Diez
 
Reply With Quote
 
aggergren@gmail.com
Guest
Posts: n/a
 
      02-04-2008
On Jan 29, 11:50 pm, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
> Jens schrieb:
>
>
>
> > On Jan 25, 3:19 pm, "Diez B. Roggisch" <(E-Mail Removed)> wrote:
> >> Jens schrieb:

>
> >>> Hello Everyone
> >>> I'm newbie toZopeand i have a few questions regarding external
> >>> methods. What i wan't to do
> >>> is provide a terse syntax for converting urls to special tracking
> >>> urls:
> >>> <dtml-var "track('http://myurl/')">
> >>> turns the provided url into something like
> >>>http://host/tracking?url=http%3A%2F%2Fmyurl%2F
> >>> in the output.
> >>> i've been trying to use a external procedure like this.
> >>> ## Script (Python) "track_link"
> >>> ##bind container=container
> >>> ##bind context=context
> >>> ##bind namespace=_
> >>> ##bind script=script
> >>> ##bind subpath=traverse_subpath
> >>> ##parameters=self,url
> >>> ##title=track link
> >>> ##
> >>> return "%s%s" % (self.tracking_prefix, url_quote(url))
> >>> This doesn't work because because the method doesn't have access to
> >>> the environment. Obviously I don't wan't to pass everything explicitly
> >>> into the function as this would defeat the purpose of the exercise,
> >>> namely to provide a terse syntax.
> >>> I have a background in other languages so I might be missing something
> >>> conceptually with regardZopeand DTML.. Is there a better was of
> >>> doing this, perhaps without using external methods? Currently im doing
> >>> the following which isn't very elegant:
> >>> in content document
> >>> <a href="<dtml-let exturl="'http://www.mylink.com/"><dtml-var
> >>> tracking></dtml-let>">link</a>
> >>> ...
> >>> tracking:
> >>> <dtml-var tracking_prefix><dtml-var name="exturl" url_quote_plus>
> >>> Appreciate any input you might have on this-
> >> Is it really needed to use an external method for this, or isn't a
> >> "normal" python script enough already?

>
> >> If it has to be an External method, you can't access such a context
> >> AFAIK. But then you can create a python script that _has_ this context,
> >> and passese it to the external method. Not the nicest solution, but
> >> should work.

>
> >> Diez

>
> > Like I said i'm a newbie. I though the deal withZopewas that i
> > couldn't really do inline scripting (for security reasons)
> > like in php but had to use these external methods. how does one go
> > about creating a "normal" python script exactly and
> > how do I invoke it's functionality?

>
> Read the docs:
>
> http://www.zope.org/Documentation/Bo...tion/Scripting...
>
> There's everything in there you need.
>
> Diez


Thanks, this is exactly what i needed. And Btw. the answer is to use
the 'context' keyword.

- Jens

P.S. And thanks to everyone else for their feedback
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there a way to find the class methods of a class, just like'methods' finds the instance methods? Kenneth McDonald Ruby 5 09-26-2008 03:09 PM
[ANN] SqlStatement 1.0.0 - hide the syntax of SQL behind familiarruby syntax Ken Bloom Ruby 3 10-09-2006 06:46 PM
Getting terse tracebacks? Roy Smith Python 1 01-02-2006 03:50 AM
Syntax highligth with textile: Syntax+RedCloth ? gabriele renzi Ruby 2 12-31-2005 02:44 AM
Enzte is a ripoff terse chief Denise Vela Python 0 06-03-2004 06:33 AM



Advertisments