Add initial codebase

parent 2b27c78f
Pipeline #3357 failed with stages
in 51 seconds
recursive-include map_mason/templates *
recursive-include map_mason/static *
all: run
rm -rf venv && rm -rf *.egg-info && rm -rf dist && rm -rf *.log*
virtualenv --python=python3 venv && venv/bin/python develop
run: venv
FLASK_APP=map_mason MAP_MASON_SETTINGS=../settings.cfg venv/bin/flask run
test: venv
MAP_MASON_SETTINGS=../settings.cfg venv/bin/python -m unittest discover -s tests
sdist: venv test
venv/bin/python sdist
# MapMason
MapMason description
## Quick Start
Run the application:
make run
And open it in the browser at [](
## Prerequisites
This is built to be used with Python 3. Update `Makefile` to switch to Python 2 if needed.
Some Flask dependencies are compiled during installation, so `gcc` and Python header files need to be present.
For example, on Ubuntu:
apt install build-essential python3-dev
## Development environment and release process
- create virtualenv with Flask and MapMason installed into it (latter is installed in
[develop mode]( which allows
modifying source code directly without a need to re-install the app): `make venv`
- run development server in debug mode: `make run`; Flask will restart if source code is modified
- run tests: `make test` (see also: [Testing Flask Applications](
- create source distribution: `make sdist` (will run tests first)
- to remove virtualenv and built distributions: `make clean`
- to add more python dependencies: add to `install_requires` in ``
- to modify configuration in development environment: edit file `settings.cfg`; this is a local configuration file
and it is *ignored* by Git - make sure to put a proper configuration file to a production environment when
## Deployment
If you are interested in an out-of-the-box deployment automation, check out accompanying
Or, check out [Deploying with Fabric]( on one of the
possible ways to automate the deployment.
In either case, generally the idea is to build a package (`make sdist`), deliver it to a server (`scp ...`),
install it (`pip install map_mason.tar.gz`), ensure that configuration file exists and
`MAP_MASON_SETTINGS` environment variable points to it, ensure that user has access to the
working directory to create and write log files in it, and finally run a
[WSGI container]( with the application.
And, most likely, it will also run behind a
[reverse proxy](
import os
from flask import Flask
app = Flask(__name__)
if not app.debug:
import logging
from logging.handlers import TimedRotatingFileHandler
file_handler = TimedRotatingFileHandler(os.path.join(app.config['LOG_DIR'], 'map_mason.log'), 'midnight')
file_handler.setFormatter(logging.Formatter('<%(asctime)s> <%(levelname)s> %(message)s'))
import map_mason.views
DEBUG = False # make sure DEBUG is off unless enabled explicitly otherwise
LOG_DIR = '.' # create log files in current working directory
This diff is collapsed.
<!doctype html>
<html lang="en">
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link href="" rel="stylesheet">
{% block extra_head %}
{% endblock %}
<title>{% block title %}{% endblock %} - MapMason</title>
{% block content %}{% endblock %}
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src=""></script>
{% block extra_js %}{% endblock %}
\ No newline at end of file
{% extends 'base.html' %}
{% block extra_head %}
<link rel="stylesheet" href=""
<link rel="stylesheet" href="{{ url_for('static', filename='titatoggle-dist-min.css') }}">
#map {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
html, body {
height: 100%;
width: 100%;
#page-content {
height: 100%;
#map-container {
padding: 0;
margin: 0;
{% endblock %}
{% block extra_js %}
<script src=""
<script type="text/javascript">
// GMU Decimal Latitude and Decimal Longitude
const gmuLatitude = 38.8322871;
const gmuLongitude = -77.3080912;
const defaultZoom = 16;
var map ='map', {
minZoom: 0,
maxZoom: 20,
zoomSnap: 0,
zoomDelta: 0.25
var cartodbAttribution = '&copy; <a href="">OpenStreetMap</a> contributors, &copy; <a href="">CartoDB</a>';
var tileUrl = 'http://{s}{z}/{x}/{y}.png';
// 'http://{s}{z}/{x}/{y}.png'
var positron = L.tileLayer(tileUrl, {
attribution: cartodbAttribution
map.setView([gmuLatitude, gmuLongitude], defaultZoom);
{% endblock %}
{% block content %}
<div class="container-fluid" id="page-content">
<div class="row" style="height: 100%;">
<nav class="col-sm-3 col-md-2 d-none d-sm-block navbar-inverse navbar-dark bg-dark sidebar">
<h1 class="navbar-brand navbar-dark bg-dark">MapMason</h1>
<h3 class="text-primary">Search</h3>
<form class="form-inline mt-2 mt-md-0">
<small class="form-text text-light">Search via Name or Keyword</small>
<input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Name or Keyword">
<h3 class="text-primary">Filter Locations</h3>
<div class="nav flex-column text-light">
<div class="form-check checkbox-slider--b-flat">
<input type="checkbox"><span>Parking</span>
<div class="form-check checkbox-slider--b-flat">
<input type="checkbox"><span>Residence Halls</span>
<div class="form-check checkbox-slider--b-flat">
<input type="checkbox"><span>Dining Halls</span>
<p class="text-light">Having problems? <a href="">Submit feedback</a></p>
<p class="text-muted">A service of <a href="">Mason SRCT</a>. Licensed under the <a href="">Apache License, Version 2.0</a>.</p>
<main role="main" class="col-sm-9 ml-sm-auto col-md-10" id="map-container">
<div id="map"></div>
{% endblock %}
from flask import render_template
from map_mason import app
def index():
# app.logger.warning('Hit index')
return render_template('index.html')
from setuptools import setup, find_packages
import unittest
import map_mason
class Map_masonTestCase(unittest.TestCase):
def setUp(self): =
def test_index(self):
rv ='/')
self.assertIn('Welcome to MapMason',
if __name__ == '__main__':
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment