Top

telemeta.cache module

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# Copyright (C) 2006-2010 Guillaume Pellerin, Parisson SARL

# This file is part of Telemeta.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Author: Guillaume Pellerin <yomguy@parisson.com>

import os
import xml.dom.minidom


class TelemetaCache(object):

    def __init__(self, dir, params=None):
        self.dir = dir
        self.params = params
        self.files = self.get_files()
        if not os.path.exists(dir):
            try:
                os.makedirs(dir)
            except IOError:
                raise 'Could not create the '+dir+' directory !'

    def get_files(self):
        list = []
        for root, dirs, files in os.walk(self.dir):
            for file in files:
                list.append(file)
        return list

    def add_file(self, file):
        self.files.append(file)


    def exists(self, file):
        #if not file in self.files:
        #    self.files = self.get_files()
        return file in self.files

    def delete_item_data(self, public_id):
        # public_id is the public_id of an item
        for file in self.files:
            if public_id in file:
                os.remove(self.dir + os.sep + file)

    def write_bin(self, data, file):
        path = self.dir + os.sep + file
        f = open(path, 'w')
        f.write(data)
        f.close()

    def read_bin(self, file):
        path = self.dir + os.sep + file
        f = open(path,  'r')
        data = f.read()
        f.close()
        return data

    def read_stream_bin(self, file):
        path = self.dir + os.sep + file
        chunk_size = 0x80000
        f = open(path,  'r')
        while True:
            chunk = f.read(chunk_size)
            if not len(chunk):
                f.close()
                break
            yield chunk

    def write_stream_bin(self, chunk, file_object):
        file_object.write(chunk)

    def read_analyzer_xml(self, file):
        list = []
        path = self.dir + os.sep + file
        f = open(path, "r")
        doc = xml.dom.minidom.parse(path)
        for data in doc.documentElement.getElementsByTagName('data') :
            name = data.getAttribute('name')
            id = data.getAttribute('id')
            unit = data.getAttribute('unit')
            value = data.getAttribute('value')
            list.append({'name': name, 'id': id, 'unit': unit, 'value': value})
        f.close()
        return list

    def write_analyzer_xml(self, data_list, file):
        path = self.dir + os.sep + file
        data = self.get_analyzer_xml(data_list)
        f = open(path, "w")
        f.write(data)
        f.close()

    def get_analyzer_xml(self, data_list):
        doc = xml.dom.minidom.Document()
        root = doc.createElement('telemeta')
        doc.appendChild(root)
        for data in data_list:
            name = data['name']
            id = data['id']
            unit = data['unit']
            value = data['value']
            node = doc.createElement('data')
            node.setAttribute('name', name)
            node.setAttribute('id', id)
            node.setAttribute('unit', unit)
            node.setAttribute('value', unicode(value))
            root.appendChild(node)
        return xml.dom.minidom.Document.toprettyxml(doc)

Classes

class TelemetaCache

class TelemetaCache(object):

    def __init__(self, dir, params=None):
        self.dir = dir
        self.params = params
        self.files = self.get_files()
        if not os.path.exists(dir):
            try:
                os.makedirs(dir)
            except IOError:
                raise 'Could not create the '+dir+' directory !'

    def get_files(self):
        list = []
        for root, dirs, files in os.walk(self.dir):
            for file in files:
                list.append(file)
        return list

    def add_file(self, file):
        self.files.append(file)


    def exists(self, file):
        #if not file in self.files:
        #    self.files = self.get_files()
        return file in self.files

    def delete_item_data(self, public_id):
        # public_id is the public_id of an item
        for file in self.files:
            if public_id in file:
                os.remove(self.dir + os.sep + file)

    def write_bin(self, data, file):
        path = self.dir + os.sep + file
        f = open(path, 'w')
        f.write(data)
        f.close()

    def read_bin(self, file):
        path = self.dir + os.sep + file
        f = open(path,  'r')
        data = f.read()
        f.close()
        return data

    def read_stream_bin(self, file):
        path = self.dir + os.sep + file
        chunk_size = 0x80000
        f = open(path,  'r')
        while True:
            chunk = f.read(chunk_size)
            if not len(chunk):
                f.close()
                break
            yield chunk

    def write_stream_bin(self, chunk, file_object):
        file_object.write(chunk)

    def read_analyzer_xml(self, file):
        list = []
        path = self.dir + os.sep + file
        f = open(path, "r")
        doc = xml.dom.minidom.parse(path)
        for data in doc.documentElement.getElementsByTagName('data') :
            name = data.getAttribute('name')
            id = data.getAttribute('id')
            unit = data.getAttribute('unit')
            value = data.getAttribute('value')
            list.append({'name': name, 'id': id, 'unit': unit, 'value': value})
        f.close()
        return list

    def write_analyzer_xml(self, data_list, file):
        path = self.dir + os.sep + file
        data = self.get_analyzer_xml(data_list)
        f = open(path, "w")
        f.write(data)
        f.close()

    def get_analyzer_xml(self, data_list):
        doc = xml.dom.minidom.Document()
        root = doc.createElement('telemeta')
        doc.appendChild(root)
        for data in data_list:
            name = data['name']
            id = data['id']
            unit = data['unit']
            value = data['value']
            node = doc.createElement('data')
            node.setAttribute('name', name)
            node.setAttribute('id', id)
            node.setAttribute('unit', unit)
            node.setAttribute('value', unicode(value))
            root.appendChild(node)
        return xml.dom.minidom.Document.toprettyxml(doc)

