Ignore:
Timestamp:
Jan 11, 2012, 6:58:43 PM (12 years ago)
Author:
Jessica B. Hamrick <jhamrick@…>
Branches:
no-cups
Children:
09790fe
Parents:
4126d3d
git-author:
Jessica B. Hamrick <jhamrick@…> (01/11/12 18:58:43)
git-committer:
Jessica B. Hamrick <jhamrick@…> (01/11/12 18:58:43)
Message:

Keep IPP code in GutenbachPrinter?, not in GutenbachJob?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • server/lib/gutenbach/server/job.py

    r34a4e5d r33ea505  
    1 from . import InvalidJobStateException, MissingDataException
     1from .errors import InvalidJobStateException, MissingDataException
    22from .player import Player
    33from gutenbach.ipp import JobStates as States
     4import logging
    45import os
    5 import gutenbach.ipp as ipp
    6 import logging
    76
    87# initialize logger
    98logger = logging.getLogger(__name__)
    109
    11 class Job(object):
     10class GutenbachJob(object):
    1211
    13     # for IPP
    14     attributes = [
    15         "job-id",
    16         "job-name",
    17         "job-originating-user-name",
    18         "job-k-octets",
    19         "job-state",
    20         "job-printer-uri"
    21     ]
    22 
    23     def __init__(self, job_id=-1, printer=None, creator=None, name=None, size=None):
     12    def __init__(self, job_id=None, creator=None, name=None):
    2413        """Create an empty Gutenbach job.
    2514
    2615        """
    2716
    28         self.printer = printer
    2917        self.player = None
    3018
     
    3220        self.creator = creator
    3321        self.name = name
    34         self.size = size
    3522        self.state = States.HELD
    3623        self.priority = 1
     24        self.document = None
    3725
    38         self.document_name = None
    39         self.document_format = None
    40         self.document_natural_language = None
    41         self.compression = None
    42    
    4326    def __repr__(self):
    4427        return str(self)
     
    6750        except TypeError:
    6851            self._id = -1
    69 
    70     @property
    71     def uri(self):
    72         return self.uris[0]
    73 
    74     @property
    75     def uris(self):
    76         return ["ipp://localhost/jobs/%d" % self.id,
    77                 "ipp://localhost:8000/jobs/%d" % self.id]
    7852
    7953    @property
     
    10983
    11084        """
    111         return self._size
    112     @size.setter
    113     def size(self, val):
    11485        try:
    115             self._size = int(val)
    116         except TypeError:
    117             self._size = 0
     86            size = os.path.getsize(self.document)
     87        except:
     88            size = 0
     89        return size
    11890
    11991    @property
     
    135107    ######################################################################
    136108
     109    def spool(self, document, username=None):
     110        if self.state != States.HELD:
     111            raise InvalidJobStateException(self.state)
     112
     113        self.document = document.name
     114        self.player = Player(document)
     115        self.creator = username
     116        self.state = States.PENDING
     117
     118        logger.debug("document for job %d is '%s'" % (self.id, self.document))
     119
     120
    137121    def play(self):
    138         """Non-blocking play function.
     122        """Non-blocking play function.  Sets the job state to
     123        PROCESSING.
     124
     125        Raises
     126        ------
     127        InvalidJobStateException
     128            If the job is not ready to be played.
    139129
    140130        """
     
    142132        # make sure the job is waiting to be played and that it's
    143133        # valid
    144         if self.state != States.PENDING:
     134        if not self.is_ready:
    145135            raise InvalidJobStateException(self.state)
    146136       
    147137        # and set the state to processing if we're good to go
    148138        logger.info("playing job %s" % str(self))
     139
     140        def _completed():
     141            logger.info("completed job %s" % str(self))
     142            self.state = States.COMPLETE
     143            self.player = None
     144
    149145        self.state = States.PROCESSING
    150         self.player.callback = self._completed
     146        self.player.callback = _completed
    151147        self.player.start()
    152148
    153149    def pause(self):
    154         if self.is_playing:
    155             self.player.mplayer_pause()
    156             self.state = States.STOPPED
     150        """Non-blocking pause function.  Sets the job state to
     151        STOPPED.
     152
     153        """
     154       
     155        if not self.is_playing:
     156            raise InvalidJobStateException(self.state)
     157       
     158        self.player.mplayer_pause()
     159        self.state = States.STOPPED
    157160
    158161    def cancel(self):
     162        def _canceled():
     163            logger.info("canceled job %s" % str(self))
     164            self.state = States.CANCELLED
     165            self.player = None
     166
    159167        if self.is_playing:
    160             self.player.callback = self._canceled
     168            self.player.callback = _canceled
    161169            self.player.mplayer_stop()
     170        elif self.is_finished:
     171            raise InvalidJobStateException(self.state)
     172       
    162173        self.state = States.CANCELLED
    163174
    164175    def abort(self):
     176        def _aborted():
     177            logger.info("aborted job %s" % str(self))
     178            self.state = States.ABORTED
     179            self.player = None
     180
    165181        if self.is_playing:
    166             self.player.callback = self._aborted
     182            self.player.callback = _aborted
    167183            self.player.mplayer_stop()
    168         self.state = states.ABORTED
    169 
    170     def _completed(self):
    171         logger.info("completed job %s" % str(self))
    172         self.state = States.COMPLETE
    173         self.player = None
    174 
    175     def _canceled(self):
    176         logger.info("canceled job %s" % str(self))
    177         self.state = States.CANCELLED
    178         self.player = None
    179 
    180     def _aborted(self):
    181         logger.info("aborted job %s" % str(self))
     184        elif self.is_finished:
     185            raise InvalidJobStateException(self.state)
     186       
    182187        self.state = States.ABORTED
    183         self.player = None
    184 
    185     ######################################################################
    186     ###                        IPP Attributes                          ###
    187     ######################################################################
    188 
    189     @property
    190     def job_id(self):
    191         return ipp.JobId(self.id)
    192 
    193     @property
    194     def job_name(self):
    195         return ipp.JobName(self.name)
    196 
    197     @property
    198     def job_originating_user_name(self):
    199         return ipp.JobOriginatingUserName(self.creator)
    200 
    201     @property
    202     def job_k_octets(self):
    203         return ipp.JobKOctets(self.size)
    204 
    205     @property
    206     def job_state(self):
    207         return ipp.JobState(self.state)
    208 
    209     @property
    210     def job_printer_uri(self):
    211         return ipp.JobPrinterUri(self.printer.uri)
    212188
    213189
    214     ######################################################################
    215     ###                        IPP Operations                          ###
    216     ######################################################################
    217 
    218     def cancel_job(self):
    219         pass
    220 
    221     def send_document(self, document, document_name=None,
    222                       document_format=None, document_natural_language=None,
    223                       requesting_user_name=None, compression=None,
    224                       last_document=None):
    225 
    226         if self.state != States.HELD:
    227             raise InvalidJobStateException(self.state)
    228 
    229         self.player = Player(document)
    230 
    231         if self.size == 0:
    232             self.size = os.path.getsize(document.name)
    233        
    234         self.document_name = str(document_name)
    235         self.document_format = str(document_format)
    236         self.document_natural_language = str(document_natural_language)
    237         self.creator = str(requesting_user_name)
    238         self.compression = str(compression)
    239         self.state = States.PENDING
    240 
    241         logger.debug("document for job %d is '%s'" % (self.id, self.document_name))
    242 
    243     def send_uri(self):
    244         pass
    245 
    246     def get_job_attributes(self, requested_attributes=None):
    247         if requested_attributes is None:
    248             requested = self.attributes
    249         else:
    250             requested = [a for a in self.attributes if a in requested_attributes]
    251 
    252         _attributes = [attr.replace("-", "_") for attr in requested]
    253         attributes = [getattr(self, attr) for attr in _attributes]
    254         return attributes
    255 
    256     def set_job_attributes(self):
    257         pass
    258 
    259     def restart_job(self):
    260         pass
    261 
    262     def promote_job(self):
    263         pass
Note: See TracChangeset for help on using the changeset viewer.