2015-08-17 1 views
0

https://pypi.python.org/pypi/DateTime mentionne qu'il est préférable d'utiliser python datetime plutôt que Zope DateTime. Je crois que cela est fait en invoquant des méthodes externes. Existe-t-il un autre moyen de le faire, car je ne pense pas que l'on aimerait créer une méthode externe pour tout le genre de choses qui doivent être importées?Utilisation de Python datetime au lieu de Zope DateTime

+0

Vous devriez poser des questions séparées séparément. De plus, la première question n'est pas claire et la seconde vague. Qu'es-tu en train de faire? – Cyphase

+0

Ont supprimé la deuxième question. Dans Zope, chaque fois qu'un nouveau script Python est créé en utilisant ZMI, il est en mode restreint et en tant que tel, il ne peut pas importer des modules Python comme datetime, etc. La seule façon de le faire est d'écrire la logique sur le système de fichiers. Méthode externe de Zope. Ma question était de trouver une approche alternative à cela. – Ravi

+0

Je ne connais pas Zope, mais pourquoi ne pas utiliser Zope DateTime? Pour inverser l'ordre de cela, la description du paquet indique: «Il vaut probablement mieux utiliser le module datetime intégré de Python ... sauf si vous avez besoin de communiquer avec les API de Zope 2». – Cyphase

Répondre

0

La classe DateTime du module DateTime peut être importée en mode restreint Zope simplement parce qu'elle est déclarée publique dans le package AccessControl. Dans son haut niveau __init__.py

ModuleSecurityInfo('DateTime').declarePublic('DateTime') 

Il contient également cette option pour permettre l'importation de quatre autres services publics importations builtin

for name in ('string', 'math', 'random', 'sets'): 
    ModuleSecurityInfo(name).setDefaultAccess('allow') 

Donc, pour ce faire, vous devez ajouter des lignes similaires à la __init__.py de votre colis Zope (ou en créer un si vous avez pas déjà, see this tutorial), par exemple:

from AccessControl import ModuleSecurityInfo 
# just a specific class 
ModuleSecurityInfo('datetime').declarePublic('datetime') 
# or at a broader level for the entire module 
ModuleSecurityInfo('datetime').setDefaultAccess('allow') 

Ceci suppose bien entendu l'ensemble datetime est assez fiable pour ne pas pouvoir entraîner une attaque contre votre instance de Zope.