def test_show_creation_with_duplicate_url(self): url = self.random() hamlet = Show(company=self.evam, name="Hamlet spoof", url=url) hamlet.put() same_url_try = Show(company=self.evam, name="Hamlet other url try", url=url) self.assertRaises(ValueError, same_url_try.put)
def create_show_submission(): error = False try: artits_id = request.form.get('artist_id') venue_id = request.form.get('venue_id') start_time = request.form.get('start_time') show = Show() show.artist_id = artits_id show.venue_id = venue_id show.start_time = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S") db.session.add(show) db.session.commit() except: error = True db.session.rollback() finally: db.session.close() # called to create new shows in the db, upon submitting new show listing form # TODO: insert form data as a new Show record in the db, instead # on successful db insert, flash success if error == False: flash('Show was successfully listed!') else: flash('Show was failed listed!') # TODO: on unsuccessful db insert, flash an error instead. # e.g., flash('An error occurred. Show could not be listed.') # see: http://flask.pocoo.org/docs/1.0/patterns/flashing/ return render_template('pages/home.html')
def test_show_creation_by_admin(self): show_route = '/_admin/show' self.admin_app.post(show_route, {'action':'update'}, status=403) # tells blank posts to bugger off url = self.random() Show(name=self.random(), url = url, description=self.random(), company=self.evam).put() self.assertTrue(Show.get_by_url(url)) show_data = dict(action='delete') self.admin_app.post(show_route+'/'+url, show_data) self.assertFalse(Show.get_by_url(url))
def post(self): show = Show() # show.key=ndb.Key('Show', int(request.form['id'])) show.event_id = ndb.Key('Event', int(request.form['event_id'])) show.client_id = ndb.Key('Client', int(request.form['client_id'])) show.screen_id = ndb.Key('Screen_Layout', int(request.form['screen_id'])) show.name = request.form['name'] show.datetime = datetime.datetime.now() screen = ndb.Key('Screen_Layout', int(request.form['screen_id'])) seats = screen.get().seats print type(seats) updated_seats = {} for each in seats: updated_seats[str(each['row'])+'-'+str(each['column'])]= {'status':4} show.seats = updated_seats res = show.put() # The below paragraph should be deleted later offset_id = 21 prices = [] print show.screen_id categories = Category.query(Category.screen_id == show.screen_id).fetch() for category in categories: price1 = Price(id=show.key.id() + offset_id, show_id=show.key, category_id=category.key, amount=500) offset_id += 1 prices.append(price1) print "###" print prices for price in prices: price.put() # The above paragraph should be deleted later return jsonify({'id': res.id(), 'message': "Success"})
def test_cascading_deletes(self): company = Company(name=self.random(), url = self.random()) company.put() show_url = self.random() show = Show(name= self.random(), url = show_url, company = company) show.put() self.assertTrue(Show.get_by_url(show_url)) company.delete() self.assertFalse(Show.get_by_url(show_url))
def get_by_id_full(cls, id): details = {} venue = cls.get_by_id(id) past_shows = Show.get_past_by_venue(id) upcoming_shows = Show.get_upcoming_by_venue(id) details.update(venue) details.update({'upcoming_shows': upcoming_shows}) details.update({'upcoming_shows_count': len(upcoming_shows)}) details.update({'past_shows': past_shows}) details.update({'past_shows_count': len(past_shows)}) return details
class ExtendedTestCase(unittest.TestCase): public_app = TestApp(public_main.createApp()) admin_app = TestApp(admin_main.createApp()) _login_stubs = StubOutForTesting() stubs = StubOutForTesting() def random(self): import hashlib, time return hashlib.md5((time.clock()*random.random()).__str__()).hexdigest() def setUp(self): self.make_test_data() self.login() self.mox = Mox() def tearDown(self): self.logout() self.stubs.UnsetAll() for model in [City, Company, Performance, Show, Venue]: for datum in model.all(): datum.delete() def login(self, user="******", admin=True): self._login_stubs.Set(users, 'get_current_user', lambda user = user : users.User(user)) self._login_stubs.Set(users, 'is_current_user_admin', lambda admin = admin : admin) def logout(self): self._login_stubs.UnsetAll() def make_test_data(self): now = datetime.datetime.now() self.now = datetime.datetime(year = now.date().year, month = now.date().month, day = now.date().day, hour = now.time().hour, minute = now.time().minute) self.one_day_later = self.now + datetime.timedelta(days=1) self.two_days_later = self.now + datetime.timedelta(days=2) self.three_days_later = self.now + datetime.timedelta(days=3) self.evam = Company(name='Evam Theatre Company', url='evam') self.evam.put() self.hamlet = Show(name='Hamlet', url='hamlet', company=self.evam) self.hamlet.put() self.chennai = City(name='Chennai', url='chennai') self.chennai.put() self.bangalore = City(name='Bangalore', url='bangalore') self.bangalore.put() self.lady_andal = Venue(name='Lady Andal', url='lady_andal', city=self.chennai) self.lady_andal.put() def make_performance(self, show, venue, dt): perf = Performance(show=show, venue=venue, utc_date_time=dt) perf.put() return perf
def create_show(self, *args, **kwargs): """Create show for organizer""" args[0]["organizer_id"] = self.id show = Show() for key, value in args[0].items(): setattr(show, key, value) try: show.save() return show except exc.IntegrityError as e: print("show") errorInfo = e.orig.args print(errorInfo[0]) # This will give you error code print(errorInfo[1]) # This will give you error message
def search_by_name(cls, venue_name): venues = cls.query.filter(cls.name.ilike(f'%{venue_name}%')).all() return [{ "id": venue.id, "name": venue.name, "num_upcoming_shows": Show.count_upcoming_by_venue_id(venue.id) } for venue in venues]
def get(self, event_id): event_id = int(event_id) query = Show.query(Show.event_id == ndb.Key(Event, event_id)) shows_list = [] for each in query.fetch(): show_id = each.key.id() client = each.client_id.get() screen = each.client_id.get() if client is not None: client_name = each.client_id.get().name else: client_name = "Unknown" if screen is not None: screen_name = each.screen_id.get().name else: screen_name = "Unknown" datetime = each.datetime shows_list.append({ 'show_id': show_id, 'client_name': client_name, 'screen_name': screen_name, 'datetime': datetime }) return jsonify(shows_list)
def create_show_submission(): try: show = Show() show.artist_id = request.form.get('artist_id') show.venue_id = request.form.get('venue_id') show.start_time = request.form.get('start_time') db.session.add(show) db.session.commit() flash('Show was successfully created!') except: print(sys.exc_info()) db.session.rollback() flash('An error occurred. Show could not be created.') finally: db.session.close() return render_template('pages/home.html')
def update(self, show_url=None): show = Show.get_by_url(show_url) if not show: raise Exception("Show doesn't exist") show.name = self.read('name') show.url = self.read('url') show.company = self.check_company() show.description = self.read('desc') show.put() self.redirect('/_admin/show/')
def create_shows(): show1 = Show(id=1, event_id=ndb.Key(Event, 1), client_id=ndb.Key(Client, 12345), screen_id=ndb.Key(Screen_Layout, 1), datetime=datetime.strptime("2018-09-24 12:00:00.0", '%Y-%m-%d %H:%M:%S.%f'), seats={'1-1': {'status': 4}, '1-2': {'status': 4}, '2-1': {'status': 4}, '2-2': {'status': 4}}) show2 = Show(id=2, event_id=ndb.Key(Event, 2), client_id=ndb.Key(Client, 12345), screen_id=ndb.Key(Screen_Layout, 2), datetime=datetime.strptime("2018-09-20 12:00:00.0", '%Y-%m-%d %H:%M:%S.%f'), seats={'1-1': {'status': 4}, '1-2': {'status': 4}, '2-1': {'status': 4}, '2-2': {'status': 4}}) show3 = Show(id=3, event_id=ndb.Key(Event, 4), client_id=ndb.Key(Client, 123456), screen_id=ndb.Key(Screen_Layout, 3), datetime=datetime.strptime("2018-09-20 12:00:00.0", '%Y-%m-%d %H:%M:%S.%f'), seats={'1-1': {'status': 4}, '1-2': {'status': 4}, '2-1': {'status': 4}, '2-2': {'status': 4}}) show4 = Show(id=4, event_id=ndb.Key(Event, 3), client_id=ndb.Key(Client, 123456), screen_id=ndb.Key(Screen_Layout, 4), datetime=datetime.strptime("2018-09-20 12:00:00.0", '%Y-%m-%d %H:%M:%S.%f'), seats={'1-1': {'status': 4}, '1-2': {'status': 4}, '2-1': {'status': 4}, '2-2': {'status': 4}}) ndb.put_multi([show1, show2, show3, show4])
def get_by_city_state(cls, state, city): state_venues = cls.query.filter_by(city=city, state=state).all() venues = [{ "id": venue.id, "name": venue.name, "num_upcoming_shows": Show.count_upcoming_by_venue_id(venue.id) } for venue in state_venues] return venues
def get_titles_test(self, name): try: try: optimized = Show().getShows(MockService().getData()) #self.post_to_db(optimized) except Exception as ex: self.logger.error( "DB service couldn't able to process this result.", ex) return optimized except Exception as ex: self.logger.error("Unable to get results", ex) return {}
def get(self): user_id = request.environ['USER_ID'] client_id = user_id.get().detail_id shows = Show.query(Show.client_id == client_id) shows_list = [] for show in shows: event_name = show.event_id.get().name screen_name = show.screen_id.get().name shows_list.append({ "event_name": event_name, 'screen_name': screen_name, "datetime": show.datetime }) return jsonify(shows_list)
def create(self, performance=None): show = Show.get(self.read('show_key')) if not show: raise Exception("That show doesn't exist.") venue = Venue.get(self.read('venue_key')) if not venue: raise Exception("That venue doesn't exist.") year = int(self.read('year')) month = int(self.read('month')) day = int(self.read('day')) hour = int(self.read('hour')) minute = int(self.read('minute')) Performance(show = show, venue = venue, utc_date_time = datetime.datetime(year, month, day, hour, minute) - venue.city.get_timedelta() ).put() self.get()
def test_show_updates_by_admin(self): show_route = '/_admin/show' self.admin_app.post(show_route, {'action':'update'}, status=403) # tells blank posts to bugger off url = self.random() Show(name=self.random(), url = url, description=self.random(), company=self.evam).put() name = self.random() new_url = self.random() description = self.random() company = self.evam.url show_data = dict(action='update', name=name, url=new_url, desc = description, company = self.evam.url) self.admin_app.post(show_route+'/'+url, show_data, status = 302) show = Show.get_by_url(new_url) self.assertEqual(show.name,name) self.assertEqual(show.description,description) self.assertEqual(show.company.url,self.evam.url)
def test_show_creation_by_admin(self): show_route = '/_admin/show' self.admin_app.post(show_route, {'action':'create'}, status=403) # tells blank posts to bugger off name = self.random() url = self.random() description = self.random() company = self.evam.url show_data = dict(action='create', name=name, url=url, desc = description, company = company) self.admin_app.post(show_route, show_data) self.admin_app.post(show_route, show_data, status=403) # create the show only once show = Show.get_by_url(url) self.assertTrue(show) self.assertEqual(name, show.name) self.assertEqual(url, show.url) self.assertEqual(description, show.description)
def make_test_data(self): now = datetime.datetime.now() self.now = datetime.datetime(year = now.date().year, month = now.date().month, day = now.date().day, hour = now.time().hour, minute = now.time().minute) self.one_day_later = self.now + datetime.timedelta(days=1) self.two_days_later = self.now + datetime.timedelta(days=2) self.three_days_later = self.now + datetime.timedelta(days=3) self.evam = Company(name='Evam Theatre Company', url='evam') self.evam.put() self.hamlet = Show(name='Hamlet', url='hamlet', company=self.evam) self.hamlet.put() self.chennai = City(name='Chennai', url='chennai') self.chennai.put() self.bangalore = City(name='Bangalore', url='bangalore') self.bangalore.put() self.lady_andal = Venue(name='Lady Andal', url='lady_andal', city=self.chennai) self.lady_andal.put()
def populate_db(): if app.config["POPULATE_DB"]: for artist in ARTISTS: db.session.add(Artist(**artist)) for show in SHOWS: db.session.add(Show(**show)) for venue in VENUES: db.session.add(Venue(**venue)) try: db.session.commit() except exc.SQLAlchemyError: db.session.rollback() print(sys.exc_info()) finally: db.session.close()
def get_titles(self, name): try: feed_headers = {'x-rapidapi-key': config.FeedKey} response = requests.get(config.Feed.format(name), verify="certificates/feed.cer", headers=feed_headers) headers = { 'Content-type': 'application/json', 'Accept': 'text/plain', } optimized = Show().getShows(response.json()) db_thread = threading.Thread(target=self.post_to_db, args=[optimized]) db_thread.daemon = True db_thread.start() return optimized except Exception as ex: self.logger.error("Unable to get results", ex) return {}
def post(self): # Got client ID from environ user_id = request.environ['USER_ID'] client_id = user_id.get().detail_id show = Show() show.event_id = ndb.Key('Event', int(request.json['event_id'])) show.client_id = client_id # Fetched from the environ values. show.screen_id = ndb.Key('Screen_Layout', int(request.json['screen_id'])) show.datetime = datetime.strptime(request.json['datetime'], "%d-%m-%Y %H:%M") screen = ndb.Key('Screen_Layout', int(request.json['screen_id'])) seats = screen.get().seats updated_seats = {} for each in seats: updated_seats[str(each['row']) + '-' + str(each['column'])] = { 'status': 4 } show.seats = updated_seats categories_price = request.json['category-price'] res = show.put() # Creating a price for each request try: for each in categories_price: price = Price(show_id=res, category_id=ndb.Key('Category', int(each['category'])), amount=int(each['price'])) print '########' print type(price.category_id.id()) price.put() except: return jsonify({"code": 500, "message": "server error"}) return jsonify({"code": 200, "id": res.id(), "message": "Success"})
def post(self): user_id = request.environ['USER_ID'] client_id = user_id.get().detail_id show = Show.get_by_id(request.json['id']) if not show: return jsonify({"code": 404, "message": "Show Not found."}) # Check if the user is authorized to edit. if client_id != show.client_id: return jsonify({"code": 400, "message": "Not authorized."}) # UPDATE EXISTING DATA MINOR INFORMATIONS show.event_id = ndb.Key('Event', int(request.json['event_id'])) show.screen_id = ndb.Key('Screen_Layout', int(request.json['screen_id'])) show.name = request.json['name'] show.datetime = datetime.strptime(request.json['datetime'], "%Y-%m-%d %I:%M %p") res = show.put() return jsonify({"code": 200, "id": res.id(), "message": "Success"})
def change_seat_availability(): # LIST to status map status=['Booked','Bought','Under Maintenance', 'Unavailable', 'Available'] id=int(request.json['show_id']) seat_no=request.json['seat_no'] print(type(id)) show=Show.get_by_id(id) seats=show.seats print(seats) if show.seats.get(seat_no): if show.seats[seat_no]['status']==4: show.seats[seat_no]['status']=3 elif show.seats[seat_no]['status']==3: show.seats[seat_no]['status']=4 else : return jsonify({'status':404, 'message': "Seat is unavailable for changing status. It is "+status[show.seats[seat_no]['status']]}) show.put() print(show.seats) return jsonify({'status':200, 'message': "Seat status changed to "+status[show.seats[seat_no]['status']]}) else: return jsonify({'status':404, 'message': "Seat not found."})
def test_get_route(self): url = self.random() hamlet = Show(company=self.evam, name="Hamlet spoof", url=url) self.assertEqual('/' + self.evam.url + '/shows/' + hamlet.url, hamlet.get_route())
def get(self, show_url = None): show = Show.get_by_url(show_url) self.render('admin/show.html', dict(shows = Show.all(), companies = Company.all(), current_show = show))
def delete(self, show_url = None): show = Show.get_by_url(show_url) if show : show.delete() self.get()
def get(self, url = None): self.render('admin/performance.html', dict(performances=Performance.all(), shows=Show.all(), venues=Venue.all()))
from models.venue import Venue engine = create_engine("sqlite:///concerts.db") Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session() # Users person1 = User(name="John Doe") person2 = User(name="Frank Stallone") person3 = User(name="Grace Kelly") session.add_all([person1, person2, person3]) # Shows phirst_show = date(2003, 11, 28) phish_11_28_03 = Show(date=phirst_show) ph_1995 = date(1995, 12, 31) phish_12_31_95 = Show(date=ph_1995) cornell_77 = date(1977, 5, 8) dead_5_8_77 = Show(date=cornell_77) sunshine_daydream = date(1972, 8, 27) dead_venetta = Show(date=sunshine_daydream) dead_msg = date(1979, 1, 7) dead_1_7_79 = Show(date=dead_msg) # Bands phish = Band(name='Phish')
def test_get_show_by_url(self): url = self.random() hamlet = Show(company=self.evam, name=self.random(), url=url) hamlet.put() self.assertEqual(hamlet.name, self.evam.get_show_by_url(url).name)
def seed_db(): genre_objs = [Genre(name=genre) for genre in genres] artist_objs = [Artist(**artist) for artist in artists] venue_objs = [Venue(**venue) for venue in venues] try: db.session.add_all(genre_objs) db.session.add_all(artist_objs) db.session.add_all(venue_objs) db.session.commit() # genre ids genre_ids = {} for genre in genre_objs: genre_ids.update({genre.name: genre.id}) # artist ids artist1_id = artist_objs[0].id artist2_id = artist_objs[1].id artist3_id = artist_objs[2].id # venue ids venue1_id = venue_objs[0].id venue2_id = venue_objs[1].id venue3_id = venue_objs[2].id # add artist genres artists_genres = [ ArtistGenre(artist_id=artist1_id, genre_id=genre_ids["Rock n Roll"]), ArtistGenre(artist_id=artist2_id, genre_id=genre_ids["Jazz"]), ArtistGenre(artist_id=artist3_id, genre_id=genre_ids["Jazz"]), ArtistGenre(artist_id=artist3_id, genre_id=genre_ids["Classical"]) ] db.session.add_all(artists_genres) # add venue genres venues_genres = [ VenueGenre(venue_id=venue1_id, genre_id=genre_ids["Jazz"]), VenueGenre(venue_id=venue1_id, genre_id=genre_ids["Reggae"]), VenueGenre(venue_id=venue1_id, genre_id=genre_ids["Swing"]), VenueGenre(venue_id=venue1_id, genre_id=genre_ids["Classical"]), VenueGenre(venue_id=venue1_id, genre_id=genre_ids["Folk"]), VenueGenre(venue_id=venue2_id, genre_id=genre_ids["Classical"]), VenueGenre(venue_id=venue2_id, genre_id=genre_ids["R&B"]), VenueGenre(venue_id=venue2_id, genre_id=genre_ids["Hip-Hop"]), VenueGenre(venue_id=venue3_id, genre_id=genre_ids["Rock n Roll"]), VenueGenre(venue_id=venue3_id, genre_id=genre_ids["Jazz"]), VenueGenre(venue_id=venue3_id, genre_id=genre_ids["Classical"]), VenueGenre(venue_id=venue3_id, genre_id=genre_ids["Folk"]), ] db.session.add_all(venues_genres) # add shows shows = [ {'artist_id': artist1_id, 'venue_id': venue3_id, 'start_time': '2019-06-15T23:00:00.000Z'}, {'artist_id': artist3_id, 'venue_id': venue3_id, 'start_time': '2035-04-01T20:00:00.000Z'}, {'artist_id': artist3_id, 'venue_id': venue3_id, 'start_time': '2035-04-08T20:00:00.000Z'}, {'artist_id': artist3_id, 'venue_id': venue3_id, 'start_time': '2035-04-15T20:00:00.000Z'}, {'venue_id': venue1_id, 'artist_id': artist1_id, 'start_time': '2019-05-21T21:30:00.000Z'}, {'venue_id': venue3_id, 'artist_id': artist2_id, 'start_time': '2019-06-15T23:00:00.000Z'}, {'venue_id': venue3_id, 'artist_id': artist3_id, 'start_time': '2035-04-01T20:00:00.000Z'}, {'venue_id': venue3_id, 'artist_id': artist3_id, 'start_time': '2035-04-08T20:00:00.000Z'}, {'venue_id': venue3_id, 'artist_id': artist3_id, 'start_time': '2035-04-15T20:00:00.000Z'}, ] show_objs = [Show(**show) for show in shows] db.session.add_all(show_objs) db.session.commit() except: db.session.rollback() print(sys.exc_info()) finally: db.session.close()
from models import storage from models.city import City from models.venue import Venue from models.show import Show from models.artist import Artist from models.organizer import Organizer #Create city organizer = Organizer city = City(city_name='Cali', country_name="Colombia") city.save() #create venue venue = Venue(city_id=city.id, venue_name="Asilo", email="*****@*****.**", address="Calle del cartucho", capacity=150) venue.save() #create show show = Show(venue_id=venue.id, price_tikets=25000) #Create artist artist = Artist(artist_name="Ponkeys", genre_artist="Funk", email="*****@*****.**") artist.save() print(venue) print(show) print(artist) print(show.org_id)
def test_get_by_url(self): url = self.random() Show(company= self.evam, name ="new show", url = url, desc = "lorem ipsum dolor").put() show = Show.get_by_url(url) self.assertEqual(show.name,"new show")