Add metadata feed
This commit is contained in:
		
							parent
							
								
									d60ce9d0bc
								
							
						
					
					
						commit
						199048207a
					
				
					 4 changed files with 75 additions and 15 deletions
				
			
		
							
								
								
									
										13
									
								
								app.py
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								app.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -9,12 +9,21 @@ app = Flask(__name__)
 | 
			
		|||
 | 
			
		||||
parsers.define_parsers()
 | 
			
		||||
 | 
			
		||||
VIRTUAL_HOST=os.getenv('VIRTUAL_HOST')
 | 
			
		||||
VIRTUAL_HOST = os.getenv('VIRTUAL_HOST')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/mensa/<parser_name>.json')
 | 
			
		||||
def index(parser_name):
 | 
			
		||||
    try:
 | 
			
		||||
        return utils.get_parser(parser_name).get_canteen_index(f'https://{VIRTUAL_HOST}/meta')
 | 
			
		||||
        return utils.get_parser(parser_name).get_canteen_index(f'http://{VIRTUAL_HOST}/meta')
 | 
			
		||||
    except KeyError:
 | 
			
		||||
        abort(404)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@app.route('/mensa/<parser_name>/meta/<canteen_name>')
 | 
			
		||||
def meta(parser_name, canteen_name):
 | 
			
		||||
    try:
 | 
			
		||||
        return utils.get_parser(parser_name).get_meta_data(canteen_name, f'http://{VIRTUAL_HOST}/mensa/{parser_name}/feed')
 | 
			
		||||
    except KeyError:
 | 
			
		||||
        abort(404)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,70 +7,100 @@
 | 
			
		|||
      "suffix": "611",
 | 
			
		||||
      "name": "Mensa Shedhalle",
 | 
			
		||||
      "street": "Schlachthausstraße 13",
 | 
			
		||||
      "city": "72074 Tübingen"
 | 
			
		||||
      "zipCode": "72074",
 | 
			
		||||
      "city": "Tübingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-shedhalle/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-morgenstelle",
 | 
			
		||||
      "suffix": "621",
 | 
			
		||||
      "name": "Mensa Morgenstelle",
 | 
			
		||||
      "street": "Auf der Morgenstelle 26",
 | 
			
		||||
      "city": "72076 Tübingen"
 | 
			
		||||
      "zipCode": "72076",
 | 
			
		||||
      "city": "Tübingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-morgenstelle-tuebingen/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-prinz_karl",
 | 
			
		||||
      "suffix": "623",
 | 
			
		||||
      "name": "Mensa Prinz Karl",
 | 
			
		||||
      "street": "Hafengasse 6",
 | 
			
		||||
      "city": "72070 Tübingen"
 | 
			
		||||
      "zipCode": "72070",
 | 
			
		||||
      "city": "Tübingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-prinz-karl-tuebingen/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-hohenheim",
 | 
			
		||||
      "suffix": "661",
 | 
			
		||||
      "name": "Mensa Hohenheim",
 | 
			
		||||
      "street": "Garbenstraße 29",
 | 
			
		||||
      "city": "70599 Stuttgart"
 | 
			
		||||
      "zipCode": "70599",
 | 
			
		||||
      "city": "Stuttgart",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-hohenheim/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-reutlingen",
 | 
			
		||||
      "suffix": "630",
 | 
			
		||||
      "name": "Mensa Reutlingen",
 | 
			
		||||
      "street": "Alteburgstraße 150 Gebäude 11",
 | 
			
		||||
      "city": "72762 Reutlingen"
 | 
			
		||||
      "zipCode": "72762",
 | 
			
		||||
      "city": "Reutlingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-reutlingen/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-nuertingen",
 | 
			
		||||
      "suffix": "665",
 | 
			
		||||
      "name": "Mensa Nürtingen",
 | 
			
		||||
      "street": "Neckarsteige 6-10",
 | 
			
		||||
      "city": "72622 Nürtingen"
 | 
			
		||||
      "zipCode": "72622",
 | 
			
		||||
      "city": "Nürtingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-nuertingen/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-rottenburg",
 | 
			
		||||
      "suffix": "655",
 | 
			
		||||
      "name": "Mensa Rottenburg",
 | 
			
		||||
      "street": "Schadenweiler Hof 1",
 | 
			
		||||
      "city": "72108 Rottenburg"
 | 
			
		||||
      "zipCode": "72108",
 | 
			
		||||
      "city": "Rottenburg",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-rottenburg/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-albstadt",
 | 
			
		||||
      "suffix": "645",
 | 
			
		||||
      "name": "Mensa Albstadt",
 | 
			
		||||
      "street": "Jakobstraße 1",
 | 
			
		||||
      "city": "72458 Albstadt"
 | 
			
		||||
      "zipCode": "72458",
 | 
			
		||||
      "city": "Albstadt",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-albstadt/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "mensa-sigmaringen",
 | 
			
		||||
      "suffix": "640",
 | 
			
		||||
      "name": "Mensa Sigmaringen",
 | 
			
		||||
      "street": "Anton-Günther-Straße 51",
 | 
			
		||||
      "city": " 72488 Sigmaringen"
 | 
			
		||||
      "zipCode": "72488",
 | 
			
		||||
      "city": "Sigmaringen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/mensa-sigmaringen/"
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "id": "cafeteria-morgenstelle",
 | 
			
		||||
      "suffix": "724",
 | 
			
		||||
      "name": "Cafeteria Morgenstelle",
 | 
			
		||||
      "street": "Auf der Morgenstelle 26",
 | 
			
		||||
      "city": "72076 Tübingen"
 | 
			
		||||
      "zipCode": "72076",
 | 
			
		||||
      "city": "Tübingen",
 | 
			
		||||
      "public": true,
 | 
			
		||||
      "source": "https://www.my-stuwe.de/mensa/cafeteria-morgenstelle-tuebingen/"
 | 
			
		||||
    }
 | 
			
		||||
  ]
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -91,4 +91,5 @@ def define_parsers():
 | 
			
		|||
    parser = Parser(canteen_json['name'], meal_data_handler=get_meal_data,
 | 
			
		||||
                    base_url=canteen_json['base_url'])
 | 
			
		||||
    for canteen in canteen_json['canteens']:
 | 
			
		||||
        parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['city']))
 | 
			
		||||
        parser.define(Canteen(canteen['id'], canteen['suffix'], canteen['name'], canteen['street'], canteen['zipCode'],
 | 
			
		||||
                              canteen['city'], canteen['public'], canteen['source']))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								utils.py
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								utils.py
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
from pyopenmensa.feed import LazyBuilder, Feed
 | 
			
		||||
 | 
			
		||||
parser_list = {}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -6,17 +8,23 @@ class Canteen:
 | 
			
		|||
    suffix: str
 | 
			
		||||
    name: str
 | 
			
		||||
    street: str
 | 
			
		||||
    zip_code: str
 | 
			
		||||
    city: str
 | 
			
		||||
    public: bool
 | 
			
		||||
    source: str
 | 
			
		||||
 | 
			
		||||
    def __init__(self, canteen_id, suffix, name, street, city):
 | 
			
		||||
    def __init__(self, canteen_id, suffix, name, street, zip_code, city, public, source):
 | 
			
		||||
        self.canteen_id = canteen_id
 | 
			
		||||
        self.suffix = suffix
 | 
			
		||||
        self.name = name
 | 
			
		||||
        self.street = street
 | 
			
		||||
        self.zip_code = zip_code
 | 
			
		||||
        self.city = city
 | 
			
		||||
        self.public = public
 | 
			
		||||
        self.source = source
 | 
			
		||||
 | 
			
		||||
    def address(self):
 | 
			
		||||
        return f'{self.street}, {self.city}'
 | 
			
		||||
        return f'{self.street}, {self.zip_code} {self.city}'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Parser:
 | 
			
		||||
| 
						 | 
				
			
			@ -34,6 +42,18 @@ class Parser:
 | 
			
		|||
    def get_meal_data(self, canteen: str):
 | 
			
		||||
        return self.meal_data_handler(self.base_url + self.canteens[canteen].suffix)
 | 
			
		||||
 | 
			
		||||
    def get_meta_data(self, canteen: str, prefix: str):
 | 
			
		||||
        canteen = self.canteens[canteen]
 | 
			
		||||
        meta_data = LazyBuilder()
 | 
			
		||||
        meta_data.name = canteen.name
 | 
			
		||||
        meta_data.address = canteen.address()
 | 
			
		||||
        meta_data.city = canteen.city
 | 
			
		||||
        meta_data.availability = 'public' if canteen.public else 'restricted'
 | 
			
		||||
        meta_data.feeds.append(
 | 
			
		||||
            Feed('full', priority='0', url=f'{prefix}/{canteen.canteen_id}', source=canteen.source, dayOfWeek='*', dayOfMonth='*',
 | 
			
		||||
                 hour='9', minute='30', retry='60 1 1440'))
 | 
			
		||||
        return meta_data.toXMLFeed()
 | 
			
		||||
 | 
			
		||||
    def get_canteen_index(self, prefix: str):
 | 
			
		||||
        index: dict[str, str] = {}
 | 
			
		||||
        canteen: Canteen
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue