Пример #1
0
class Scheduler(Thread):

    file_semaphore = Semaphore()

    def __init__(self,controller,dispatch,error):
        Thread.__init__(self)
        self.policy = policy.get_policy()
        self.controller = controller
        self.do_dispatch = dispatch
        self.error = error
        self.queue = Queue()
        self.queue.load()
        self.lock = Lock()
        self._quit = Event()

        self.add_queue = SyncQueue(0)
        self.num_run = 0
        self.log = get_logger()

    def job(self,id):
        return self.queue.get(id)

    def jobs(self):
        return self.queue.get()

    def save(self):
        self.queue.save()

    def add(self,item):
        if self.lock.acquire(0):
            self.queue.add(item)
            self.lock.release()
        else:
            self.add_queue.put(item)

    def add_url(self,url,referer=None):
        try:
            fd = urlopen(url,referer=referer)
            meta = fd.read()
            fullurl = fd.geturl()
            fd.close()
            save_torrent = 1
            if fullurl.startswith('file://'):
                torrent_file = urllib.unquote(url)
                if torrent_file.startswith('file://'):
                    torrent_file = torrent_file[7:]
            elif fullurl.startswith('file:/') and fullurl[8] == '|':
                torrent_file = urllib.unquote(url)
                torrent_file = torrent_file[7]+':'+torrent_file[9:]
                if torrent_file.find('Temporary Internet Files') >= 0:
                    filename = os.path.split(url)[1]
                    torrent_file = os.path.join(self.policy(policy.TORRENT_PATH),
                                                filename)
            else:
                filename = urllib.unquote(os.path.split(url)[1])
                torrent_file = os.path.join(self.policy(policy.TORRENT_PATH),
                                            filename)

            torrent_path = os.path.dirname(torrent_file)
            if not os.path.exists(torrent_path):
                os.mkdir(torrent_path)

            if save_torrent:
                fd = open(torrent_file,'wb')
                fd.write(meta)
                fd.close()

            #~ d = Download() #cbt
            
            try: #cbt
                rd = bdecode(meta) #cbt
                if rd['cbt_user'] == self.policy(policy.CBT_LOGIN): #cbt
                    dest_path = rd['cbt_path'] #cbt
            except: #cbt
                    dest_path = self.policy(policy.DEST_PATH) #cbt

            self.add(QueueEntry(torrent_file, dest_path=dest_path)) #cbt

        except Exception,why:
            return str(why)
Пример #2
0
class Agency(object):
  def __init__(self, name):
    self.name = name

    self.booked_phone = Queue()
    self.booked_cash = Queue()
    self.tickets = Queue()
    self.sold = Queue()

    self.load()

  def open(self):
    os.system("clear")
    print blue("Welcome to %s" % green(self.name))
    print blue("========================")
    while True:
      print red("How may I help you?")
      print yellow("1. Buy a ticket\n"
                   " 2. Book a ticket by phone\n"
                   " 3. Book a ticket\n"
                   " 4. Cancel booking\n"
                   " 5. See how many money do you have\n"
                   " 6. Goodbye!\n")

      option = raw_input(green("I want to: "))

      if option == "1":
        self.buy_ticket()

      if option == "2":
        self.book_ticket_by_phone()

      if option == "3":
        self.book_ticket()

      if option == "4":
        self.cancel_booking()

      if option == "5":
        self.money()

      if option == "6":
        break

  def ticket(self, in_queue):
    option = raw_input("Do you want a specific number?[Y/n]: ")
    if option in ['Y', 'y', 'YE', 'ye', 'YES', 'yes']:
      number = raw_input("Please insert a number: ")
      if number not in self.booked_phone and number not in self.booked_cash:
        number = self.tickets.find(number)
        in_queue.push(number)
        print "Your number is %s" % number[0]
      else:
        print "Number already taken"
        return self.buy_ticket()
    else:
      number = self.tickets.pop()
      self.booked_phone.push(number)
      print "Your ticket is %s" % number[0]

  def buy_ticket(self):
    self.ticket(self.sold)

  def book_ticket_by_phone(self):
    self.ticket(self.booked_phone)

  def book_ticket(self):
    self.ticket(self.booked_cash)

  def money(self):
    # get total from sold
    total = 0
    for ticket in self.sold:
      total += ticket[1]

    # get total from booked_with_cash
    for ticket in self.booked_cash:
      total += ticket[1]

    return total

  def cancel_booking(self):
    number = raw_input("Please enter the number: ")
    if number in self.booked_phone:
      self.booked_phone.find(number)

    if number in self.booked_cash:
      self.booked_cash.find(number)

    print "Thank you"

  def load(self):
    with open("logs/now") as f:
      content = json.load(f.read())

      self.booked_phone.load(content['phone'])
      self.booked_cash.load(content['cash'])
      self.tickets.load(content['tickets'])