def removeClientFromChannel(request, channelName, client): """ Remove client from channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type client: C{string} @param client: Unique Client ID. """ import sputnik srem("sputnik:channel:%s:channel" % channelName, client) # get our username userName = sputnik.get("ses:%s:username" % client) # get all usernames users = smembers("sputnik:channel:%s:users" % channelName) try: # get all clients allClients = [] for cl in smembers("sputnik:channel:%s:channel" % channelName): allClients.append(sputnik.get("ses:%s:username" % cl)) for usr in users: if usr not in allClients: sputnik.srem("sputnik:channel:%s:users" % channelName, usr) addMessageToChannel(request, channelName, {"command": "user_remove", "username": usr}, myself = True) except: from booki.utils.log import printStack printStack(None)
def addMessageToChannel2(clientID, sputnikID, channelName, message, myself=False): import sputnik import json try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = clientID for c in clnts: if not myself and c == sputnikID: continue if c.strip() != '': try: sputnik.push("ses:%s:messages" % c, json.dumps(message)) except: logger.debug('*ERROR PUSH*')
def smembers(key): import sputnik result = [] if key and key.strip() != '': try: with sputnik.rcon.lock('com'): result = [rdecode(el) for el in list(sputnik.rcon.smembers(key))] except: from booki.utils.log import printStack printStack(None) return [] return result
def smembers(key): import sputnik result = [] if key and key.strip() != '': try: with sputnik.rcon.lock('com'): result = [ rdecode(el) for el in list(sputnik.rcon.smembers(key)) ] except: from booki.utils.log import printStack printStack(None) return [] return result
def removeClientFromChannel(request, channelName, client): """ Remove client from channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type client: C{string} @param client: Unique Client ID. """ import sputnik srem("sputnik:channel:%s:channel" % channelName, client) # get our username userName = sputnik.get("ses:%s:username" % client) # get all usernames users = smembers("sputnik:channel:%s:users" % channelName) try: # get all clients allClients = [] for cl in smembers("sputnik:channel:%s:channel" % channelName): allClients.append(sputnik.get("ses:%s:username" % cl)) for usr in users: if usr not in allClients: sputnik.srem("sputnik:channel:%s:users" % channelName, usr) addMessageToChannel(request, channelName, { "command": "user_remove", "username": usr }, myself=True) except: from booki.utils.log import printStack printStack(None)
def addMessageToChannel2(clientID, sputnikID, channelName, message, myself = False ): import sputnik import json try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = clientID for c in clnts: if not myself and c == sputnikID: continue if c.strip() != '': try: sputnik.push( "ses:%s:messages" % c, json.dumps(message)) except: logger.debug('*ERROR PUSH*')
def addMessageToChannel(request, channelName, message, myself = False ): """ Add message to specific channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type message: C{dict} @param message: Sputnik message. @type myself: C{bool} @keyword myself: Should client also recieve that message. """ import sputnik # TODO # not iterable try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = request.clientID for c in clnts: if not myself and c == request.sputnikID: continue if c.strip() != '': try: sputnik.push( "ses:%s:messages" % c, simplejson.dumps(message)) except: pass
def addMessageToChannel(request, channelName, message, myself=False): """ Add message to specific channel. @type request: C{django.http.HttpRequest} @param request: Django Request. @type channelName: C{string} @param channelName: Channel name. @type message: C{dict} @param message: Sputnik message. @type myself: C{bool} @keyword myself: Should client also recieve that message. """ import sputnik # TODO # not iterable try: clnts = sputnik.smembers("sputnik:channel:%s:channel" % channelName) except: from booki.utils.log import printStack printStack(None) return message["channel"] = channelName message["clientID"] = request.clientID for c in clnts: if not myself and c == request.sputnikID: continue if c.strip() != '': try: sputnik.push("ses:%s:messages" % c, simplejson.dumps(message)) except: pass
def upload_cover(request, bookid, version=None): """ Uploades attachments. Used from Upload dialog. @param request: Django Request @param bookid: Book ID @param version: Book version or None """ import datetime try: book = models.Book.objects.get(url_title__iexact=bookid) except models.Book.DoesNotExist: return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid}) book_version = book.getVersion(version) stat = models.BookStatus.objects.filter(book = book)[0] operationResult = True # check this for transactions try: for name, fileData in request.FILES.items(): if True: print '>> ', name print request.FILES[name].name import hashlib h = hashlib.sha1() h.update(name) h.update(request.POST.get('format', '')) h.update(request.POST.get('license', '')) h.update(str(datetime.datetime.now())) license = models.License.objects.get(name=request.POST.get('license', '')) frm = request.POST.get('format', '').split(',') try: width = int(request.POST.get('width', '0')) except ValueError: width = 0 try: height = int(request.POST.get('height', '0')) except ValueError: height = 0 try: filename = request.FILES[name].name except: filename = '' cov = models.BookCover(book = book, user = request.user, cid = h.hexdigest(), title = request.POST.get('title', '')[:250], filename = filename[:250], width = width, height = height, unit = request.POST.get('unit', 'mm'), booksize = request.POST.get('booksize', ''), cover_type = request.POST.get('type', ''), creator = request.POST.get('creator', '')[:40], license = license, notes = request.POST.get('notes', '')[:500], approved = False, is_book = 'book' in frm, is_ebook = 'ebook' in frm, is_pdf = 'pdf' in frm, created = datetime.datetime.now()) cov.save() cov.attachment.save(request.FILES[name].name, fileData, save = False) cov.save() # TODO: # must write info about this to log! except IOError: operationResult = False transaction.rollback() except: from booki.utils import log log.printStack() oprerationResult = False transaction.rollback() else: # maybe check file name now and save with new name transaction.commit() return HttpResponse('<html><body><script> parent.jQuery.booki.editor.showCovers(); </script></body></html>')
def upload_cover(request, bookid, version=None): """ Uploades attachments. Used from Upload dialog. @param request: Django Request @param bookid: Book ID @param version: Book version or None """ import datetime try: book = models.Book.objects.get(url_title__iexact=bookid) except models.Book.DoesNotExist: return pages.ErrorPage(request, "errors/book_does_not_exist.html", {"book_name": bookid}) book_version = book.getVersion(version) stat = models.BookStatus.objects.filter(book=book)[0] operationResult = True # check this for transactions try: for name, fileData in request.FILES.items(): if True: print '>> ', name print request.FILES[name].name import hashlib h = hashlib.sha1() h.update(name) h.update(request.POST.get('format', '')) h.update(request.POST.get('license', '')) h.update(str(datetime.datetime.now())) license = models.License.objects.get( name=request.POST.get('license', '')) frm = request.POST.get('format', '').split(',') try: width = int(request.POST.get('width', '0')) except ValueError: width = 0 try: height = int(request.POST.get('height', '0')) except ValueError: height = 0 try: filename = request.FILES[name].name except: filename = '' cov = models.BookCover( book=book, user=request.user, cid=h.hexdigest(), title=request.POST.get('title', '')[:250], filename=filename[:250], width=width, height=height, unit=request.POST.get('unit', 'mm'), booksize=request.POST.get('booksize', ''), cover_type=request.POST.get('type', ''), creator=request.POST.get('creator', '')[:40], license=license, notes=request.POST.get('notes', '')[:500], approved=False, is_book='book' in frm, is_ebook='ebook' in frm, is_pdf='pdf' in frm, created=datetime.datetime.now()) cov.save() cov.attachment.save(request.FILES[name].name, fileData, save=False) cov.save() # TODO: # must write info about this to log! except IOError: operationResult = False transaction.rollback() except: from booki.utils import log log.printStack() oprerationResult = False transaction.rollback() else: # maybe check file name now and save with new name transaction.commit() return HttpResponse( '<html><body><script> parent.jQuery.booki.editor.showCovers(); </script></body></html>' )