Changeset 30

Show
Ignore:
Timestamp:
06/24/06 15:28:19 (16 years ago)
Author:
jerome
Message:

It's now possible to cancel existing subscriptions.

Location:
pkipplib/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • pkipplib/trunk/bin/cupssubscribe

    r29 r30  
    2121# $Id$ 
    2222 
     23"""cupssubscribe is a command line tool which can be used to create 
     24or delete IPP subscriptions.""" 
     25 
    2326import sys 
    2427import locale 
     
    3740    except : 
    3841        gettext.NullTranslations().install() 
    39     parser = optparse.OptionParser(usage="cupssubscribe [options]") 
     42    parser = optparse.OptionParser(usage="cupssubscribe [options] [subscriptions ids]") 
    4043    parser.add_option("-v", "--version",  
    4144                            action="store_true",  
     
    5053                            dest="debug", 
    5154                            help=_("activate debug mode.")) 
     55    parser.add_option("-X", "--delete",  
     56                            action="store_true",  
     57                            dest="delete", 
     58                            help=_("deletes subscriptions.")) 
    5259    parser.add_option("-p", "--printer",  
    5360                            dest="printer", 
     
    94101        print "cupssubscribe v%(__version__)s" % globals() 
    95102    else : 
    96         if not options.events : 
     103        if not options.events and not options.delete : 
    97104            sys.stderr.write(_("You MUST pass a list of events to subscribe to.\n")) 
    98         elif not options.cups :     
    99             sys.stderr.write(_("You MUST pass an URL to the CUPS server.\n")) 
    100         elif not options.recipient :     
     105        elif not options.recipient and not options.delete :     
    101106            sys.stderr.write(_("You MUST pass a recipient for the subscription.\n")) 
     107        elif options.delete and not arguments :     
     108            sys.stderr.write(_("You MUST pass a subscriptions ids at the end of your command line.\n")) 
    102109        else :     
    103110            cups = pkipplib.CUPS(options.cups, 
     
    114121            else :     
    115122                url = baseurl 
    116             answer = cups.createSubscription(url, 
    117                                              [e.strip() for e in options.events.split(",")], 
    118                                              userdata=options.userdata, 
    119                                              recipient=options.recipient, 
    120                                              pullmethod=options.pullmethod, 
    121                                              charset=options.charset, 
    122                                              naturallanguage=options.language, 
    123                                              leaseduration=options.duration, 
    124                                              timeinterval=options.interval, 
    125                                              jobid=options.job) 
    126             try :                                  
    127                 subscriptionid = answer.subscription["notify-subscription-id"][0][1] 
    128             except KeyError : 
    129                 sys.stderr.write("%s\n" % answer.operation["status-message"][0][1]) 
    130             else :     
    131                 print "Subscription %i registered." % subscriptionid 
     123            if not options.delete :     
     124                answer = cups.createSubscription(url, 
     125                                                 [e.strip() for e in options.events.split(",")], 
     126                                                 userdata=options.userdata, 
     127                                                 recipient=options.recipient, 
     128                                                 pullmethod=options.pullmethod, 
     129                                                 charset=options.charset, 
     130                                                 naturallanguage=options.language, 
     131                                                 leaseduration=options.duration, 
     132                                                 timeinterval=options.interval, 
     133                                                 jobid=options.job) 
     134                try :                                  
     135                    subscriptionid = answer.subscription["notify-subscription-id"][0][1] 
     136                except KeyError : 
     137                    sys.stderr.write("%s\n" % answer.operation["status-message"][0][1]) 
     138                else :     
     139                    print "Subscription %i registered." % subscriptionid 
     140            else :         
     141                for subid in [int(arg) for arg in arguments] : 
     142                    answer = cups.cancelSubscription(url, subid, options.job) 
     143                    try : 
     144                        error = answer.operation["status-message"][0][1] 
     145                    except KeyError :     
     146                        print "Subscription %i cancelled." % subid 
     147                    else : 
     148                        sys.stderr.write("%s\n" % error) 
    132149 
  • pkipplib/trunk/pkipplib/pkipplib.py

    r28 r30  
    716716                                      timeinterval=None, 
    717717                                      jobid=None) : 
    718         """Creates a printer or server subscription.""" 
    719         req = self.newRequest(IPP_CREATE_PRINTER_SUBSCRIPTION) 
    720         req.operation["printer-uri"] = ("uri", uri) 
     718        """Creates a job, printer or server subscription.""" 
     719        if jobid is not None : 
     720            opid = IPP_CREATE_JOB_SUBSCRIPTION 
     721            uritype = "job-uri" 
     722        else : 
     723            opid = IPP_CREATE_PRINTER_SUBSCRIPTION 
     724            uritype = "printer-uri" 
     725        req = self.newRequest(opid) 
     726        req.operation[uritype] = ("uri", uri) 
    721727        for event in events : 
    722728            req.subscription["notify-events"] = ("keyword", event) 
     
    739745        return self.doRequest(req) 
    740746             
     747    def cancelSubscription(self, uri, subscriptionid, jobid=None) :     
     748        """Cancels a subscription.""" 
     749        req = self.newRequest(IPP_CANCEL_SUBSCRIPTION) 
     750        if jobid is not None : 
     751            uritype = "job-uri" 
     752        else : 
     753            uritype = "printer-uri" 
     754        req.operation[uritype] = ("uri", uri) 
     755        req.event_notification["notify-subscription-id"] = ("integer", subscriptionid) 
     756        return self.doRequest(req) 
    741757         
    742758if __name__ == "__main__" :