def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the client is logged in. If it's logged in, show the home page if self.session.get('session_role') == 'client': pages_to_show = self.session.get( 'pages_to_show') # Number of pages that shows the pagination pages = list( ) # Pages for the pagination (it's a list because of django for templates) # Retrieve the page number page_number = self.request.get( "page", self.session.get('current_number_page')) page_number = int(page_number) # If the page number sent by HTML is above 0 if page_number > 0: # Initialize variables all_keys = list() # New comic keys list comics = list() # Comics list aux3 = list() # All comic keys support list all_comics_user = list() # ALL comics (for the search field) shelving_name = list() # Shelving name # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get( 'session_name')).order(Shelving.name).fetch() # Set the offset for the query (offset allows to ignore an amount of query results given by its value) num_elems_page = self.session.get("num_elems_page") offset = num_elems_page * (page_number - 1) # Get ALL keys from ALL comics (I do this because I want to maintain the ordinations and filters done in the list) aux_all_keys = self.request.get("all_keys", "") # All comic keys list # Check if the comics keys are empty if len(aux_all_keys) > 2: # Transform the HTML string in a list aux_all_keys = self.transform_keys(aux_all_keys) # It's necessary to compare the HTML with the query list in order to obtain the desired list if not self.session.get("shelving"): comics = ComicBook.query( ComicBook.users.username == self.session.get('session_name')).order( ComicBook.users.addition_date ) # All comics ordered by the addition date all_comics_user = copy.copy( comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name'), ComicBook.users.shelving == key ).order( ComicBook.users.addition_date ) # Comics in the shelving ordered by the addition date shelving = key.get() shelving_name = shelving.name del shelving all_comics_user = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name')).fetch( ) # ALL comics (for the search field) comics = comics.fetch(12) # Get comics shown in the page (if --> default, else --> see shelving) if not self.session.get("shelving"): comics = self.get_comics_read_and_without_shelving( comics ) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) aux = list() for comic in comics: # Get ALL the keys aux.append(comic.key.urlsafe()) del comic for key in aux_all_keys: # Compare the "list" given by HTML with aux for making the new all keys list (all_keys) for key2 in aux: if key == str(key2): key2 = ndb.Key(urlsafe=key) all_keys.append(key2) aux3.append(key2.urlsafe()) break del key2 del key del aux # Delete variables to free memory # Get all db comics (Limited to the number given by the session variable [10 by default]) # Not ordered because it has to respect if the comic used some ordination or filter comics = ComicBook.query(ComicBook.key.IN(all_keys)).fetch( num_elems_page, offset=offset) num_total = len(aux_all_keys) # Total number of elements # Setting all the comic keys all_keys = aux3 del aux3 # Delete variables to free memory # If the total number of elements is above 0 do the pagination if num_total > 0: # Get the number of pages for the pagination num_pages = num_total / num_elems_page # Number of pages # If the page number sent by html is less than the last possible page if page_number <= (num_pages + 1): # Update the session current number page self.session['current_number_page'] = page_number current_number_page = page_number # If there are less elements than session["num_elems_page"] if num_pages == 0: num_pages = 1 # At least one page # Else else: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page ) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page ) # It doesn't need other page self.session['last_page'] = num_pages # Last page # Set the pages for the pagination for i in range(1, num_pages + 1): pages.append(i) # If the current page is 1 if current_number_page == 1: pages = pages[0:pages_to_show] # Shows pages 1,2,3 # If the current page is the final page elif current_number_page == num_pages: # Shows the last three pages if (num_pages - pages_to_show) >= 0: pages = pages[(num_pages - pages_to_show):] else: pages = pages[0:pages_to_show] # Else else: pages = pages[(current_number_page - 2):( current_number_page + 1)] # Show the current, last and next pages self.session[ 'pages'] = pages # Pages for the pagination # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Setting the keys list to allow the use of the "Delete page" button keys_page_list = list() for comic in comics: keys_page_list.append(comic.key.urlsafe()) del comic all_comics = ComicBook.query().fetch() # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get( 'session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get( 'current_number_page'), # Current number page "pages": self.session.get( 'pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comics keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics_user": all_comics_user, # All user comic (for the search field) "all_comics": all_comics, # ALL comics (for the user search field) "shelvings": shelvings, # All user shelvings "shelving_name": shelving_name # Shelving name } del pages_to_show, page_number, num_elems_page, num_total, offset, \ num_pages, current_number_page, pages, keys_page_list, comics, aux_all_keys, all_keys,\ all_comics_user, shelving_name # Delete variables to free memory self.session_store.save_sessions( self.response) # Save sessions self.response.write( jinja.render_template( "/library/default.html", **values)) # Go to the library home page # If it isn't less redirect to library home page else: del pages_to_show, page_number, pages, num_elems_page, num_total, offset, comics, num_pages, \ aux_all_keys, all_comics_user # Delete variables to free memory self.redirect("/library") # If the total number is not above 0, redirect to the library home page else: del pages_to_show, page_number, pages, offset, comics, num_elems_page, aux_all_keys # Delete variables to free memory self.redirect("/library") # If it isn't above redirect to library home page else: del pages_to_show, page_number, pages # Delete variables to free memory self.redirect("/library") # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the client is logged in if self.session.get('session_role') == 'client': # If it's logged in, get the session variables, show the home page # Get the search field search = self.request.get("search", "") # Sort option search = search.encode("utf8") # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Initializing variables all_keys = list() comics = list() pages = list() keys_page_list = list() all_comics = ComicBook.query().fetch() all_comics_user = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name')).fetch() # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get('session_name')).order( Shelving.name).fetch() # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get('current_number_page'), # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comics keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics_user": all_comics_user, # All user comic (for the search field) "all_comics": all_comics, # ALL comics (for the user search field) "shelvings": shelvings # All user shelvings } # Check if there is a field to search if search != "" and len(search) > 0: # Get the key sent in the search field key = ndb.Key(urlsafe=search) # Get the comics with that key comic = key.get() # Check if the comics exists if comic and comic is not None: comics.append(comic) # Comics list comics = self.get_comics_read_and_without_shelving( comics) # Get only the comics without a shelving values["comics"] = comics # Search results # Setting all the comic keys all_keys.append(comic.key.urlsafe()) values["all_keys"] = all_keys # Setting the keys list to allow the use of the "Delete page" button keys_page_list.append(comic.key.urlsafe()) values["keys_page_list"] = keys_page_list # If not exists, shows a message else: values["ok_message"] = lang[ "search_not_results"] # Ok message (No matches found) del key, comic # Delete variables to free memory # If not exists, shows a message else: values["ok_message"] = lang[ "search_not_results"] # Ok message (No matches found) del search, comics, pages, keys_page_list, all_keys, lang, all_comics_user, all_comics # Delete variables to free memory self.response.write( jinja.render_template("/library/default.html", **values)) # Go to the library home page # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # If an client is logged in delete the comic if self.session.get('session_role') == 'client': # Retrieving the comic key key = self.request.get("key", "") key = ndb.Key(urlsafe=key) shelving = key.get() # Get the db shelving with that key keys_page_list = self.request.get( "keys_page_list", "") # Comic keys (only comics in the current page) aux_all_keys = self.request.get( "all_keys", "") # All the comic keys (for the order field) # Initialize variables all_keys = list() # All the comic keys (for the order field) aux = list() # Support variable aux3 = list() # Support variable shelving_name = list() # Shelving name # Transform the HTML string in a list aux_all_keys = self.transform_keys(aux_all_keys) # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get('session_name')).order( Shelving.name).fetch() all_comics = ComicBook.query().fetch() # Get all comics that belongs to the current user if not self.session.get("shelving"): comics = ComicBook.query( ComicBook.users.username == self.session.get('session_name')).order( ComicBook.users.addition_date ) # All comics ordered by the addition date all_comics_user = copy.copy( comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name'), ComicBook.users.shelving == key).order( ComicBook.users.addition_date ) # Comics in the shelving ordered by the addition date shelving2 = key.get() shelving_name = shelving2.name del shelving2 all_comics_user = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name')).fetch( ) # ALL comics (for the search field) for comic2 in comics: # Get ALL the keys aux.append(comic2.key.urlsafe()) del comic2 for key3 in aux_all_keys: # Compare the "list" given by HTML with aux for making the new all keys list (all_keys) for key2 in aux: if key3 == str(key2): key2 = ndb.Key(urlsafe=key2) aux3.append(key2) all_keys.append(key2.urlsafe()) break del key2 del key3 # Get db comics offset = (self.session.get('current_number_page') - 1) * self.session.get('num_elems_page') if len(aux3) > 0: comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch( self.session.get('num_elems_page'), offset=offset) # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving( comics ) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics else: comiss = list() # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get('current_number_page'), # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comic keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics": all_comics, # ALL comic (for the user search field) "all_comics_user": all_comics_user, # All user comics (for the search field) "authors": self.get_authors(), # Authors for adding them to the comics "shelvings": shelvings, # Shelvings list "shelving_name": shelving_name # Shelving name } # If the comic exists if shelving and shelving is not None: # Delete all shelves of the shelving and quit all comics self.delete_shelving(shelving, all_comics_user) # Delete db comic shelving.key.delete() values["ok_message"] = lang[ "shelving_deleted_successfully"] # Ok message (shelving deleted successfully) # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get( 'session_name')).order(Shelving.name).fetch() values["shelvings"] = shelvings # Setting pagination ############################################################################################## pages_to_show = self.session.get( 'pages_to_show' ) # Number of pages that shows the pagination pages = list( ) # Pages for the pagination (it's a list because of django for templates) # Get all db comics (Limited to the number given by the session variable [10 by default]) num_total = len(aux3) # Total number of elements if len(aux3) > 0: if not self.session.get("shelving"): comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch( self.session.get('num_elems_page'), offset=offset) # List not empty else: comics = ComicBook.query( ComicBook.users.username == self.session.get( "session_name")) # List not empty num_total = len(aux3) aux3 = list() for comic in comics: aux3.append(comic.key) del comic comics = comics.fetch( self.session.get('num_elems_page')) else: if not self.session.get("shelving"): comics = list() else: comics = ComicBook.query( ComicBook.users.username == self.session.get( "session_name")) # List not empty num_total = len(aux3) aux3 = list() for comic in comics: aux3.append(comic.key) del comic comics = comics.fetch( self.session.get('num_elems_page')) # If the total number of elements is above 0 do the pagination if num_total > 0 and len(comics) > 0: # Get the number of pages for the pagination num_elems_page = self.session.get( 'num_elems_page' ) # Number of elements (comics) per page num_pages = num_total / num_elems_page # Number of pages # If there are less elements than session["num_elems_page"] if num_pages == 0: num_pages = 1 # At least one page # Else else: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page ) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page ) # It doesn't need other page self.session['last_page'] = num_pages # Last page # Set the pages for the pagination for i in range(1, num_pages + 1): pages.append(i) # Set number of pages for the pagination (pagination only shows 3 pages) current_number_page = self.session.get( 'current_number_page') # If the current page is 1 if current_number_page == 1: pages = pages[0:pages_to_show] # Shows pages 1,2,3 # If the current page is the final page elif current_number_page == num_pages: # Shows the last three pages if (num_pages - pages_to_show) >= 0: pages = pages[(num_pages - pages_to_show):] else: pages = pages[0:pages_to_show] # Else else: pages = pages[(current_number_page - 2):( current_number_page + 1)] # Show the current, last and next pages self.session['pages'] = pages # Pages for the pagination del num_elems_page, num_pages, current_number_page # Delete variables to free memory # If page is empty do the same, but return to the to the last page next to the current page elif num_total > 0 and len(comics) == 0: # Get all db comics (Limited to the number given by the session variable [10 by default]) offset = (self.session.get('current_number_page') - 2) * self.session.get('num_elems_page') comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch( self.session.get('num_elems_page'), offset=offset) # Get the number of pages for the pagination num_elems_page = self.session.get( 'num_elems_page' ) # Number of elements (comics) per page num_pages = num_total / num_elems_page # Number of pages # If there are less elements than session["num_elems_page"] if num_pages == 0: num_pages = 1 # At least one page # Else else: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page ) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page ) # It doesn't need other page current_number_page = num_pages # The previous last page doesn't already exist, so it has to be the last page of the new list self.session['last_page'] = num_pages # Last page # Set the pages for the pagination for i in range(1, num_pages + 1): pages.append(i) # Set number of pages for the pagination (pagination only shows 3 pages) # If the current page is 1 if current_number_page == 1: pages = pages[0:pages_to_show] # Shows pages 1,2,3 # If the current page is the final page elif current_number_page == num_pages: # Shows the last three pages if (num_pages - pages_to_show) >= 0: pages = pages[(num_pages - pages_to_show):] else: pages = pages[0:pages_to_show] # Else else: pages = pages[(current_number_page - 2):( current_number_page + 1)] # Show the current, last and next pages self.session['pages'] = pages # Pages for the pagination self.session[ 'current_number_page'] = current_number_page # Current number page del num_elems_page, num_pages, current_number_page # Delete variables to free memory ########################################################################################### # Variables to be sent to the html if not self.session.get("shelving"): values[ "comics"] = self.get_comics_read_and_without_shelving( comics) else: self.session["shelving"] = None values["shelving_name"] = list() values[ "comics"] = self.get_comics_read_and_without_shelving( comics) values["all_comics_user"] = copy.copy(comics) values["pages"] = self.session.get( 'pages') # Pages for the pagination values["last_page"] = self.session.get( 'last_page') # Last page number values["all_keys"] = all_keys # All comic keys values["current_number_page"] = self.session.get( 'current_number_page') # Current number page # Setting the comic keys list that are currently in the page keys_page_list = list() for comic in comics: keys_page_list.append(comic.key.urlsafe()) values["keys_page_list"] = keys_page_list del pages_to_show, pages, num_total # Delete variables to free memory # Else show an error message else: values["error_message"] = lang[ "shelving_not_deleted"] # Error message (Shelving couldn't be deleted) del key, shelving, keys_page_list, aux_all_keys, all_keys, aux, aux3, all_comics, offset, comics,\ lang, shelving_name # Delete variables to free memory self.session_store.save_sessions(self.response) # Save sessions self.response.write( jinja.render_template("/library/default.html", **values)) # Go to the comics home page # Else redirect to the login page else: self.redirect("/login")
def get(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the client is logged in. If it's logged in, show the home page if self.session.get('session_role') == 'client': # Initialize variables pages_to_show = self.session.get( 'pages_to_show') # Number of pages that shows the pagination pages = list( ) # Pages for the pagination (it's a list because of django for templates) self.session[ 'current_number_page'] = 1 # Session current number page all_keys = list() # All comic keys keys_page_list = list() # Comic keys currently in the page shelving_name = list() # Shelving name self.session['num_elems_page'] = 12 # Amount of elements # Get all comics that belongs to the current user if not self.session.get("shelving"): comics = ComicBook.query( ComicBook.users.username == self.session.get('session_name')).order( ComicBook.users.addition_date ) # All comics ordered by the addition date all_comics_user = copy.copy( comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name'), ComicBook.users.shelving == key).order( ComicBook.users.addition_date ) # Comics in the shelving ordered by the addition date shelving = key.get() shelving_name = shelving.name del shelving all_comics_user = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name')).fetch( ) # ALL comics (for the search field) # Get ALL the comic keys (they are necessary to do the order and filter) for comic in comics: all_keys.append(comic.key.urlsafe()) del comic # Number of comics shown in the page comics = comics.fetch(12) # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving( comics ) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics num_total = len(all_comics_user) # Total number of elements # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get('session_name')).order( Shelving.name).fetch() self.session['page_name'] = "/library" # Current page name # If the total number of elements is above 0 do the pagination if num_total > 0: # Get the number of pages for the pagination num_elems_page = self.session.get( "num_elems_page") # Number of elements (comics) per page num_pages = num_total / num_elems_page # Number of pages # If there are less elements than session["num_elems_page"] if num_pages == 0: num_pages = 1 # At least one page # Else else: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page ) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page ) # It doesn't need other page self.session['last_page'] = num_pages # Last page # Set the pages for the pagination for i in range(1, num_pages + 1): pages.append(i) # Set number of pages for the pagination (pagination only shows 3 pages) current_number_page = 1 # If the current page is 1 if current_number_page == 1: pages = pages[0:pages_to_show] # Shows pages 1,2,3 # If the current page is the final page elif current_number_page == num_pages: # Shows the last three pages if (num_pages - pages_to_show) >= 0: pages = pages[(num_pages - pages_to_show):] else: pages = pages[0:pages_to_show] # Else else: pages = pages[(current_number_page - 1):( current_number_page + 1)] # Show the current, last and next pages self.session['pages'] = pages # Pages for the pagination # Setting the keys list to allow the use of the "Delete page" button for comic in comics: keys_page_list.append(comic.key.urlsafe()) del comic del num_elems_page, num_pages, current_number_page, pages # Delete variables to free memory # If num_total < 0 else: comics = all_comics_user # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english all_comics = ComicBook.query().fetch() # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": 1, # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comics keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics_user": all_comics_user, # All user comics (for the search field) "all_comics": all_comics, # ALL comics (for the user search field) "shelvings": shelvings, # All user shelvings "shelving_name": shelving_name # Shelving name } del num_total, pages_to_show, keys_page_list, all_keys, lang, comics, all_comics_user, all_comics, shelving_name # Delete variables to free memory self.session_store.save_sessions(self.response) # Save sessions self.response.write( jinja.render_template("/library/default.html", **values)) # Go to the library home page # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the admin is logged in if self.session.get('session_role') == 'client': # If it's logged in, get the session variables, show the home page # Get the shelving attributes name = self.request.get("name", "") # Shelving name name = name.encode("utf8") picture = self.request.get("picture", "") # Shelving picture keys_page_list = self.request.get("keys_page_list", "") # Comic keys (only comics in the current page) aux_all_keys = self.request.get("all_keys", "") # All the comic keys (for the order field) # Initialize variables all_keys = list() # All the comic keys (for the order field) aux = list() # Support list aux3 = list() # Support list shelving_name = list() # Shelving name all_comics = ComicBook.query().fetch() # Get the shelvings shelvings = Shelving.query(Shelving.username == self.session.get('session_name')).order(Shelving.name).fetch() offset = (self.session.get('current_number_page') - 1) * self.session.get('num_elems_page') # Number of elements to ignore in the query # Transform the HTML string in a list aux_all_keys = self.transform_keys(aux_all_keys) # Get all comics that belongs to the current user if not self.session.get("shelving"): comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).order(ComicBook.users.addition_date) # All comics ordered by the addition date all_comics_user = copy.copy(comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name'), ComicBook.users.shelving == key).order(ComicBook.users.addition_date) # Comics in the shelving ordered by the addition date shelving = key.get() shelving_name = shelving.name del shelving all_comics_user = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).fetch() # ALL comics (for the search field) for comic in comics: # Get ALL the keys aux.append(comic.key.urlsafe()) del comic for key in aux_all_keys: # Compare the "list" given by HTML with aux for making the new all keys list (all_keys) for key2 in aux: if key == str(key2): key2 = ndb.Key(urlsafe=key) aux3.append(key2) all_keys.append(key2.urlsafe()) break del key2 del key # Get db comics if len(aux3) > 0: comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset) # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving(comics) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics else: comics = list() # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english keys_page_list = list() # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image(self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get('current_number_page'), # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comic keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics": all_comics, # ALL comic (for the user search field) "all_comics_user": all_comics_user, # All user comics (for the search field) "authors": self.get_authors(), # Authors for adding them to the comics "shelvings": shelvings, # Shelvings list "shelving_name": shelving_name # Shelving name } # If the user enters all the attributes (the database can have more than one shelving with the same name) if len(name) > 0: # Check the comic attributes if picture != "": picture = images.resize(picture, 300, 250) else: picture = None # Add the new shelving to the home page shelving = Shelving(name=name, picture=picture, username=self.session.get('session_name')) aux2 = shelving.put() time.sleep(1) # If the shelving was successfully added if aux2 is not None: # Adding the new shelving to the list shelvings.append(shelving) # Setting pagination ############################################################################################## pages_to_show = self.session.get('pages_to_show') # Number of pages that shows the pagination pages = list() # Pages for the pagination (it's a list because of django for templates) # Get all db comics (Limited to the number given by the session variable [10 by default]) if len(aux3) > 0: comics = ComicBook.query(ComicBook.key.IN(aux3)).order(-ComicBook.save_date).fetch(self.session.get('num_elems_page'), offset=offset) else: comics = ComicBook.query().fetch() # Setting the new keys list for the comics currently in the page (allows to use the "Delete page" button) for comic in comics: keys_page_list.append(comic.key.urlsafe()) del comic num_total = len(all_comics_user) # Total number of elements # If the total number of elements is above 0 do the pagination if num_total > 0: # Get the number of pages for the pagination num_elems_page = self.session.get('num_elems_page') # Number of elements (comics) per page num_pages = num_total / num_elems_page # Number of pages # If there are less elements than session["num_elems_page"] if num_pages == 0: num_pages = 1 # At least one page # Else else: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page) # It doesn't need other page self.session['last_page'] = num_pages # Last page # Set the pages for the pagination for i in range(1, num_pages + 1): pages.append(i) # Set number of pages for the pagination (pagination only shows 3 pages) current_number_page = self.session.get('current_number_page') # If the current page is 1 if current_number_page == 1: pages = pages[0:pages_to_show] # Shows pages 1,2,3 # If the current page is the final page elif current_number_page == num_pages: # Shows the last three pages if (num_pages - pages_to_show) >= 0: pages = pages[(num_pages - pages_to_show):] else: pages = pages[0:pages_to_show] # Else else: pages = pages[(current_number_page - 2):(current_number_page + 1)] # Show the current, last and next pages self.session['pages'] = pages # Pages for the pagination # Variables to be sent to the HTML page # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): values["comics"] = self.get_comics_read_and_without_shelving(comics) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics values["comics"] = comics values["pages"] = self.session.get('pages') # Pages for the pagination values["last_page"] = self.session.get('last_page') # Last page number del num_elems_page, num_pages, current_number_page # Delete variables to free memory ########################################################################################### # Variables to be sent to the HTML page values["ok_message"] = lang["shelving_added_successfully"] # Ok message (shelving added successfully) values["keys_page_list"] = keys_page_list # Comics keys that are currently in the page values["all_keys"] = all_keys # All comic keys values["shelvings"] = shelvings # Shelvings list del pages_to_show, pages, comics, num_total, shelving # Delete variables to free memory # If wasn't successfully added else: del shelving, aux2 # Delete variables to free memory # Variables to be sent to the HTML page values["error_message"] = lang["error_add"] # Error message (The addition failed) # Else show an error message else: # Values to be sent to the HTML page values["error_message"] = lang["must_insert_all_shelving_attributes"] # Error message (You must enter all shelving data) del lang, offset, keys_page_list, aux_all_keys, all_keys, all_comics, aux, aux3, picture,\ name, shelvings, all_comics_user, shelving_name # Delete variables to free memory self.session_store.save_sessions(self.response) # Save sessions self.response.write(jinja.render_template("/library/default.html", **values)) # Go to the comicss home page # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the admin or client are logged in if self.session.get('session_role') == 'admin' or self.session.get( 'session_role') == 'client': # If it's logged in, get the session variables # Get the user attributes key = self.request.get("key", "") # User key key = ndb.Key(urlsafe=key) user = key.get() # Get the user with that key # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "user_email": user.email, # User email "user_key": user.key.urlsafe(), # User key "user_genre": self.session.get('session_genre'), # User genre "statistics": self.get_statistics() # Client statistics } # If the user and key exist if user is not None and key is not None: # Delete all associations between ComicBook and User_ComicBook aux = list() comics = ComicBook.query(ComicBook.users.username == user.name) for comic in comics: for user_comic in comic.users: if user_comic.username != user.name: aux.append(user_comic) comic.users = aux comic.put() del comic aux = list() del aux # Delete the client library shelvings = Shelving.query(Shelving.username == user.name) for shelving in shelvings: shelving.key.delete() del shelving # Delete all user User_ComicBook rows user_comics = User_ComicBook.query( User_ComicBook.username == user.name) for user_comic in user_comics: user_comic.key.delete() del user_comic # Delete all user friends friends = Friend.query( ndb.OR(Friend.who_ask == user.key, Friend.who_answer == user.key)) for friend in friends: friend.key.delete() # Delete the user user.key.delete() del lang, key, user, user_comics, comics, shelvings, friends # Delete variables to free memory self.redirect("/logout") # Redirect to the login page # Else show an error message else: # Values to be sent to the HTML page values["error_message"] = lang[ "account_not_deleted"] # Error message (Account couldn't be modified) del lang, key, user # Delete variables to free memory self.session_store.save_sessions( self.response) # Save sessions self.response.write( jinja.render_template( "/profile/default.html", **values)) # Go to the profile home page # If they aren't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the client is logged in if self.session.get('session_role') == 'client': # Initialize variables all_keys = list() # New comic keys list comics = None # Comics list all_comics_user = list() # ALL comics (for the search field) pages = list() # Pages for the pagination shelving_name = list() # Shelving name # Get the shelvings shelvings = Shelving.query( Shelving.username == self.session.get('session_name')).order( Shelving.name).fetch() # If it's logged in, get the session variables, show the home page # Get the order attributes order_by = self.request.get("order_by", "") # Sort option order_by = order_by.encode("utf8") aux_all_keys = self.request.get("all_keys", "") # All comic keys list if len(aux_all_keys) > 2: # Transform the HTML string in a list aux_all_keys = self.transform_keys(aux_all_keys) # It's necessary to compare the HTML with the query list in order to obtain the desired list if not self.session.get("shelving"): comics = ComicBook.query( ComicBook.users.username == self.session.get('session_name')).order( ComicBook.users.addition_date ) # All comics ordered by the addition date all_comics_user = copy.copy( comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name'), ComicBook.users.shelving == key ).order( ComicBook.users.addition_date ) # Comics in the shelving ordered by the addition date shelving = key.get() shelving_name = shelving.name del shelving all_comics_user = ComicBook.query( ComicBook.users.username == self.session.get( 'session_name')).fetch( ) # ALL comics (for the search field) aux = list() for comic in comics: # Get ALL the keys aux.append(comic.key.urlsafe()) del comic for key in aux_all_keys: # Compare the "list" given by HTML with aux for making the new all keys list (all_keys) for key2 in aux: if key == str(key2): key2 = ndb.Key(urlsafe=key) all_keys.append(key2) break del key2 del key del aux # Delete variables to free memory # Get all db comics (Limited to the number given by the session variable [10 by default]) # Not ordered because it has to respect if the comic used some ordination or filter comics = ComicBook.query(ComicBook.key.IN(all_keys)) # If there is a list of comics and a sort option if order_by != "" and comics is not None: # Get the number of pages for the pagination num_total = len(all_keys) num_elems_page = self.session.get( 'num_elems_page') # Number of elements (comics) per page num_pages = num_total / num_elems_page # Number of pages if num_pages > 0: # If the rest of the division is above 0 if (num_total % num_elems_page) > 0: num_pages = (num_total / num_elems_page ) + 1 # It's necessary other page else: num_pages = (num_total / num_elems_page ) # It doesn't need other page # Set the pages for the pagination if num_pages >= self.session.get('pages_to_show'): for i in range(1, self.session.get('pages_to_show') + 1): pages.append(i) else: for i in range(1, num_pages + 1): pages.append(i) # Order the comic list if order_by == "title": comics = comics.order(ComicBook.title) # Title A-Z # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) elif order_by == "-title": comics = comics.order(-ComicBook.title) # Title Z-A # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) elif order_by == "save_date": comics = comics.order(ComicBook.save_date) # Older first # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) elif order_by == "-save_date": comics = comics.order(-ComicBook.save_date) # Newest first # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) elif order_by == "addition_date": comics = comics.order( ComicBook.users.addition_date) # Value ascendant # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) elif order_by == "-addition_date": comics = comics.order( -ComicBook.users.addition_date) # Value descendant # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch(self.session.get('num_elems_page')) else: comics = comics.order(-ComicBook.save_date) # Newest first # Setting the all comic keys list all_keys = list() for comic in comics: all_keys.append(comic.key.urlsafe()) del comic comics = comics.fetch( self.session.get('num_elems_page')) # Name ascendant # Setting the comic keys list (only on the current page) keys_page_list = list() for comic in comics: keys_page_list.append(comic.key.urlsafe()) del comic # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english all_comics = ComicBook.query().fetch() # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving( comics ) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get( 'current_number_page'), # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comics keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics_user": all_comics_user, # All user comic (for the search field) "all_comics": all_comics, # ALL comics (for the user search field) "shelvings": shelvings, # All user shelvings "shelving_name": shelving_name # Shelving name } del order_by, aux_all_keys, all_keys, comics, lang, keys_page_list, pages,\ num_total, num_pages, num_elems_page, all_comics_user, all_comics, shelving_name # Delete variables to free memory self.session_store.save_sessions( self.response) # Save sessions self.response.write( jinja.render_template( "/library/default.html", **values)) # Go to the comics home page # Else redirect to the comics home page else: del order_by, aux_all_keys, all_keys, comics # Delete variables to free memory self.redirect("/library") # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the client is logged in if self.session.get('session_role') == 'client': # If it's logged in, get the session variables, show the home page # Get the comic attributes name = self.request.get("m_name", "") # Shelving name name = name.encode("utf8") picture = self.request.get("m_picture", "") # Shelving picture key = self.request.get("key", "") key = ndb.Key(urlsafe=key) shelving = key.get() # Get the shelving with that key keys_page_list = self.request.get("keys_page_list", "") # Comic keys (only comics in the current page) aux_all_keys = self.request.get("all_keys", "") # All the comic keys (for the order field) # Initialize variables aux = list() # Support variable aux3 = list() # Support variable all_comics = list() # List with all comics (for the search field) shelving_name = list() # Shelving name # Get the user shelvings shelvings = Shelving.query(Shelving.username == self.session.get("session_name")).order(Shelving.name).fetch() # Transform the HTML string in a list all_keys = copy.copy(aux_all_keys) aux_all_keys = self.transform_keys(aux_all_keys) # Get all comics that belongs to the current user if not self.session.get("shelving"): comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).order(ComicBook.users.addition_date) # All comics ordered by the addition date all_comics_user = copy.copy(comics) # ALL comics (for the search field) all_comics_user = all_comics_user.fetch() else: key = ndb.Key(urlsafe=self.session.get("shelving")) comics = ComicBook.query(ComicBook.users.username == self.session.get('session_name'),ComicBook.users.shelving == key).order(ComicBook.users.addition_date) # Comics in the shelving ordered by the addition date shelving2 = key.get() shelving_name = shelving2.name del shelving2 all_comics_user = ComicBook.query(ComicBook.users.username == self.session.get('session_name')).fetch() # ALL comics (for the search field) for comic2 in comics: # Get ALL the keys aux.append(comic2.key.urlsafe()) del comic2 for key3 in aux_all_keys: # Compare the "list" given by HTML with aux for making the new all keys list (all_keys) for key2 in aux: if key3 == str(key2): key2 = ndb.Key(urlsafe=key2) aux3.append(key2) break del key2 del key3 # Get all db comics offset = (self.session.get('current_number_page') - 1) * self.session.get('num_elems_page') if len(aux3) > 0: comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset) # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving(comics) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics else: comics = list() # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image(self.session.get('session_name')), # User picture "session_genre": self.session.get('session_genre'), # User genre "comics": comics, # Comics "current_number_page": self.session.get('current_number_page'), # Current number page "pages": self.session.get('pages'), # Pages for the pagination "last_page": self.session.get('last_page'), # Last page number "keys_page_list": keys_page_list, # Comics keys that are currently in the page "all_keys": all_keys, # All comic keys "all_comics": all_comics, # ALL comic (for the user search field) "authors": self.get_authors(), # Authors for adding them to the comics "all_comics_user": all_comics_user, # All user comics (for the user search field) "shelvings": shelvings, # Shelvings "shelving_name": shelving_name # Shelving name } # If the key is from an shelving if shelving and shelving is not None: # Check the shelving attributes if len(name) > 0: shelving.name = name if picture != "": shelving.picture = images.resize(picture, 300, 250) aux2 = shelving.put() time.sleep(1) # If the modification was successful if aux2 is not None: # Variables to be sent to the HTML page values["ok_message"] = lang["shelving_modified_successfully"] # Ok message (Shelving modified successfully) # Get all db Comics (Limited to the number given by the session variable [10 by default]) if len(aux3) > 0: comics = ComicBook.query(ComicBook.key.IN(aux3)).fetch(self.session.get('num_elems_page'), offset=offset) # Get the comics (if --> default, else --> see shelving) if not self.session.get('shelving'): comics = self.get_comics_read_and_without_shelving( comics) # Get read comics and the ones that aren't in a shelving else: self.get_comics_read(comics) # Get read comics values["comics"] = comics else: comics = ComicBook.query().fetch() # Get the user shelvings shelvings = Shelving.query(Shelving.username == self.session.get("session_name")).order(Shelving.name).fetch() values["shelvings"] = shelvings # Else show an error message else: # Variables to be sent to the HTML page values["error_message"] = lang["error_modify"] # Error message (The modification couldn't be done) del aux2 # Delete variables to free memory # Else show an error message else: # Values to be sent to the HTML page values["error_message"] = lang["shelving_not_modified"] # Error message (Shelving couldn't be modified) all_comics = ComicBook.query().fetch() # ALL comics (for the search field) values["all_comics"] = all_comics del lang, name, key, shelving, keys_page_list, aux_all_keys, aux, aux3, \ all_comics, offset, all_keys, all_comics_user, shelvings # Delete variables to free memory self.session_store.save_sessions(self.response) # Save sessions self.response.write(jinja.render_template("/library/default.html", **values)) # Go to the library home page # If it isn't logged in, redirect to the login page else: self.redirect("/login")
def post(self): jinja = jinja2.get_jinja2(app=self.app) # Check if the admin is logged in if self.session.get('session_role') == 'admin' or self.session.get( 'session_role') == 'client': # If it's logged in, get the session variables # Get the user attributes username = self.request.get("username", "") # Username username = username.encode("utf8") key = self.request.get("key", "") # User key key = ndb.Key(urlsafe=key) user = key.get() # Get the user with that key # Set the default language of the app if self.session['session_idiom'] == "spa": lang = spa # Spanish strings elif self.session['session_idiom'] == "eng": lang = eng # English strings else: lang = eng # Default english # Variables to be sent to the HTML page values = { "lang": lang, # Language strings "session_name": self.session.get('session_name'), # User name "session_role": self.session.get('session_role'), # User role "session_picture": self.get_session_image( self.session.get('session_name')), # User picture "user_email": user.email, # User email "user_key": user.key.urlsafe(), # User key "user_genre": self.session.get('session_genre'), # User genre "statistics": self.get_statistics() # Client statistics } # If the user exists and there is an username to change if user is not None and len(username) > 0: repeated_user = User.query(User.name == username) # If it doesn't exist an user with the name provided if repeated_user.count() == 0: # Set the new username username_aux = copy.copy(user.name) user.name = username aux = user.put() time.sleep(1) # If the modification was successful if aux is not None: # Variables to be sent to the HTML page # Ok message (Username modified successfully) values["ok_message"] = lang[ "username_modified_successfully_" + str(self.session.get("session_genre"))] # Change the username in the comics comics = ComicBook.query( ComicBook.users.username == username_aux) for comic in comics: for user_comic in comic.users: if user_comic.username == username_aux: user_comic.username = user.name del user_comic comic.put() del comic # Change the username in the User_ComicBook rows user_comics = User_ComicBook.query( User_ComicBook.username == username_aux) for user_comic in user_comics: if user_comic.username == username_aux: user_comic.username = user.name user_comic.put() del user_comic # Change the username in the shelves and shelvings shelvings = Shelving.query( Shelving.username == username_aux) for shelving in shelvings: shelving.username = user.name shelving.put() del shelving del user_comics, shelvings # Delete variables to free memory self.session[ 'session_name'] = user.name # Setting the new session username values["session_name"] = user.name # Else show an error message else: # Variables to be sent to the HTML page values["error_message"] = lang[ "error_modify"] # Error message (The modification couldn't be done) del aux, username_aux # Delete variables to free memory # If already exists show an error message else: # Values to be sent to the HTML page values["error_message"] = lang[ "username_already_exists"] # Error message (Username already used by other) del repeated_user # Delete variables to free memory # Else show an error message else: # Values to be sent to the HTML page # Error message (Username couldn't be modified) values["error_message"] = lang[ "username_not_modified_" + str(self.session.get("session_genre"))] del lang, username, key, user # Delete variables to free memory self.session_store.save_sessions(self.response) # Save sessions self.response.write( jinja.render_template("/profile/default.html", **values)) # Go to the profile home page # If it isn't logged in, redirect to the login page else: self.redirect("/login")