Dear Gary,
Thank you so much for your help with this. Yes, I agree, it would  be good 
to have a standardised way of embedding Python functions (mainly for 
validations and automatic metadata field contents) available. As mentioned 
before, this should maybe become a feature request.
Bests, Chris

On Thursday, 9 October 2014 19:50:55 UTC+3, Gary D Walborn wrote:
>
> Chris,
>
>   I think this is something that you should probably do on the database 
> side.  Nonetheless, I did get the following code to work. 
>
> import datetime
> global_contract_date = datetime.datetime.now().date()
>
> def is_valid_contract_date(value):
>   from dateutil import parser
>   from django.core.exceptions import ValidationError
>   try:
>     dt = parser.parse(value)
>   except ValueError:
>     raise ValidationError('Invalid date')
>   global global_contract_date
>   global_contract_date = dt.date()
>   return dt.date().isoformat()
>
> def is_valid_expiry_date(value):
>   import datetime
>   global global_contract_date
>   if global_contract_date:
>     expiry_date = global_contract_date+datetime.timedelta(days=365)
>   else:
>     expiry_date = datetime.datetime.not().date()
>   return expiry_date.isoformat()
>
> *I would highly recommend that you do not do this! *There are just too 
> many things that can go wrong with this code. For example, because there is 
> an "Update" checkbox when editing metadata,  I can bring up the metadata, 
> change the "contract_date", uncheck the "Update" box behind 
> "contract_date", and click "Save".  The "expiry_date" will be updated with 
> the new value of "contract_date", but "contract_date" will not actually 
> change.  The end result is that the dates no longer correspond.  Also, 
> there are not constraints to make the "expiry_date" dependent on the 
> "contract_date".  As a result, I could add the "expiry_date" metadata type 
> to a document that does not even possess the "contract_date" metadata type, 
> making it completely meaningless.  There would have to be a major 
> "overhaul" of the metadata subsystem to make these kinds of things work 
> correctly.  
>
>    I think the use of validators (as I have implemented them) should be 
> limited to validating and, perhaps, normalizing the data (as there is 
> little harm that can be done by the latter).  
>
> Gary
>
> On Wed, Oct 8, 2014 at 4:07 AM, Christoph H. Larsen <
> [email protected] <javascript:>> wrote:
>
>> Dear All,
>>
>> I am afraid I need a wee bit more help here, which is entirely related to 
>> my limited experience with Django. Apologies.
>> Here is what I would like to do:
>> Imagine you have documents uploaded into Mayan EDMS that expire after a 
>> given period of time, such as warranty documents.
>> So, I should be able to create a metadata set, that contains both the 
>> date the documents gets uploaded into an "valid" folder, and and 
>> automatically completed expiry metatdata field which, in Python speak, 
>> would do something like as a minimum:
>>
>> from datetime import timedelta
>> VALIDITY_PERIOD = 365 
>> expiry_date = date_of_purchase + timedelta(days=VALIDITY_PERIOD)
>> In the stanza above, expiry_date should be calculated from another metadata 
>> field called, for instance date_of_purchase. How can this be achieved (for 
>> dummies!) in Mayan EDMS?
>> I guess once I have a worknig example on how to include Python functions in 
>> detail, I can easily do other things.
>> Thanks a million!
>> Chris
>>
>>
>>
>> On Wednesday, 10 September 2014 16:26:09 UTC+3, Gary D Walborn wrote:
>>
>>> Roberto,
>>>
>>>   Thanks.  I should have mentioned that I figured that out the other day 
>>> by looking at the source code.   Be aware that the current code does not 
>>> override "__builtins__", so it is possible to enter code in the LOOKUP area 
>>> to do anything that you want.  For example,
>>>
>>> __import__('my_custom_module').my_function()
>>>
>>> I think that is probably not intended, but it works.
>>>
>>> Gary W. 
>>>
>>> On Tuesday, September 9, 2014 2:22:12 PM UTC-4, Roberto Rosario wrote:
>>>>
>>>> Create you own custom settings.py file in mayan/settings directory:
>>>>
>>>> # my_settings.py file
>>>> from my_custom_module import my_function
>>>>
>>>> METADATA_AVAILABLE_MODELS = {'my_function': my_function}
>>>>
>>>> and launch Mayan with --settings=mayan.settings.my_settings.py
>>>>
>>>> now my_function should be available in the namespace of your metadata 
>>>> lookup snippets.
>>>>
>>>>
>>>> On Tuesday, September 9, 2014 8:59:02 AM UTC-4, Gary D Walborn wrote:
>>>>>
>>>>> I found a work-around for this, but I think it is also a huge security 
>>>>> hole in Mayan-EDMS.  I think I'll use it, but it will probably go away 
>>>>> when 
>>>>> (if) the security hole is fixed. :-(  
>>>>>
>>>>> On Thursday, September 4, 2014 3:48:38 PM UTC-4, Gary D Walborn wrote:
>>>>>>
>>>>>> I have written a python function (lets call it 'options') that 
>>>>>> returns a list of strings.  I would like to use this function to 
>>>>>> populate 
>>>>>> the drop-down lists in a metadata type.  I have tried all sorts of ways 
>>>>>> to 
>>>>>> do this, and none of them seem to work.  The documentation is very scant 
>>>>>> on 
>>>>>> this subject.  Can anyone provide any information on how this is 
>>>>>> supposed 
>>>>>> to work?
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Gary Walborn
>>>>>>
>>>>>>  -- 
>>
>> --- 
>> You received this message because you are subscribed to a topic in the 
>> Google Groups "Mayan EDMS" group.
>> To unsubscribe from this topic, visit 
>> https://groups.google.com/d/topic/mayan-edms/p-d9PvY3mc4/unsubscribe.
>> To unsubscribe from this group and all its topics, send an email to 
>> [email protected] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
>
> -- 
> Gary D. Walborn
> [email protected] <javascript:>
>
>  

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"Mayan EDMS" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to