Skip to content
Snippets Groups Projects
Commit f5f6f4949416 authored by Patrice Journoud's avatar Patrice Journoud
Browse files

add user under transaction manager

taken into account pytsp_v2 changes
parent 0539513e2ff9
No related tags found
No related merge requests found
...@@ -64,5 +64,29 @@ ...@@ -64,5 +64,29 @@
this.update(); this.update();
} }
function get_icon(color) {
var iconUrl;
if (color == 'green') {
iconUrl = "assets/leaflet/images/marker-icon-green3.png";
}
else if (color == 'red') {
iconUrl = "assets/leaflet/images/marker-icon-red.png";
} else {
iconUrl = "assets/leaflet/images/marker-icon.png";
}
appIcon = L.Icon.Default.extend({
options: {
iconUrl: iconUrl,
shadowUrl: 'assets/leaflet/images/marker-shadow.png'
}
});
var icon = new appIcon();
return icon;
}
function addMarker(markerLocation, pointIndex) { function addMarker(markerLocation, pointIndex) {
...@@ -67,19 +91,6 @@ ...@@ -67,19 +91,6 @@
function addMarker(markerLocation, pointIndex) { function addMarker(markerLocation, pointIndex) {
var icon = L.icon({ var icon = get_icon("blue");
iconUrl: 'assets/leaflet/images/marker-icon.png',
shadowUrl: 'assets/leaflet/images/marker-shadow.png'
});
appIcon = L.Icon.Default.extend({
options: {
iconUrl: 'assets/leaflet/images/marker-icon.png',
shadowUrl: 'assets/leaflet/images/marker-shadow.png'
}
});
var icon = new appIcon();
var marker = new L.Marker(markerLocation, var marker = new L.Marker(markerLocation,
{ icon: icon, { icon: icon,
...@@ -185,7 +196,9 @@ ...@@ -185,7 +196,9 @@
type: 'POST', type: 'POST',
url: '/tsp', url: '/tsp',
contentType: "application/json; charset=utf-8", contentType: "application/json; charset=utf-8",
headers:{'X-Messaging-Token':'localhost:6544-0fd658f8-85ac-41ab-b279-6122598efb21'}, headers:{'X-Messaging-Token':'localhost:6544-b32de4d5-d979-4e84-bfe7-a7e52026016c',
'start': 0,
'end': latlng.length-1},
data: JSON.stringify(zlatlng) data: JSON.stringify(zlatlng)
})) }))
.done(function(response) { .done(function(response) {
...@@ -197,8 +210,5 @@ ...@@ -197,8 +210,5 @@
for(i=0;i<route.length;i++) { for(i=0;i<route.length;i++) {
pointi = route[i]; pointi = route[i];
latlngs.push(L.latLng(pointi['0'], pointi['1'])); latlngs.push(L.latLng(pointi['0'], pointi['1']));
if (i == 0){ }
var markeri = markers[0];
markeri.valueOf()._icon.style.backgroundColor = 'green'
}
...@@ -204,2 +214,5 @@ ...@@ -204,2 +214,5 @@
var green_icon = get_icon("green");
var marker_start = markers[0];
marker_start.setIcon(green_icon);
...@@ -205,5 +218,7 @@ ...@@ -205,5 +218,7 @@
} var red_icon = get_icon("red");
var marker_end = markers[markers.length-1];
marker_end.setIcon(red_icon);
var polyline = L.polyline( var polyline = L.polyline(
latlngs, latlngs,
...@@ -254,7 +269,7 @@ ...@@ -254,7 +269,7 @@
}); });
Window.map = new L.Map( 'map', { Window.map = new L.Map( 'map', {
center: L.latLng(43.38331, -0.41493), center: L.latLng(48.856614, 2.3522219000000177),
zoom: 10, zoom: 10,
layers: [ layers: [
view_sat, view_sat,
......
from pyramid.config import Configurator from pyramid.config import Configurator
from zope.sqlalchemy import ZopeTransactionExtension
from sqlalchemy.orm import (
scoped_session, sessionmaker,
)
from pytsprf.models import create_db from pytsprf.models import create_db
...@@ -3,3 +8,6 @@ ...@@ -3,3 +8,6 @@
from pytsprf.models import create_db from pytsprf.models import create_db
Session = scoped_session(sessionmaker(
extension=ZopeTransactionExtension()
))
...@@ -5,5 +13,2 @@ ...@@ -5,5 +13,2 @@
def cli(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
...@@ -9,5 +14,5 @@ ...@@ -9,5 +14,5 @@
create_db(settings) def get_pytsprf_config(settings):
config = Configurator(settings=settings) config = Configurator(settings=settings)
config.include('pyramid_chameleon') config.include('pyramid_chameleon')
...@@ -16,4 +21,22 @@ ...@@ -16,4 +21,22 @@
config.add_route('access', '/') config.add_route('access', '/')
config.add_static_view(name='assets', path='assets', cache_max_age=3600) config.add_static_view(name='assets', path='assets', cache_max_age=3600)
config.scan() config.scan()
return config
def cli(global_config, **settings):
""" This function returns a Pyramid WSGI application.
"""
engine = create_db(settings)
config = get_pytsprf_config(settings)
# scoped session gives us thread safe session
Session.configure(bind=engine)
# make database session available in every request
config.add_request_method(
callable=lambda request: Session, name='dbsession', property=True)
return config.make_wsgi_app() return config.make_wsgi_app()
...@@ -30,6 +30,9 @@ ...@@ -30,6 +30,9 @@
print("Creating database") print("Creating database")
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
finally:
return engine
def create_db_session(settings=None): def create_db_session(settings=None):
...@@ -56,5 +59,5 @@ ...@@ -56,5 +59,5 @@
return settings # db_url return settings # db_url
def get_db_users(): def get_db_users(session):
...@@ -60,7 +63,6 @@ ...@@ -60,7 +63,6 @@
session = create_db_session()
q = session.query(User) q = session.query(User)
if q.count() == 0: if q.count() == 0:
users = None users = None
else: else:
users = q.all() users = q.all()
...@@ -62,10 +64,8 @@ ...@@ -62,10 +64,8 @@
q = session.query(User) q = session.query(User)
if q.count() == 0: if q.count() == 0:
users = None users = None
else: else:
users = q.all() users = q.all()
# if is_new_session:
session.close()
return users return users
...@@ -69,5 +69,5 @@ ...@@ -69,5 +69,5 @@
return users return users
def get_db_user(allowed_domain): def get_db_user(session, allowed_domain):
...@@ -73,8 +73,7 @@ ...@@ -73,8 +73,7 @@
session = create_db_session()
q = session.query(User).filter(User.allowed_domain == allowed_domain) q = session.query(User).filter(User.allowed_domain == allowed_domain)
if q.count() == 0: if q.count() == 0:
success = False success = False
user = None user = None
else: else:
user = q.one() user = q.one()
...@@ -75,12 +74,11 @@ ...@@ -75,12 +74,11 @@
q = session.query(User).filter(User.allowed_domain == allowed_domain) q = session.query(User).filter(User.allowed_domain == allowed_domain)
if q.count() == 0: if q.count() == 0:
success = False success = False
user = None user = None
else: else:
user = q.one() user = q.one()
session.close()
success = True success = True
return success, user return success, user
...@@ -82,7 +80,7 @@ ...@@ -82,7 +80,7 @@
success = True success = True
return success, user return success, user
def get_db_user_token(allowed_domain): def get_db_user_token(session, allowed_domain):
...@@ -88,7 +86,6 @@ ...@@ -88,7 +86,6 @@
session = create_db_session()
q = session.query(User).filter(User.allowed_domain == allowed_domain) q = session.query(User).filter(User.allowed_domain == allowed_domain)
if q.count() == 0: if q.count() == 0:
token = None token = None
else: else:
token = q.one().htoken token = q.one().htoken
...@@ -90,9 +87,8 @@ ...@@ -90,9 +87,8 @@
q = session.query(User).filter(User.allowed_domain == allowed_domain) q = session.query(User).filter(User.allowed_domain == allowed_domain)
if q.count() == 0: if q.count() == 0:
token = None token = None
else: else:
token = q.one().htoken token = q.one().htoken
session.close()
return token return token
...@@ -96,5 +92,5 @@ ...@@ -96,5 +92,5 @@
return token return token
def delete_db_user(allowed_domain): def delete_db_user(session, allowed_domain):
...@@ -100,5 +96,4 @@ ...@@ -100,5 +96,4 @@
session = create_db_session()
success, user = get_db_user(allowed_domain) success, user = get_db_user(allowed_domain)
if success: if success:
session.delete(user) session.delete(user)
...@@ -102,8 +97,6 @@ ...@@ -102,8 +97,6 @@
success, user = get_db_user(allowed_domain) success, user = get_db_user(allowed_domain)
if success: if success:
session.delete(user) session.delete(user)
session.commit()
session.close()
return success return success
...@@ -107,5 +100,5 @@ ...@@ -107,5 +100,5 @@
return success return success
def create_db_user(username, allowed_domain, allow_subdomains=False): def create_db_user(session, username, allowed_domain, allow_sub_domains=False):
...@@ -111,6 +104,6 @@ ...@@ -111,6 +104,6 @@
is_found, user = get_db_user(allowed_domain) is_found, user = get_db_user(session, allowed_domain)
if is_found: if is_found:
creation = False creation = False
else: else:
...@@ -113,7 +106,6 @@ ...@@ -113,7 +106,6 @@
if is_found: if is_found:
creation = False creation = False
else: else:
session = create_db_session() new_user = User(username, allowed_domain, allow_sub_domains)
new_user = User(username, allowed_domain, allow_subdomains)
session.add(new_user) session.add(new_user)
...@@ -119,7 +111,5 @@ ...@@ -119,7 +111,5 @@
session.add(new_user) session.add(new_user)
session.commit() creation, user = get_db_user(session, allowed_domain)
creation, user = get_db_user(allowed_domain)
session.close()
return creation, user return creation, user
...@@ -148,5 +138,5 @@ ...@@ -148,5 +138,5 @@
creation_date = Column(DateTime) creation_date = Column(DateTime)
expires = Column(DateTime) expires = Column(DateTime)
allowed_domain = Column(String) allowed_domain = Column(String)
allow_subdomains = Column(Boolean) allow_sub_domains = Column(Boolean)
...@@ -152,5 +142,5 @@ ...@@ -152,5 +142,5 @@
def __init__(self, name, allowed_domain, allow_subdomains): def __init__(self, name, allowed_domain, allow_sub_domains):
self.htoken = _create_token() self.htoken = _create_token()
self.name = name self.name = name
self.allowed_domain = allowed_domain self.allowed_domain = allowed_domain
...@@ -154,4 +144,4 @@ ...@@ -154,4 +144,4 @@
self.htoken = _create_token() self.htoken = _create_token()
self.name = name self.name = name
self.allowed_domain = allowed_domain self.allowed_domain = allowed_domain
self.allow_subdomains = allow_subdomains self.allow_sub_domains = allow_sub_domains
import unittest import unittest
import requests
from pyramid import testing from pyramid import testing
...@@ -3,9 +2,11 @@ ...@@ -3,9 +2,11 @@
from pyramid import testing from pyramid import testing
import json from pytsp.tsp import TSP
from pytsp.distancegetter import DistanceGetter
from gpsdistance.main import distance as gps_distance
class ViewTests(unittest.TestCase): class ViewTests(unittest.TestCase):
def setUp(self): def setUp(self):
self.config = testing.setUp() self.config = testing.setUp()
...@@ -6,10 +7,19 @@ ...@@ -6,10 +7,19 @@
class ViewTests(unittest.TestCase): class ViewTests(unittest.TestCase):
def setUp(self): def setUp(self):
self.config = testing.setUp() self.config = testing.setUp()
self.scheme = 'http'
self.hostname = 'osrm.recette.xcg.global'
self.points = [
[48.856614, 2.3522219000000177],
[48.798404, 2.327198800000019],
[48.816363, 2.3173839999999473],
[48.847759, 2.4394968999999946]
]
def tearDown(self): def tearDown(self):
testing.tearDown() testing.tearDown()
...@@ -12,11 +22,8 @@ ...@@ -12,11 +22,8 @@
def tearDown(self): def tearDown(self):
testing.tearDown() testing.tearDown()
def test_unauthorized(self): def test_pytsp_mode_test_brute_force_tsp(self):
response = requests.post('http://localhost:6543/tsp')
txt = json.loads(response.text) get_distance = gps_distance
self.assertEqual(
(response.status_code, txt.get('message')), (401, 'Unauthorized')
)
...@@ -22,20 +29,10 @@ ...@@ -22,20 +29,10 @@
def test_create_user(self): brute_force = True
user = 'test_create_user:username' solver = TSP(self.points,
response = requests.post( get_distance,
'http://localhost:6543/users', json.dumps(user) brute_force=brute_force,
) no_tsp=False)
txt = json.loads(response.text) solver.init()
if (response.status_code != 200): indices = solver.compute()
errors = txt.get('errors') self.assertEqual(indices, (0, 2, 1, 3, 0,))
d = errors[0]
self.assertEqual(
(response.status_code, txt.get('created')),
(200, True), d.get('description')
)
else:
self.assertEqual(
(response.status_code, txt.get('created')),
(200, True)
)
...@@ -41,7 +38,5 @@ ...@@ -41,7 +38,5 @@
def test_delete_user(self): def test_pytsp_mode_test_ortools_tsp(self):
user = 'test_delete_user:username'
response1 = requests.post( distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
u'http://localhost:6543/users', json.dumps(user)
)
...@@ -47,10 +42,11 @@ ...@@ -47,10 +42,11 @@
if (response1.status_code == 200): get_distance = distance_getter.get_distance
txt = json.loads(response1.text) brute_force = False
headers = {'X-Messaging-Token': txt.get('token')} solver = TSP(self.points,
response2 = requests.delete( get_distance,
'http://localhost:6543/users', brute_force=brute_force,
headers=headers no_tsp=False)
) solver.init()
txt2 = json.loads(response2.text) indices = solver.compute()
self.assertEqual(indices, [0L, 2L, 1L, 3L, 0L])
...@@ -56,6 +52,3 @@ ...@@ -56,6 +52,3 @@
self.assertEqual( def test_pytsp_mode_osrm_brute_force_tsp(self):
(response2.status_code, txt2.get('deleted')),
(200, True)
)
...@@ -61,3 +54,3 @@ ...@@ -61,3 +54,3 @@
def test_authorized(self): distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
...@@ -63,8 +56,11 @@ ...@@ -63,8 +56,11 @@
user = 'test_authorized:username' get_distance = distance_getter.get_distance
response1 = requests.post( brute_force = True
u'http://localhost:6543/users', json.dumps(user) solver = TSP(self.points,
) get_distance,
brute_force=brute_force,
if (response1.status_code == 200): no_tsp=False)
solver.init()
indices = solver.compute()
self.assertEqual(indices, (0, 2, 1, 3, 0,))
...@@ -70,17 +66,5 @@ ...@@ -70,17 +66,5 @@
txt1 = json.loads(response1.text) def test_pytsp_mode_osrm_ortools_tsp(self):
headers = {'X-Messaging-Token': txt1.get('token')}
response2 = requests.get( distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
'http://localhost:6543/users', headers=headers
)
txt2 = json.loads(response2.text)
users = txt2.get('users')
self.assertIn(
user,
users,
(
"Newly created user [%s] expected "
"to be in DataBase but NOT FOUND" % (user,)
)
)
...@@ -86,3 +70,9 @@ ...@@ -86,3 +70,9 @@
def test_tsp_access_authorized(self): get_distance = distance_getter.get_distance
solver = TSP(self.points,
get_distance,
no_tsp=False)
solver.init()
indices = solver.compute()
self.assertEqual(indices, [0L, 2L, 1L, 3L, 0])
...@@ -88,6 +78,3 @@ ...@@ -88,6 +78,3 @@
user = 'test_tsp_access_authorized:username' def test_pytsp_mode_test_brute_force_no_tsp(self):
response1 = requests.post(
'http://localhost:6543/users', json.dumps(user)
)
...@@ -93,6 +80,3 @@ ...@@ -93,6 +80,3 @@
if (response1.status_code == 200): get_distance = gps_distance
txt1 = json.loads(response1.text)
headers = {'X-Messaging-Token': txt1.get('token')}
...@@ -98,17 +82,11 @@ ...@@ -98,17 +82,11 @@
latlon = [ brute_force = True
{'lat': 43.83032, 'lng': 4.359950}, solver = TSP(self.points,
{'lat': 50.66554, 'lng': 3.104470}, get_distance,
{'lat': 50.31392, 'lng': 2.744560}, brute_force=brute_force,
{'lat': 50.65272, 'lng': 3.025470}, no_tsp=True
{'lat': 43.70895, 'lng': 7.280680} )
] solver.init()
response2 = requests.post( indices = solver.compute()
'http://localhost:6543/tsp', self.assertEqual(indices, (0, 2, 1, 3,))
json.dumps(latlon),
headers=headers
)
txt2 = json.loads(response2.text)
# TODO: WATTT?
txt2dict = eval(txt2)
...@@ -114,5 +92,3 @@ ...@@ -114,5 +92,3 @@
requests.delete( def test_pytsp_mode_test_ortools_no_tsp(self):
'http://localhost:6543/users', headers=headers
)
...@@ -118,5 +94,3 @@ ...@@ -118,5 +94,3 @@
self.assertEqual(txt2dict.get('route'), [0, 4, 1, 3, 2, 0]) distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
def test_tsp_access_unauthorized(self):
...@@ -122,10 +96,14 @@ ...@@ -122,10 +96,14 @@
headers = {'X-Messaging-Token': 'unknown token'} get_distance = distance_getter.get_distance
latlon = [ brute_force = False
[43.83032, 4.359950], solver = TSP(self.points,
[50.66554, 3.104470], get_distance,
[50.31392, 2.744560], brute_force=brute_force,
[50.65272, 3.025470], no_tsp=True,
[43.70895, 7.280680], start=1,
] end=2
)
solver.init()
indices = solver.compute()
self.assertEqual(indices, [1L, 3L, 0L, 2L])
...@@ -131,11 +109,5 @@ ...@@ -131,11 +109,5 @@
response = requests.post( def test_pytsp_mode_osrm_brute_force_no_tsp(self):
'http://localhost:6543/tsp', json.dumps(latlon), headers=headers
) distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
txt = json.loads(response.text)
self.assertEqual(
response.status_code, 401
) and self.assertEqual(
txt.get('message'), 'Unauthorized'
)
...@@ -141,10 +113,11 @@ ...@@ -141,10 +113,11 @@
def test_create_same_user(self): get_distance = distance_getter.get_distance
brute_force = True
user = 'test_create_same_user:user' solver = TSP(self.points,
response1 = requests.post( get_distance,
u'http://localhost:6543/users', json.dumps(user) brute_force=brute_force,
) no_tsp=True)
solver.init()
if (response1.status_code == 200): indices = solver.compute()
self.assertEqual(indices, (0, 2, 1, 3,))
...@@ -150,13 +123,10 @@ ...@@ -150,13 +123,10 @@
response2 = requests.post( def test_pytsp_mode_osrm_ortools_no_tsp(self):
'http://localhost:6543/users', json.dumps(user)
) distance_getter = DistanceGetter(self.hostname, scheme=self.scheme)
txt2 = json.loads(response2.text)
errors = txt2.get('errors') get_distance = distance_getter.get_distance
d = errors[0] solver = TSP(self.points, get_distance, no_tsp=True)
self.assertEqual( solver.init()
d.get('description'), indices = solver.compute()
'Le Client possede deja une cle d''API active' self.assertEqual(indices, [0L, 2L, 1L, 3L])
) and self.assertEqual(
txt2.get('name'), user
)
from sqlalchemy.ext.declarative import declarative_base from pytsprf.models import create_db_user
from sqlalchemy import Column, String, DateTime, Boolean import transaction
from sqlalchemy.orm import (
scoped_session, sessionmaker,
)
from pyramid.threadlocal import get_current_registry
from pytsprf.conf import get_engine
from pytsprf.conf import get_settings
import uuid
DBSession = scoped_session(sessionmaker())
Base = declarative_base()
def create_db(settings):
db_session = create_db_session(settings)
engine = get_engine(settings)
Base.metadata.bind = engine
# Fixme, find something more elegant
try:
db_session.query(User).all()
except Exception:
print("Creating database")
Base.metadata.create_all(engine)
def create_db_session(settings=None):
if settings is None:
settings = get_settings()
engine = get_engine(settings)
session = scoped_session(sessionmaker())
session.configure(bind=engine)
Base.metadata.bind = engine
return session
def _create_token():
return uuid.uuid4().__str__() # binascii.b2a_hex(os.urandom(20))
def get_pyramid_settings():
settings = get_current_registry().settings
return settings # db_url
def get_db_users():
session = create_db_session()
q = session.query(User)
if q.count() == 0:
users = None
else:
users = q.all()
# if is_new_session:
session.close()
return users
...@@ -70,14 +3,9 @@ ...@@ -70,14 +3,9 @@
def get_db_user(allowed_domain): def task_create_db_user(
session,
session = create_db_session() username,
q = session.query(User).filter(User.allowed_domain == allowed_domain) allowed_domain,
if q.count() == 0: allow_sub_domains=False
success = False ):
user = None
else:
user = q.one()
session.close()
success = True
...@@ -83,15 +11,3 @@ ...@@ -83,15 +11,3 @@
return success, user with transaction.manager:
def get_db_user_token(allowed_domain):
session = create_db_session()
q = session.query(User).filter(User.allowed_domain == allowed_domain)
if q.count() == 0:
token = None
else:
token = q.one().htoken
session.close()
return token
...@@ -97,13 +13,7 @@ ...@@ -97,13 +13,7 @@
creation, user = create_db_user(
def delete_db_user(allowed_domain): session,
username,
session = create_db_session() allowed_domain,
success, user = get_db_user(allowed_domain) allow_sub_domains=allow_sub_domains
if success:
session.delete(user)
session.commit()
session.close()
return success
...@@ -109,5 +19,3 @@ ...@@ -109,5 +19,3 @@
def create_db_user(username, allowed_domain, allow_subdomains=False): )
is_found, user = get_db_user(allowed_domain)
...@@ -113,12 +21,4 @@ ...@@ -113,12 +21,4 @@
if is_found: transaction.commit()
creation = False
else:
session = create_db_session()
new_user = User(username, allowed_domain, allow_subdomains)
session.add(new_user)
session.commit()
creation, user = get_db_user(allowed_domain)
session.close()
return creation, user return creation, user
...@@ -123,35 +23,2 @@ ...@@ -123,35 +23,2 @@
return creation, user return creation, user
def create(model, **kwargs):
try:
instance = model(**kwargs)
DBSession.add(instance)
DBSession.commit()
except:
DBSession.rollback()
raise
return instance
def delete(instance):
DBSession.delete(instance)
DBSession.commit()
class User(Base):
__tablename__ = 'users'
htoken = Column(String, primary_key=True)
name = Column(String)
creation_date = Column(DateTime)
expires = Column(DateTime)
allowed_domain = Column(String)
allow_subdomains = Column(Boolean)
def __init__(self, name, allowed_domain, allow_subdomains):
self.htoken = _create_token()
self.name = name
self.allowed_domain = allowed_domain
self.allow_subdomains = allow_subdomains
from pyramid.view import view_config from pyramid.view import view_config
from pyramid.httpexceptions import HTTPUnauthorized
from pyramid.httpexceptions import HTTPServerError
import uuid import uuid
import json import json
...@@ -2,11 +5,10 @@ ...@@ -2,11 +5,10 @@
import uuid import uuid
import json import json
from webob import Response, exc
from cornice import Service from cornice import Service
import logging import logging
from pytsp.tsp import TSP from pytsp.tsp import TSP
from pytsp.distancegetter import DistanceGetter from pytsp.distancegetter import DistanceGetter
...@@ -7,11 +9,9 @@ ...@@ -7,11 +9,9 @@
from cornice import Service from cornice import Service
import logging import logging
from pytsp.tsp import TSP from pytsp.tsp import TSP
from pytsp.distancegetter import DistanceGetter from pytsp.distancegetter import DistanceGetter
from gpsdistance.main import distance as gps_distance
from pytsprf.distance_getter_factory import DistanceGetterFactory
from pytsprf.route_solver_factory import RouteSolverFactory
from pytsprf.models import get_db_user_token, get_db_user from pytsprf.models import get_db_user_token, get_db_user
...@@ -16,4 +16,6 @@ ...@@ -16,4 +16,6 @@
from pytsprf.models import get_db_user_token, get_db_user from pytsprf.models import get_db_user_token, get_db_user
from pytsprf.models import create_db_user, delete_db_user, get_db_users from pytsprf.models import delete_db_user, get_db_users
from pytsprf.osrm.osrmviaroute import OsrmViaroute from pytsprf.osrm.osrmviaroute import OsrmViaroute
...@@ -19,4 +21,3 @@ ...@@ -19,4 +21,3 @@
from pytsprf.osrm.osrmviaroute import OsrmViaroute from pytsprf.osrm.osrmviaroute import OsrmViaroute
from pytsprf.exceptions import HttpError500, HttpError401
from pytsprf.conf import get as conf_get from pytsprf.conf import get as conf_get
...@@ -21,5 +22,6 @@ ...@@ -21,5 +22,6 @@
from pytsprf.conf import get as conf_get from pytsprf.conf import get as conf_get
from pytsprf.transactions import task_create_db_user
# ================================================== # ==================================================
# Service : Users authentication and autorization # Service : Users authentication and autorization
...@@ -27,8 +29,6 @@ ...@@ -27,8 +29,6 @@
users = Service(name='users', path='/users', description="Users management") users = Service(name='users', path='/users', description="Users management")
_USERS = {}
def _create_token(): def _create_token():
return uuid.uuid4().hex return uuid.uuid4().hex
...@@ -39,8 +39,8 @@ ...@@ -39,8 +39,8 @@
htoken = request.headers.get(header) htoken = request.headers.get(header)
if htoken is None: if htoken is None:
raise HttpError401() raise HTTPUnauthorized()
try: try:
allowed_domain, token = htoken.split('-', 1) allowed_domain, token = htoken.split('-', 1)
except ValueError: except ValueError:
...@@ -43,6 +43,6 @@ ...@@ -43,6 +43,6 @@
try: try:
allowed_domain, token = htoken.split('-', 1) allowed_domain, token = htoken.split('-', 1)
except ValueError: except ValueError:
raise HttpError401() raise HTTPUnauthorized()
...@@ -48,5 +48,5 @@ ...@@ -48,5 +48,5 @@
dbtoken = get_db_user_token(allowed_domain) dbtoken = get_db_user_token(request.dbsession, allowed_domain)
valid = (dbtoken is not None) and (dbtoken == token) valid = (dbtoken is not None) and (dbtoken == token)
if not valid: if not valid:
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
valid = (dbtoken is not None) and (dbtoken == token) valid = (dbtoken is not None) and (dbtoken == token)
if not valid: if not valid:
raise HttpError401() raise HTTPUnauthorized()
request.validated['allowed_domain'] = allowed_domain request.validated['allowed_domain'] = allowed_domain
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
"""Returns a list of all users.""" """Returns a list of all users."""
is_authorized = request.validated['is_authorized'] is_authorized = request.validated['is_authorized']
if (is_authorized): if (is_authorized):
users = get_db_users() users = get_db_users(request.dbsession)
if users is not None: if users is not None:
allowed_domains = list() allowed_domains = list()
for user in users: for user in users:
...@@ -102,6 +102,6 @@ ...@@ -102,6 +102,6 @@
def create_token(request): def create_token(request):
"""Adds a new token for requester.""" """Adds a new token for requester."""
domain = request.validated['domain'] allowed_domain = request.validated['domain']
username = request.validated['username'] username = request.validated['username']
...@@ -106,5 +106,8 @@ ...@@ -106,5 +106,8 @@
username = request.validated['username'] username = request.validated['username']
is_new_user_created, user = create_db_user(username, domain) is_new_user_created, user = task_create_db_user(request.dbsession,
username,
allowed_domain
)
if is_new_user_created: if is_new_user_created:
...@@ -109,5 +112,6 @@ ...@@ -109,5 +112,6 @@
if is_new_user_created: if is_new_user_created:
user = {'domain': domain, 'token': get_db_user_token(domain)} user = {'allowed_domain': allowed_domain,
'token': get_db_user_token(request.dbsession, allowed_domain)}
request.validated['created'] = True request.validated['created'] = True
else: else:
...@@ -112,5 +116,5 @@ ...@@ -112,5 +116,5 @@
request.validated['created'] = True request.validated['created'] = True
else: else:
raise HttpError500() raise HTTPServerError()
if is_new_user_created: if is_new_user_created:
...@@ -115,4 +119,5 @@ ...@@ -115,4 +119,5 @@
if is_new_user_created: if is_new_user_created:
response = {'created': is_new_user_created, response = {'created': is_new_user_created,
'token': '%s-%s' 'token': '%s-%s'
...@@ -117,6 +122,6 @@ ...@@ -117,6 +122,6 @@
response = {'created': is_new_user_created, response = {'created': is_new_user_created,
'token': '%s-%s' 'token': '%s-%s'
% (user.get('domain'), user.get('token'))} % (user.get('allowed_domain'), user.get('token'))}
else: else:
response = {'created': is_new_user_created} response = {'created': is_new_user_created}
...@@ -127,8 +132,7 @@ ...@@ -127,8 +132,7 @@
def delete_user(request): def delete_user(request):
"""Removes the user.""" """Removes the user."""
allowed_domain = request.validated['allowed_domain'] allowed_domain = request.validated['allowed_domain']
success = delete_db_user(request.dbsession, allowed_domain)
success = delete_db_user(allowed_domain)
return {'deleted': success} return {'deleted': success}
...@@ -165,9 +169,9 @@ ...@@ -165,9 +169,9 @@
) )
def get_response(points, route): def get_response(points, route, start, end):
return { return {
'waypoints': points, 'waypoints': points,
'route': route, 'route': route,
'api-description': u'XCG Consulting API : TSP solution', 'api-description': u'XCG Consulting API : TSP solution',
...@@ -169,10 +173,10 @@ ...@@ -169,10 +173,10 @@
return { return {
'waypoints': points, 'waypoints': points,
'route': route, 'route': route,
'api-description': u'XCG Consulting API : TSP solution', 'api-description': u'XCG Consulting API : TSP solution',
'origin': points[0], 'start': start,
'destination': points[0] 'end': end
} }
...@@ -187,8 +191,5 @@ ...@@ -187,8 +191,5 @@
return points return points
def get_viaroute(points): def get_route(points, start, end, is_test_mode=False):
oviaroute = OsrmViaroute()
viaroute = oviaroute.get_viaroute(points)
...@@ -194,6 +195,7 @@ ...@@ -194,6 +195,7 @@
return viaroute if is_test_mode:
get_distance = gps_distance
else:
def get_route(points, is_test_mode=False): scheme = conf_get('osrm.scheme')
hostname = conf_get('osrm.hostname')
...@@ -199,7 +201,4 @@ ...@@ -199,7 +201,4 @@
#dgetterFactory = DistanceGetterFactory(is_test_mode) distance_getter = DistanceGetter(hostname, scheme=scheme)
#distance_getter = dgetterFactory.get_instance() get_distance = distance_getter.get_distance
# solverFactory = RouteSolverFactory(points, distance_getter)
# solver = solverFactory.get_instance()
# indices = solver.get_route()
...@@ -205,9 +204,9 @@ ...@@ -205,9 +204,9 @@
scheme = conf_get('osrm.scheme') solver = TSP(points,
hostname = conf_get('osrm.hostname') get_distance,
no_tsp=True,
distance_getter = DistanceGetter(hostname, scheme=scheme) start=start,
get_distance = distance_getter.get_distance end=end
solver = TSP(points, get_distance) )
solver.init() solver.init()
...@@ -212,7 +211,6 @@ ...@@ -212,7 +211,6 @@
solver.init() solver.init()
indices = solver.compute() indices = solver.compute()
ordered_points = [points[i] for i in indices] ordered_points = [points[i] for i in indices]
...@@ -215,10 +213,12 @@ ...@@ -215,10 +213,12 @@
indices = solver.compute() indices = solver.compute()
ordered_points = [points[i] for i in indices] ordered_points = [points[i] for i in indices]
return get_viaroute(ordered_points) viaroute = OsrmViaroute()
return viaroute.get_viaroute(ordered_points)
def connections_logging(request): def connections_logging(request):
""" """
...@@ -220,12 +220,13 @@ ...@@ -220,12 +220,13 @@
def connections_logging(request): def connections_logging(request):
""" """
This log allows to trace User connections for further statistical reports This log allows to trace User connections for further
statistical reports
""" """
logger = logging.getLogger('pytsprf') logger = logging.getLogger('pytsprf')
allowed_domain = request.validated['allowed_domain'] allowed_domain = request.validated['allowed_domain']
...@@ -226,9 +227,9 @@ ...@@ -226,9 +227,9 @@
""" """
logger = logging.getLogger('pytsprf') logger = logging.getLogger('pytsprf')
allowed_domain = request.validated['allowed_domain'] allowed_domain = request.validated['allowed_domain']
is_found, user = get_db_user(allowed_domain) is_found, user = get_db_user(request.dbsession, allowed_domain)
if is_found: if is_found:
...@@ -233,6 +234,7 @@ ...@@ -233,6 +234,7 @@
if is_found: if is_found:
logger.info('DOMAIN: %s, ACCOUNT: %s, API_KEY: %s' % (user.allowed_domain, user.name, user.htoken)) logger.info('DOMAIN: %s, ACCOUNT: %s, API_KEY: %s'
% (user.allowed_domain, user.name, user.htoken))
@tsp.post(validators=valid_token) @tsp.post(validators=valid_token)
...@@ -245,4 +247,7 @@ ...@@ -245,4 +247,7 @@
requestDataDict = request.json requestDataDict = request.json
points = convert_to_points(requestDataDict) points = convert_to_points(requestDataDict)
start = int(request.headers.get('start'))
end = int(request.headers.get('end'))
route = get_route( route = get_route(
...@@ -248,4 +253,4 @@ ...@@ -248,4 +253,4 @@
route = get_route( route = get_route(
points, is_test_mode=False points, start, end, is_test_mode=False
) )
response = get_response( response = get_response(
...@@ -250,6 +255,6 @@ ...@@ -250,6 +255,6 @@
) )
response = get_response( response = get_response(
requestDataDict, route requestDataDict, route, start, end
) )
return json.dumps(response) return json.dumps(response)
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
def create_user(): def create_user():
user = {'name': 'test_create_user:username1', user = {'name': 'test_create_user:username2',
'domain': 'localhost:6544', 'domain': 'localhost:6545',
} }
response = requests.post( response = requests.post(
......
...@@ -31,7 +31,8 @@ ...@@ -31,7 +31,8 @@
'pyramid', 'pyramid',
'pyramid_chameleon', 'pyramid_chameleon',
'pyramid_debugtoolbar', 'pyramid_debugtoolbar',
'pyramid_tm',
'cornice', 'cornice',
'waitress', 'waitress',
'sqlalchemy', 'sqlalchemy',
'requests', 'requests',
...@@ -34,7 +35,8 @@ ...@@ -34,7 +35,8 @@
'cornice', 'cornice',
'waitress', 'waitress',
'sqlalchemy', 'sqlalchemy',
'requests', 'requests',
'zope.sqlalchemy',
], ],
tests_require=[ tests_require=[
], ],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment