view JSONClient.py @ 0:e8640aa396cd

initial
author dwinter
date Thu, 13 Oct 2011 10:51:54 +0200
parents
children 0ed5ecf36693
line wrap: on
line source

from OFS.SimpleItem import SimpleItem
from Globals import package_home
import json
import SrvTxtUtils
import urllib
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
import os
import os.path
import logging

class JSONClient(SimpleItem):
    meta_type="JSONClient"
    
    def __init__(self,id,url):
        """init"""
        self.id=id
        self.url=url
        
    def json(self,method,params={}):
        """json aufruf"""
        
        paramString=urllib.urlencode(params)
        callUrl = self.url%(method,paramString)
        txt=SrvTxtUtils.getHttpData(callUrl)
        logging.debug(txt)
        obj= json.loads(txt)
        return obj


    def mapEntityAttributesToData(self,entity,type):
        attrs=entity.get('attributes')
        attrsHash={}
        for attr in attrs:
            attrsHash[attr.get('name')]=attr.get('ownValue')
        attrsHash['@type']=type
        return attrsHash
        
    def getOV(self,entId):
        obj=self.json("getEntity", {'entId':entId})
        return obj.get('entity').get('ownValue')
    
    def getRelationFromEntity(self,jsonHash,type="srcRelations",relName=None,maxNum=30):
        hash=jsonHash.get("entity")
        logging.debug(type)
        logging.debug(".................")
        logging.debug(hash)
        rels = hash.get(type,None)
        logging.debug(".................")
        logging.debug(rels)
        
        if (rels is None) or (relName is None):
            logging.debug("return")
            return rels
        ret=[]
        
        
        counter=0
        for rel in rels:
            if rel.get("name","")==relName:
                counter+=1
                ret.append(rel)
                if counter > maxNum:
                    break
     
        logging.debug("++++++++++++++++++++++++++++++")
        logging.debug(rels)
        return ret
        
def manage_addJSONClient(self,id,url,RESPONSE=None):
    """add a json client"""
    

    newObj=JSONClient(id,url)
    self._setObject(id,newObj)

   
    if RESPONSE is not None:
        RESPONSE.redirect('manage_main')
        
def manage_addJSONClientForm(self):
    """form for adding JSONClient"""
    pt=zptFile(self, 'zpt/AddJSONClientForm.zpt')
    
    return pt()
    
def zptFile(self, path, orphaned=False):
    """returns a page template file from the product"""
    if orphaned:
        # unusual case
        pt=PageTemplateFile(os.path.join(package_home(globals()), path))
    else:
      
            pt=PageTemplateFile(os.path.join(package_home(globals()), path)).__of__(self)
    return pt