def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        self.client = self.app.test_client()

        #   An inverted index, mapping UTM (Universal Transverse Mercator) lat/lng
        #   values geolocating each film, to a LIST of films that were filmed
        #   at that location.
        #
        #   IMPORTANT!:  This is a shared data-structure, built only at startup,
        #   that is READ-ONLY by all, and so can be safely shared.
        invertedPointLocationIndex = InvertedPointLocationIndex()
        invertedPointLocationIndex.build_inverted_location_index()

        #   A KD tree, implemented using the scipy package's kdtree implementation
        #   under the hood, to allow for fast O(ln) queries of 2D point data.  The
        #   points that it stores are geocoded locations coded in UTM to allow them
        #   to be treated as 2D points to an approximation.
        #
        #   IMPORTANT!:  This is a shared data-structure, built only at startup,
        #   that is READ-ONLY by all, and so can be safely shared.
        filmLocationsKDTree = LocationsKDTree()
        filmLocationsKDTree.load_point_data()
        filmLocationsKDTree.build_kd_tree()

        self.app_context.g.filmlocationsKDTree = filmLocationsKDTree
        self.app_context.g.invertedPointLocationIndex = invertedPointLocationIndex
class testLocationsKDTree(unittest.TestCase):

    def setUp(self):
        self.test = InvertedPointLocationIndex()
        self.point_data = self.test.build_inverted_location_index()

    def test_lookup_location_single_entry(self):
        """ TESTING IF the inverted index returns a single location in an
            array if only a single location exists

            COMPARING WITH the known 1 points manually selected

            Retrieved from MySQL via:

            select Locations from Locations group by Locations having count = 1
        """
        found_location = self.test.lookup_locations((547809.3901228452, 4180255.2775678867))
        self.assertEqual(found_location, [{u'Fun Facts': u"Golden Gate Park is similar in shape but 20% larger than New York's Central Park.", u'Actor 2': u'Jayden C. Smith', u'Title': u'The Pursuit of Happyness', u'Production Company': u'Columbia Pictures Corporation', u'Writer': u'Gabriele Muccino', u'Locations': u"Golden Gate Park Children's Playground ", u'Director': u'Steven Conrad', u'filmid': 941, u'Actor 1': u'Will Smith', u'location_mercator': {u'y': 4180255.2775678867, u'x': 547809.3901228452}, u'Actor 3': u'', u'Distributor': u'Columbia Pictures', u'Release Year': u'2006', u'location': {u'lat': 37.7683778, u'lng': -122.4571623}}])

        found_location = self.test.lookup_locations((548452.309670817, 4184076.543236543))
        self.assertEqual(found_location, [{u'Fun Facts': u'Suppsedly, the Cow Palace\'s name derives from a newspaper editorial in which the writer wonders whether the soon-to-be-built structure for livestock was a "palace for cows". ', u'Actor 2': u'Ed Harris', u'Title': u'The Right Stuff', u'Production Company': u'The Ladd Company', u'Writer': u'Philip Kaufman', u'Locations': u'Cow Palace', u'Director': u'Philip Kaufman', u'filmid': 943, u'Actor 1': u'Sam Shepard', u'location_mercator': {u'y': 4184076.543236543, u'x': 548452.309670817}, u'Actor 3': u'', u'Distributor': u'The Ladd Company', u'Release Year': u'1983', u'location': {u'lat': 37.8027843, u'lng': -122.4496074}}])

    def test_lookup_location_multiple_entry(self):
        """ TESTING IF the inverted index returns a multiple filmlocations in an
            array if for multiple films at a single location

            COMPARING WITH the known 1 points manually selected

            Retrieved from MySQL via:

            select Locations from Locations group by Locations having count > 1
        """
        found_location = self.test.lookup_locations((551392.6450425778, 4181595.6111473767))
        self.assertEqual(found_location, [{u'Fun Facts': u'The Dalai Lama opened an exhibition on Wisdom and Compassion at the museum in 1991.', u'Actor 2': u'Chevy Chase', u'Title': u'Foul Play', u'Production Company': u'Paramount Pictures', u'Writer': u'Colin Higgins', u'Locations': u'Asian Art Museum (200 Larkin Street, Civic Center)', u'Director': u'Colin Higgins', u'filmid': 313, u'Actor 1': u'Goldie Hawn', u'location_mercator': {u'y': 4181595.6111473767, u'x': 551392.6450425778}, u'Actor 3': u'', u'Distributor': u'Paramount Pictures', u'Release Year': u'1978', u'location': {u'lat': 37.7802635, u'lng': -122.4163842}}, {u'Fun Facts': u'The Dalai Lama opened an exhibition on Wisdom and Compassion at the museum in 1991.', u'Actor 2': u'Mandy Patinkin', u'Title': u'Maxie', u'Production Company': u'Elsboy Entertainment', u'Writer': u'Patricia Resnick', u'Locations': u'Asian Art Museum (200 Larkin Street, Civic Center)', u'Director': u'Paul Aaron', u'filmid': 541, u'Actor 1': u'Glenn Close', u'location_mercator': {u'y': 4181595.6111473767, u'x': 551392.6450425778}, u'Actor 3': u'Gary Oldman', u'Distributor': u'Orion Pictures Corporation', u'Release Year': u'1985', u'location': {u'lat': 37.7802635, u'lng': -122.4163842}}])

    def test_lookup_location_errors(self):
        self.assertRaises(LookupException, self.test.lookup_locations, (1,2))
Exemplo n.º 3
0
app = create_app(env_configuration)

print "Running the " + env_configuration + " configuration ..."
setup_app(env_configuration)
print "Finished running the " + env_configuration + " configuration ..."

#   Manager to manage large-scale Flask apps
manager = Manager(app)

#   An inverted index, mapping UTM (Universal Transverse Mercator) lat/lng
#   values geolocating each film, to a LIST of films that were filmed
#   at that location.
#
#   IMPORTANT!:  This is a shared data-structure, built only at startup,
#   that is READ-ONLY by all, and so can be safely shared.
invertedPointLocationIndex = InvertedPointLocationIndex()
invertedPointLocationIndex.build_inverted_location_index()

#   A KD tree, implemented using the scipy package's kdtree implementation
#   under the hood, to allow for fast O(ln) queries of 2D point data.  The
#   points that it stores are geocoded locations coded in UTM to allow them
#   to be treated as 2D points to an approximation.
#
#   IMPORTANT!:  This is a shared data-structure, built only at startup,
#   that is READ-ONLY by all, and so can be safely shared.
filmLocationsKDTree = LocationsKDTree()
filmLocationsKDTree.load_point_data()
filmLocationsKDTree.build_kd_tree()

#   If the request is for the endpoint 'films_near_me,' which is seeking
#   the 7 films closest to a user's location, only then do we bother to
 def setUp(self):
     self.test = InvertedPointLocationIndex()
     self.point_data = self.test.build_inverted_location_index()