import repository from arizona
[raven.git] / apps / gacks / gackscomponent.py
1 ##
2 # Gacks Component
3 ##
4
5 import tempfile
6 import os
7
8 import sys
9
10 from cert import *
11 from gid import *
12 from geniserver import *
13 from excep import *
14 from trustedroot import *
15 from misc import *
16 from record import *
17 from geniticket import *
18
19 from gacksexcep import *
20 from gackscalendar import *
21
22 ##
23 # GacksComponent is a GeniServer
24 #
25
26 class GacksComponent(GeniServer):
27
28     ##
29     # Create a new GacksComponent object.
30     #
31     # @param ip the ip address to listen on
32     # @param port the port to listen on
33     # @param key_file private key filename of registry
34     # @param cert_file certificate filename containing public key (could be a GID file)
35
36     def __init__(self, ip, port, key_file, cert_file):
37         GeniServer.__init__(self, ip, port, key_file, cert_file)
38
39     def submit_receipt(self, receipt_str):
40         receipt = GacksReceipt(string = receipt_str)
41
42         reclist = receipt.get_records()
43         for rec in reclist:
44             existing_recs = self.calendar.query_handles([rec])
45
46             for rec in existing_recs:
47                 if receipt.GetSequence() < rec.GetSequence():
48                     raise GacksOutOfDateSequence(receipt.GetSubject())
49
50             # remove any old records for this resource/time period
51             for remove_rec in existing_recs:
52                 self.calendar.remove_record(remove_rec)
53
54             # insert the new record in the calendar
55             self.calendar.insert_record(add_rec)
56
57