Ancestors (in MRO)

Instance variables

var dir

var files

var params

Methods

def __init__(

self, dir, params=None)

def __init__(self, dir, params=None):
    self.dir = dir
    self.params = params
    self.files = self.get_files()
    if not os.path.exists(dir):
        try:
            os.makedirs(dir)
        except IOError:
            raise 'Could not create the '+dir+' directory !'

def add_file(

self, file)

def add_file(self, file):
    self.files.append(file)

def delete_item_data(

self, public_id)

def delete_item_data(self, public_id):
    # public_id is the public_id of an item
    for file in self.files:
        if public_id in file:
            os.remove(self.dir + os.sep + file)

def exists(

self, file)

def exists(self, file):
    #if not file in self.files:
    #    self.files = self.get_files()
    return file in self.files

def get_analyzer_xml(

self, data_list)

def get_analyzer_xml(self, data_list):
    doc = xml.dom.minidom.Document()
    root = doc.createElement('telemeta')
    doc.appendChild(root)
    for data in data_list:
        name = data['name']
        id = data['id']
        unit = data['unit']
        value = data['value']
        node = doc.createElement('data')
        node.setAttribute('name', name)
        node.setAttribute('id', id)
        node.setAttribute('unit', unit)
        node.setAttribute('value', unicode(value))
        root.appendChild(node)
    return xml.dom.minidom.Document.toprettyxml(doc)

def get_files(

self)

def get_files(self):
    list = []
    for root, dirs, files in os.walk(self.dir):
        for file in files:
            list.append(file)
    return list

def read_analyzer_xml(

self, file)

def read_analyzer_xml(self, file):
    list = []
    path = self.dir + os.sep + file
    f = open(path, "r")
    doc = xml.dom.minidom.parse(path)
    for data in doc.documentElement.getElementsByTagName('data') :
        name = data.getAttribute('name')
        id = data.getAttribute('id')
        unit = data.getAttribute('unit')
        value = data.getAttribute('value')
        list.append({'name': name, 'id': id, 'unit': unit, 'value': value})
    f.close()
    return list

def read_bin(

self, file)

def read_bin(self, file):
    path = self.dir + os.sep + file
    f = open(path,  'r')
    data = f.read()
    f.close()
    return data

def read_stream_bin(

self, file)

def read_stream_bin(self, file):
    path = self.dir + os.sep + file
    chunk_size = 0x80000
    f = open(path,  'r')
    while True:
        chunk = f.read(chunk_size)
        if not len(chunk):
            f.close()
            break
        yield chunk

def write_analyzer_xml(

self, data_list, file)

def write_analyzer_xml(self, data_list, file):
    path = self.dir + os.sep + file
    data = self.get_analyzer_xml(data_list)
    f = open(path, "w")
    f.write(data)
    f.close()

def write_bin(

self, data, file)

def write_bin(self, data, file):
    path = self.dir + os.sep + file
    f = open(path, 'w')
    f.write(data)
    f.close()

def write_stream_bin(

self, chunk, file_object)

def write_stream_bin(self, chunk, file_object):
    file_object.write(chunk)