Merged in the merge work branch personal/henrik/r6270 which provides the agenda scheduling tool step 3, from a merge of branch/ssw/agenda/v4.70 from mcr@sandelman.ca; and also substantial fixes to the test framework, and more.

- Legacy-Id: 6328
This commit is contained in:
Henrik Levkowetz 2013-10-01 13:53:05 +00:00
commit 342bc5bf96
405 changed files with 69723 additions and 1227 deletions

1
dajaxice/__init__.py Normal file
View file

@ -0,0 +1 @@
VERSION = (0, 2, 0, 0, 'beta')

186
dajaxice/core/Dajaxice.py Normal file
View file

@ -0,0 +1,186 @@
#import logging
from django.conf import settings
# Python 2.7 has an importlib with import_module.
# For older Pythons, Django's bundled copy provides it.
# For older Django's dajaxice reduced_import_module.
try:
from importlib import import_module
except:
try:
from django.utils.importlib import import_module
except:
from dajaxice.utils import simple_import_module as import_module
#log = logging.getLogger('dajaxice.DajaxiceRequest')
import syslog
def warning(msg):
syslog.syslog(syslog.LOG_WANRNING, msg)
log = syslog
log.warning = warning
class DajaxiceFunction(object):
def __init__(self, name, path, doc=None):
self.name = name
self.path = path
self.doc = doc
def get_callable_path(self):
return '%s.%s' % (self.path.replace('.ajax', ''), self.name)
def __cmp__(self, other):
return (self.name == other.name and self.path == other.path)
class DajaxiceModule(object):
def __init__(self, module):
self.functions = []
self.sub_modules = []
self.name = module[0]
sub_module = module[1:]
if len(sub_module) != 0:
self.add_submodule(sub_module)
def get_module(self, module):
"""
Recursively get_module util we found it.
"""
if len(module) == 0:
return self
for dajaxice_module in self.sub_modules:
if dajaxice_module.name == module[0]:
return dajaxice_module.get_module(module[1:])
return None
def add_function(self, function):
self.functions.append(function)
def has_sub_modules(self):
return len(self.sub_modules) > 0
def add_submodule(self, module):
"""
Recursively add_submodule, if it's not registered, create it.
"""
if len(module) == 0:
return
else:
sub_module = self.exist_submodule(module[0])
if type(sub_module) == int:
self.sub_modules[sub_module].add_submodule(module[1:])
else:
self.sub_modules.append(DajaxiceModule(module))
def exist_submodule(self, name):
"""
Check if submodule name was already registered.
"""
for module in self.sub_modules:
if module.name == name:
return self.sub_modules.index(module)
return False
class Dajaxice(object):
def __init__(self):
self._registry = []
self._callable = []
for function in getattr(settings, 'DAJAXICE_FUNCTIONS', ()):
function = function.rsplit('.', 1)
self.register_function(function[0], function[1])
def register(self, function):
self.register_function(function.__module__, function.__name__, function.__doc__)
def register_function(self, module, name, doc=None):
"""
Register function at 'module' depth
"""
#Create the dajaxice function.
function = DajaxiceFunction(name=name, path=module, doc=doc)
#Check for already registered functions.
full_path = '%s.%s' % (module, name)
if full_path in self._callable:
log.warning('%s already registered as dajaxice function.' % full_path)
return
self._callable.append(full_path)
#Dajaxice path without ajax.
module_without_ajax = module.replace('.ajax', '').split('.')
#Register module if necessary.
exist_module = self._exist_module(module_without_ajax[0])
if type(exist_module) == int:
self._registry[exist_module].add_submodule(module_without_ajax[1:])
else:
self._registry.append(DajaxiceModule(module_without_ajax))
#Register Function
module = self.get_module(module_without_ajax)
if module:
module.add_function(function)
def get_module(self, module):
"""
Recursively get module from registry
"""
for dajaxice_module in self._registry:
if dajaxice_module.name == module[0]:
return dajaxice_module.get_module(module[1:])
return None
def is_callable(self, name):
return name in self._callable
def _exist_module(self, module_name):
for module in self._registry:
if module.name == module_name:
return self._registry.index(module)
return False
def get_functions(self):
return self._registry
LOADING_DAJAXICE = False
def dajaxice_autodiscover():
"""
Auto-discover INSTALLED_APPS ajax.py modules and fail silently when
not present.
NOTE: dajaxice_autodiscover was inspired/copied from django.contrib.admin autodiscover
"""
global LOADING_DAJAXICE
if LOADING_DAJAXICE:
return
LOADING_DAJAXICE = True
import imp
from django.conf import settings
for app in settings.INSTALLED_APPS:
try:
app_path = import_module(app).__path__
except AttributeError:
continue
try:
imp.find_module('ajax', app_path)
except ImportError:
continue
import_module("%s.ajax" % app)
LOADING_DAJAXICE = False

View file

@ -0,0 +1,228 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
import os
import sys
#import logging
import traceback
from django.conf import settings
from django.utils import simplejson
from django.http import HttpResponse
from dajaxice.core import dajaxice_functions
from dajaxice.exceptions import FunctionNotCallableError, DajaxiceImportError
#log = logging.getLogger('dajaxice.DajaxiceRequest')
import syslog
def debug(msg):
syslog.syslog(syslog.LOG_DEBUG, msg)
def info(msg):
syslog.syslog(syslog.LOG_INFO, msg)
def warning(msg):
syslog.syslog(syslog.LOG_WANRNING, msg)
def error(msg):
syslog.syslog(syslog.LOG_ERR, msg)
log = syslog
log.debug = debug
log.info = info
log.warning = warning
log.error = error
# Python 2.7 has an importlib with import_module.
# For older Pythons, Django's bundled copy provides it.
# For older Django's dajaxice reduced_import_module.
try:
from importlib import import_module
except:
try:
from django.utils.importlib import import_module
except:
from dajaxice.utils import simple_import_module as import_module
def safe_dict(d):
"""
Recursively clone json structure with UTF-8 dictionary keys
http://www.gossamer-threads.com/lists/python/bugs/684379
"""
if isinstance(d, dict):
return dict([(k.encode('utf-8'), safe_dict(v)) for k, v in d.iteritems()])
elif isinstance(d, list):
return [safe_dict(x) for x in d]
else:
return d
class DajaxiceRequest(object):
def __init__(self, request, call):
call = call.rsplit('.', 1)
self.app_name = call[0]
self.method = call[1]
self.request = request
self.project_name = os.environ['DJANGO_SETTINGS_MODULE'].split('.')[0]
self.module = "%s.ajax" % self.app_name
self.full_name = "%s.%s" % (self.module, self.method)
@staticmethod
def get_js_functions():
return dajaxice_functions.get_functions()
@staticmethod
def get_media_prefix():
return getattr(settings, 'DAJAXICE_MEDIA_PREFIX', "dajaxice")
@staticmethod
def get_functions():
return getattr(settings, 'DAJAXICE_FUNCTIONS', ())
@staticmethod
def get_debug():
return getattr(settings, 'DAJAXICE_DEBUG', True)
@staticmethod
def get_notify_exceptions():
return getattr(settings, 'DAJAXICE_NOTIFY_EXCEPTIONS', False)
@staticmethod
def get_cache_control():
if settings.DEBUG:
return 0
return getattr(settings, 'DAJAXICE_CACHE_CONTROL', 5 * 24 * 60 * 60)
@staticmethod
def get_xmlhttprequest_js_import():
return getattr(settings, 'DAJAXICE_XMLHTTPREQUEST_JS_IMPORT', True)
@staticmethod
def get_json2_js_import():
return getattr(settings, 'DAJAXICE_JSON2_JS_IMPORT', True)
@staticmethod
def get_exception_message():
return getattr(settings, 'DAJAXICE_EXCEPTION', u'DAJAXICE_EXCEPTION')
@staticmethod
def get_js_docstrings():
return getattr(settings, 'DAJAXICE_JS_DOCSTRINGS', False)
def _is_callable(self):
"""
Return if the request function was registered.
"""
return dajaxice_functions.is_callable(self.full_name)
def _get_ajax_function(self):
"""
Return a callable ajax function.
This function should be imported according the Django version.
"""
return self._modern_get_ajax_function()
def _modern_get_ajax_function(self):
"""
Return a callable ajax function.
This function uses django.utils.importlib
"""
self.module_import_name = "%s.%s" % (self.project_name, self.module)
try:
return self._modern_import()
except:
self.module_import_name = self.module
return self._modern_import()
def _modern_import(self):
try:
mod = import_module(self.module_import_name)
return mod.__getattribute__(self.method)
except:
raise DajaxiceImportError()
def process(self):
"""
Process the dajax request calling the apropiate method.
"""
if self._is_callable():
log.debug('Function %s is callable' % self.full_name)
argv = self.request.POST.get('argv')
if argv != 'undefined':
try:
argv = simplejson.loads(self.request.POST.get('argv'))
argv = safe_dict(argv)
except Exception, e:
log.error('argv exception %s' % e)
argv = {}
else:
argv = {}
log.debug('argv %s' % argv)
try:
thefunction = self._get_ajax_function()
response = '%s' % thefunction(self.request, **argv)
except Exception, e:
trace = '\n'.join(traceback.format_exception(*sys.exc_info()))
log.error(trace)
response = '%s' % DajaxiceRequest.get_exception_message()
if DajaxiceRequest.get_notify_exceptions():
self.notify_exception(self.request, sys.exc_info())
log.info('response: %s' % response)
return HttpResponse(response, mimetype="application/x-json")
else:
log.debug('Function %s is not callable' % self.full_name)
raise FunctionNotCallableError(name=self.full_name)
def notify_exception(self, request, exc_info):
"""
Send Exception traceback to ADMINS
Similar to BaseHandler.handle_uncaught_exception
"""
from django.conf import settings
from django.core.mail import mail_admins
subject = 'Error (%s IP): %s' % ((request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS and 'internal' or 'EXTERNAL'), request.path)
try:
request_repr = repr(request)
except:
request_repr = "Request repr() unavailable"
trace = '\n'.join(traceback.format_exception(*(exc_info or sys.exc_info())))
message = "%s\n\n%s" % (trace, request_repr)
mail_admins(subject, message, fail_silently=True)

View file

@ -0,0 +1,5 @@
from Dajaxice import Dajaxice
dajaxice_functions = Dajaxice()
from DajaxiceRequest import DajaxiceRequest
from Dajaxice import dajaxice_autodiscover

10
dajaxice/decorators.py Normal file
View file

@ -0,0 +1,10 @@
from dajaxice.core import dajaxice_functions
def dajaxice_register(original_function):
"""
Register the original funcion and returns it
"""
dajaxice_functions.register(original_function)
return original_function

41
dajaxice/exceptions.py Normal file
View file

@ -0,0 +1,41 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
class FunctionNotCallableError(Exception):
def __init__(self, name):
self.name = name
class DajaxiceImportError(Exception):
pass

75
dajaxice/finders.py Normal file
View file

@ -0,0 +1,75 @@
import os
import tempfile
from django.contrib.staticfiles import finders
from django.template import Context
from django.template.loader import get_template
from django.core.exceptions import SuspiciousOperation
class VirtualStorage(finders.FileSystemStorage):
"""" Mock a FileSystemStorage to build tmp files on demand."""
def __init__(self, *args, **kwargs):
self._files_cache = {}
super(VirtualStorage, self).__init__(*args, **kwargs)
def get_or_create_file(self, path):
if path not in self.files:
return ''
data = getattr(self, self.files[path])()
try:
current_file = open(self._files_cache[path])
current_data = current_file.read()
current_file.close()
if current_data != data:
os.remove(path)
raise Exception("Invalid data")
except Exception:
handle, tmp_path = tempfile.mkstemp()
tmp_file = open(tmp_path, 'w')
tmp_file.write(data)
tmp_file.close()
self._files_cache[path] = tmp_path
return self._files_cache[path]
def exists(self, name):
return name in self.files
def listdir(self, path):
folders, files = [], []
for f in self.files:
if f.startswith(path):
f = f.replace(path, '', 1)
if os.sep in f:
folders.append(f.split(os.sep, 1)[0])
else:
files.append(f)
return folders, files
def path(self, name):
try:
path = self.get_or_create_file(name)
except ValueError:
raise SuspiciousOperation("Attempted access to '%s' denied." % name)
return os.path.normpath(path)
class DajaxiceStorage(VirtualStorage):
files = {'dajaxice/dajaxice.core.js': 'dajaxice_core_js'}
def dajaxice_core_js(self):
from dajaxice.core import dajaxice_autodiscover, dajaxice_config
dajaxice_autodiscover()
c = Context({'dajaxice_config': dajaxice_config})
return get_template('dajaxice/dajaxice.core.js').render(c)
class DajaxiceFinder(finders.BaseStorageFinder):
storage = DajaxiceStorage()

View file

View file

View file

@ -0,0 +1,83 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
import httplib
import urllib
from django.core.management.base import BaseCommand
from django.template.loader import render_to_string
from optparse import make_option
from dajaxice.core import DajaxiceRequest
from dajaxice.core import dajaxice_autodiscover
dajaxice_autodiscover()
class Command(BaseCommand):
help = "Generate dajaxice.core.js file to import it as static file"
args = "[--compile]"
option_list = BaseCommand.option_list + (
make_option('--compile', default='no', dest='compile', help='Compile output using Google closure-compiler'),
)
requires_model_validation = False
def handle(self, *app_labels, **options):
compile_output = options.get('compile', 'yes')
data = {'dajaxice_js_functions': DajaxiceRequest.get_js_functions(),
'DAJAXICE_URL_PREFIX': DajaxiceRequest.get_media_prefix(),
'DAJAXICE_XMLHTTPREQUEST_JS_IMPORT': DajaxiceRequest.get_xmlhttprequest_js_import(),
'DAJAXICE_JSON2_JS_IMPORT': DajaxiceRequest.get_json2_js_import(),
'DAJAXICE_EXCEPTION': DajaxiceRequest.get_exception_message()}
js = render_to_string('dajaxice/dajaxice.core.js', data)
if compile_output.lower() == "closure":
print self.complie_js_with_closure(js)
else:
print js
def complie_js_with_closure(self, js):
params = urllib.urlencode([
('js_code', js),
('compilation_level', 'ADVANCED_OPTIMIZATIONS'),
('output_format', 'text'),
('output_info', 'compiled_code'),
])
# Always use the following value for the Content-type header.
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = httplib.HTTPConnection('closure-compiler.appspot.com')
conn.request('POST', '/compile', params, headers)
response = conn.getresponse()
data = response.read()
conn.close()
return data

0
dajaxice/models.py Normal file
View file

View file

@ -0,0 +1,128 @@
var Dajaxice = {
{% for module in dajaxice_js_functions %}
{% include "dajaxice/dajaxice_core_loop.js" %}
{% endfor %}{% ifnotequal dajaxice_js_functions|length 0 %},{% endifnotequal %}
get_cookie: function(name)
{
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = cookies[i].toString().replace(/^\s+/, "").replace(/\s+$/, "");
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
},
call: function(dajaxice_function, dajaxice_callback, argv, exception_callback)
{
var send_data = [];
var is_callback_a_function = (typeof(dajaxice_callback) == 'function');
if(!is_callback_a_function){
alert("dajaxice_callback should be a function since dajaxice 0.2")
}
if(exception_callback==undefined || typeof(dajaxice_callback) != 'function'){
exception_callback = this.get_setting('default_exception_callback');
}
send_data.push('argv='+encodeURIComponent(JSON.stringify(argv)));
send_data = send_data.join('&');
var oXMLHttpRequest = new XMLHttpRequest;
oXMLHttpRequest.open('POST', '/{{DAJAXICE_URL_PREFIX}}/'+dajaxice_function+'/');
oXMLHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest");
oXMLHttpRequest.setRequestHeader("X-CSRFToken",Dajaxice.get_cookie('csrftoken'));
oXMLHttpRequest.onreadystatechange = function() {
if (this.readyState == XMLHttpRequest.DONE) {
if(this.responseText == Dajaxice.EXCEPTION){
exception_callback();
}
else{
try{
dajaxice_callback(JSON.parse(this.responseText));
}
catch(exception){
dajaxice_callback(this.responseText);
}
}
}
}
oXMLHttpRequest.send(send_data);
},
setup: function(settings)
{
this.settings = settings;
},
get_setting: function(key){
if(this.settings == undefined || this.settings[key] == undefined){
return this.default_settings[key];
}
return this.settings[key];
},
default_exception_callback: function(data){
alert('Something goes wrong');
}
};
Dajaxice.EXCEPTION = '{{ DAJAXICE_EXCEPTION }}';
Dajaxice.default_settings = {'default_exception_callback': Dajaxice.default_exception_callback}
window['Dajaxice'] = Dajaxice;
{% comment %}
/*
XMLHttpRequest.js Compiled with Google Closure
XMLHttpRequest.js Copyright (C) 2008 Sergey Ilinsky (http://www.ilinsky.com)
This work is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This work is distributed in the hope that it will be useful,
but without any warranty; without even the implied warranty of
merchantability or fitness for a particular purpose. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
{% endcomment %}
{% if DAJAXICE_XMLHTTPREQUEST_JS_IMPORT %}
(function(){function b(){this._object=i?new i:new window.ActiveXObject("Microsoft.XMLHTTP");this._listeners=[]}function k(a){b.onreadystatechange&&b.onreadystatechange.apply(a);a.dispatchEvent({type:"readystatechange",bubbles:false,cancelable:false,timeStamp:new Date+0})}function p(a){var c=a.responseXML,d=a.responseText;if(h&&d&&c&&!c.documentElement&&a.getResponseHeader("Content-Type").match(/[^\/]+\/[^\+]+\+xml/)){c=new window.ActiveXObject("Microsoft.XMLDOM");c.async=false;c.validateOnParse=false;
c.loadXML(d)}if(c)if(h&&c.parseError!=0||!c.documentElement||c.documentElement&&c.documentElement.tagName=="parsererror")return null;return c}function o(a){try{a.responseText=a._object.responseText}catch(c){}try{a.responseXML=p(a._object)}catch(d){}try{a.status=a._object.status}catch(g){}try{a.statusText=a._object.statusText}catch(e){}}function l(a){a._object.onreadystatechange=new window.Function}var i=window.XMLHttpRequest,j=!!window.controllers,h=window.document.all&&!window.opera;if(j&&i.wrapped)b.wrapped=
i.wrapped;b.UNSENT=0;b.OPENED=1;b.HEADERS_RECEIVED=2;b.LOADING=3;b.DONE=4;b.prototype.readyState=b.UNSENT;b.prototype.responseText="";b.prototype.responseXML=null;b.prototype.status=0;b.prototype.statusText="";b.prototype.onreadystatechange=null;b.onreadystatechange=null;b.onopen=null;b.onsend=null;b.onabort=null;b.prototype.open=function(a,c,d,g,e){delete this._headers;if(arguments.length<3)d=true;this._async=d;var f=this,m=this.readyState,n;if(h&&d){n=function(){if(m!=b.DONE){l(f);f.abort()}};window.attachEvent("onunload",
n)}b.onopen&&b.onopen.apply(this,arguments);if(arguments.length>4)this._object.open(a,c,d,g,e);else arguments.length>3?this._object.open(a,c,d,g):this._object.open(a,c,d);if(!j&&!h){this.readyState=b.OPENED;k(this)}this._object.onreadystatechange=function(){if(!(j&&!d)){f.readyState=f._object.readyState;o(f);if(f._aborted)f.readyState=b.UNSENT;else{if(f.readyState==b.DONE){l(f);h&&d&&window.detachEvent("onunload",n)}m!=f.readyState&&k(f);m=f.readyState}}}};b.prototype.send=function(a){b.onsend&&b.onsend.apply(this,
arguments);if(a&&a.nodeType){a=window.XMLSerializer?(new window.XMLSerializer).serializeToString(a):a.xml;this._headers["Content-Type"]||this._object.setRequestHeader("Content-Type","application/xml")}this._object.send(a);if(j&&!this._async){this.readyState=b.OPENED;for(o(this);this.readyState<b.DONE;){this.readyState++;k(this);if(this._aborted)return}}};b.prototype.abort=function(){b.onabort&&b.onabort.apply(this,arguments);if(this.readyState>b.UNSENT)this._aborted=true;this._object.abort();l(this)};
b.prototype.getAllResponseHeaders=function(){return this._object.getAllResponseHeaders()};b.prototype.getResponseHeader=function(a){return this._object.getResponseHeader(a)};b.prototype.setRequestHeader=function(a,c){if(!this._headers)this._headers={};this._headers[a]=c;return this._object.setRequestHeader(a,c)};b.prototype.addEventListener=function(a,c,d){for(var g=0,e;e=this._listeners[g];g++)if(e[0]==a&&e[1]==c&&e[2]==d)return;this._listeners.push([a,c,d])};b.prototype.removeEventListener=function(a,
c,d){for(var g=0,e;e=this._listeners[g];g++)if(e[0]==a&&e[1]==c&&e[2]==d)break;e&&this._listeners.splice(g,1)};b.prototype.dispatchEvent=function(a){a={type:a.type,target:this,currentTarget:this,eventPhase:2,bubbles:a.bubbles,cancelable:a.cancelable,timeStamp:a.timeStamp,stopPropagation:function(){},preventDefault:function(){},initEvent:function(){}};if(a.type=="readystatechange"&&this.onreadystatechange)(this.onreadystatechange.handleEvent||this.onreadystatechange).apply(this,[a]);for(var c=0,d;d=
this._listeners[c];c++)if(d[0]==a.type&&!d[2])(d[1].handleEvent||d[1]).apply(this,[a])};b.prototype.toString=function(){return"[object XMLHttpRequest]"};b.toString=function(){return"[XMLHttpRequest]"};if(!window.Function.prototype.apply)window.Function.prototype.apply=function(a,c){c||(c=[]);a.__func=this;a.__func(c[0],c[1],c[2],c[3],c[4]);delete a.__func};window.XMLHttpRequest=b})();
{% endif %}
{% comment %}
/*
http://www.json.org/json2.js Compiled with Google Closure
This code was released under Public Domain by json.org , Thanks!
I hope that in the future this code won't be neccessary, but today all browsers doesn't supports JSON.stringify().
*/
{% endcomment %}
{% if DAJAXICE_JSON2_JS_IMPORT %}
if(!this.JSON)this.JSON={};
(function(){function k(a){return a<10?"0"+a:a}function n(a){o.lastIndex=0;return o.test(a)?'"'+a.replace(o,function(c){var d=q[c];return typeof d==="string"?d:"\\u"+("0000"+c.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function l(a,c){var d,f,i=g,e,b=c[a];if(b&&typeof b==="object"&&typeof b.toJSON==="function")b=b.toJSON(a);if(typeof j==="function")b=j.call(c,a,b);switch(typeof b){case "string":return n(b);case "number":return isFinite(b)?String(b):"null";case "boolean":case "null":return String(b);case "object":if(!b)return"null";
g+=m;e=[];if(Object.prototype.toString.apply(b)==="[object Array]"){f=b.length;for(a=0;a<f;a+=1)e[a]=l(a,b)||"null";c=e.length===0?"[]":g?"[\n"+g+e.join(",\n"+g)+"\n"+i+"]":"["+e.join(",")+"]";g=i;return c}if(j&&typeof j==="object"){f=j.length;for(a=0;a<f;a+=1){d=j[a];if(typeof d==="string")if(c=l(d,b))e.push(n(d)+(g?": ":":")+c)}}else for(d in b)if(Object.hasOwnProperty.call(b,d))if(c=l(d,b))e.push(n(d)+(g?": ":":")+c);c=e.length===0?"{}":g?"{\n"+g+e.join(",\n"+g)+"\n"+i+"}":"{"+e.join(",")+"}";
g=i;return c}}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+k(this.getUTCMonth()+1)+"-"+k(this.getUTCDate())+"T"+k(this.getUTCHours())+":"+k(this.getUTCMinutes())+":"+k(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var p=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
o=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,g,m,q={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},j;if(typeof JSON.stringify!=="function")JSON.stringify=function(a,c,d){var f;m=g="";if(typeof d==="number")for(f=0;f<d;f+=1)m+=" ";else if(typeof d==="string")m=d;if((j=c)&&typeof c!=="function"&&(typeof c!=="object"||typeof c.length!=="number"))throw new Error("JSON.stringify");return l("",
{"":a})};if(typeof JSON.parse!=="function")JSON.parse=function(a,c){function d(f,i){var e,b,h=f[i];if(h&&typeof h==="object")for(e in h)if(Object.hasOwnProperty.call(h,e)){b=d(h,e);if(b!==undefined)h[e]=b;else delete h[e]}return c.call(f,i,h)}p.lastIndex=0;if(p.test(a))a=a.replace(p,function(f){return"\\u"+("0000"+f.charCodeAt(0).toString(16)).slice(-4)});if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){a=eval("("+a+")");return typeof c==="function"?d({"":a},""):a}throw new SyntaxError("JSON.parse");}})();
{% endif %}

View file

@ -0,0 +1,16 @@
{{ module.name }}: {
{% for function in module.functions %}
{% if function.doc and DAJAXICE_JS_DOCSTRINGS %}/* {{ function.doc|default:'' }}*/ {% endif %}
{{ function.name }}: function(callback_function, argv, exception_callback){
Dajaxice.call('{{function.get_callable_path}}', callback_function, argv, exception_callback);
}{% if not forloop.last %},{% endif %}
{% endfor %}
{% for sub_module in module.sub_modules %}
{% with "dajaxice/dajaxice_core_loop.js" as filename %}
{% with sub_module as module %}
{% include filename %}
{% endwith %}
{% endwith %}
{% endfor %}
}{% if not forloop.last %},{% endif %}

View file

@ -0,0 +1,5 @@
{% for function_name, function in module.functions.items %}
{{ function_name }}: function(callback_function, argv, custom_settings){
Dajaxice.call('{{ function.name }}', '{{ function.method }}', callback_function, argv, custom_settings);
}{% if not forloop.last or top %},{% endif %}
{% endfor %}

View file

@ -0,0 +1 @@
<script src="/{{ DAJAXICE_MEDIA_PREFIX }}/dajaxice.core.js" type="text/javascript" charset="utf-8"></script>

View file

@ -0,0 +1,8 @@
{{ name }}: {
{% include "dajaxice/dajaxice_function_loop.js" %}
{% for name, sub_module in module.submodules.items %}
{% with filename="dajaxice/dajaxice_module_loop.js" module=sub_module %}
{% include filename %}
{% endwith %}
{% endfor %}
}{% if not forloop.last %},{% endif %}

View file

View file

@ -0,0 +1,42 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from django import template
from dajaxice.core import DajaxiceRequest
register = template.Library()
@register.inclusion_tag('dajaxice/dajaxice_js_import.html', takes_context=True)
def dajaxice_js_import(context):
return {'DAJAXICE_MEDIA_PREFIX': DajaxiceRequest.get_media_prefix()}

174
dajaxice/tests/__init__.py Normal file
View file

@ -0,0 +1,174 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
import os
import unittest
from django.test import TestCase
from django.conf import settings
from dajaxice.exceptions import FunctionNotCallableError, DajaxiceImportError
from dajaxice.core import DajaxiceRequest
from dajaxice.core.Dajaxice import Dajaxice, DajaxiceModule, DajaxiceFunction
from dajaxice.core import dajaxice_functions
class DjangoIntegrationTest(TestCase):
urls = 'dajaxice.tests.urls'
def setUp(self):
settings.DAJAXICE_MEDIA_PREFIX = "dajaxice"
settings.DAJAXICE_DEBUG = False
settings.INSTALLED_APPS += ('dajaxice.tests', 'dajaxice.tests.submodules',)
os.environ['DJANGO_SETTINGS_MODULE'] = 'dajaxice'
def test_calling_not_registered_function(self):
self.failUnlessRaises(FunctionNotCallableError, self.client.post, '/dajaxice/dajaxice.tests.this_function_not_exist/', {'callback': 'my_callback'})
def test_calling_registered_function(self):
response = self.client.post('/dajaxice/dajaxice.tests.test_foo/', {'callback': 'my_callback'})
self.failUnlessEqual(response.status_code, 200)
self.failUnlessEqual(response.content, 'my_callback()')
def test_calling_registered_function_with_params(self):
response = self.client.post('/dajaxice/dajaxice.tests.test_foo_with_params/', {'callback': 'my_callback', 'argv': '{"param1":"value1"}'})
self.failUnlessEqual(response.status_code, 200)
self.failUnlessEqual(response.content, 'my_callback("value1")')
def test_bad_function(self):
response = self.client.post('/dajaxice/dajaxice.tests.test_ajax_exception/', {'callback': 'my_callback'})
self.failUnlessEqual(response.status_code, 200)
self.failUnlessEqual(response.content, "my_callback('DAJAXICE_EXCEPTION')")
def test_is_callable(self):
dr = DajaxiceRequest(None, 'dajaxice.tests.test_registered_function')
self.failUnless(dr._is_callable())
dr = DajaxiceRequest(None, 'dajaxice.tests.test_ajax_not_registered')
self.failIf(dr._is_callable())
def test_get_js_functions(self):
js_functions = DajaxiceRequest.get_js_functions()
functions = [DajaxiceFunction('test_registered_function', 'dajaxice.tests.ajax.test_registered_function'),
DajaxiceFunction('test_string', 'dajaxice.tests.ajax.test_string'),
DajaxiceFunction('test_ajax_exception', 'dajaxice.tests.ajax.test_ajax_exception'),
DajaxiceFunction('test_foo', 'dajaxice.tests.ajax.test_foo'),
DajaxiceFunction('test_foo_with_params', 'dajaxice.tests.ajax.test_foo_with_params'),
DajaxiceFunction('test_submodule_registered_function', 'dajaxice.tests.submodules.ajax.test_submodule_registered_function')]
callables = [f.path for f in functions]
self.failUnlessEqual(len(js_functions), 1)
self.failUnlessEqual(dajaxice_functions._callable, callables)
sub = js_functions[0]
self.failUnlessEqual(len(sub.sub_modules), 1)
self.failUnlessEqual(len(sub.functions), 0)
self.failUnlessEqual(sub.name, 'dajaxice')
sub = js_functions[0].sub_modules[0]
self.failUnlessEqual(len(sub.sub_modules), 1)
self.failUnlessEqual(len(sub.functions), 5)
self.failUnlessEqual(sub.functions, functions[:-1])
self.failUnlessEqual(sub.name, 'tests')
sub = js_functions[0].sub_modules[0].sub_modules[0]
self.failUnlessEqual(len(sub.sub_modules), 0)
self.failUnlessEqual(len(sub.functions), 1)
self.failUnlessEqual(sub.functions, functions[-1:])
self.failUnlessEqual(sub.name, 'submodules')
def test_get_ajax_function(self):
# Test modern Import with a real ajax function
dr = DajaxiceRequest(None, 'dajaxice.tests.test_foo')
function = dr._modern_get_ajax_function()
self.failUnless(hasattr(function, '__call__'))
# Test modern Import without a real ajax function
dr = DajaxiceRequest(None, 'dajaxice.tests.test_foo2')
self.failUnlessRaises(DajaxiceImportError, dr._modern_get_ajax_function)
class DajaxiceFunctionTest(unittest.TestCase):
def setUp(self):
self.function = DajaxiceFunction('my_function', 'module.submodule.foo.ajax')
def test_constructor(self):
self.failUnlessEqual(self.function.name, 'my_function')
self.failUnlessEqual(self.function.path, 'module.submodule.foo.ajax')
def test_get_callable_path(self):
self.failUnlessEqual(self.function.get_callable_path(), 'module.submodule.foo.my_function')
class DajaxiceModuleTest(unittest.TestCase):
def setUp(self):
self.module = DajaxiceModule('module.submodule.foo.ajax'.split('.'))
def test_constructor(self):
self.failUnlessEqual(self.module.functions, [])
self.failUnlessEqual(self.module.name, 'module')
self.failUnlessEqual(len(self.module.sub_modules), 1)
def test_add_function(self):
function = DajaxiceFunction('my_function', 'module.submodule.foo.ajax')
self.failUnlessEqual(len(self.module.functions), 0)
self.module.add_function(function)
self.failUnlessEqual(len(self.module.functions), 1)
def test_has_sub_modules(self):
self.failUnlessEqual(self.module.has_sub_modules(), True)
def test_exist_submodule(self):
self.failUnlessEqual(self.module.exist_submodule('submodule'), 0)
self.assertFalse(self.module.exist_submodule('other'))
self.module.add_submodule('other.foo'.split('.'))
self.failUnlessEqual(self.module.exist_submodule('other'), 1)
def test_add_submodule(self):
self.failUnlessEqual(len(self.module.sub_modules), 1)
self.module.add_submodule('other.foo'.split('.'))
self.failUnlessEqual(len(self.module.sub_modules), 2)
self.assertTrue(type(self.module.sub_modules[1]), DajaxiceModule)

61
dajaxice/tests/ajax.py Normal file
View file

@ -0,0 +1,61 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from django.utils import simplejson
from dajaxice.core import dajaxice_functions
def test_registered_function(request):
return ""
dajaxice_functions.register(test_registered_function)
def test_string(request):
return simplejson.dumps({'string': 'hello world'})
dajaxice_functions.register(test_string)
def test_ajax_exception(request):
raise Exception()
return
dajaxice_functions.register(test_ajax_exception)
def test_foo(request):
return ""
dajaxice_functions.register(test_foo)
def test_foo_with_params(request, param1):
return simplejson.dumps(param1)
dajaxice_functions.register(test_foo_with_params)

View file

@ -0,0 +1 @@
Django

View file

View file

@ -0,0 +1,40 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from dajaxice.core import dajaxice_functions
def test_submodule_registered_function(request):
return ""
dajaxice_functions.register(test_submodule_registered_function)

44
dajaxice/tests/urls.py Normal file
View file

@ -0,0 +1,44 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from django.conf.urls.defaults import *
from django.conf import settings
from dajaxice.core import dajaxice_autodiscover
dajaxice_autodiscover()
urlpatterns = patterns('',
#Dajaxice URLS
(r'^%s/' % settings.DAJAXICE_MEDIA_PREFIX, include('dajaxice.urls')),
)

39
dajaxice/urls.py Normal file
View file

@ -0,0 +1,39 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from django.conf.urls.defaults import *
urlpatterns = patterns('',
url(r'^dajaxice.core.js$', 'dajaxice.views.js_core'),
url(r'^(.*)/$', 'dajaxice.views.dajaxice_request'),)

50
dajaxice/utils.py Normal file
View file

@ -0,0 +1,50 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
def deserialize_form(data):
"""
Create a new QueryDict from a serialized form.
"""
from django.http import QueryDict
data = QueryDict(query_string=unicode(data).encode('utf-8'))
return data
def simple_import_module(name):
"""
Reduced version of import_module
"""
import sys
__import__(name)
return sys.modules[name]

62
dajaxice/views.py Normal file
View file

@ -0,0 +1,62 @@
#----------------------------------------------------------------------
# Copyright (c) 2009-2011 Benito Jorge Bastida
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# o Redistributions of source code must retain the above copyright
# notice, this list of conditions, and the disclaimer that follows.
#
# o Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions, and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
#
# o Neither the name of Digital Creations nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS AND CONTRIBUTORS *AS
# IS* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL
# CREATIONS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#----------------------------------------------------------------------
from django.shortcuts import render_to_response
from django.views.decorators.cache import cache_control
from dajaxice.core import DajaxiceRequest
def dajaxice_request(request, call):
"""
dajaxice_request
Uses DajaxRequest to handle dajax request.
Return the apropiate json according app_name and method.
"""
return DajaxiceRequest(request, call).process()
@cache_control(max_age=DajaxiceRequest.get_cache_control())
def js_core(request):
"""
Return the dajax JS code according settings.DAJAXICE_FUNCTIONS
registered functions.
"""
data = {'dajaxice_js_functions': DajaxiceRequest.get_js_functions(),
'DAJAXICE_URL_PREFIX': DajaxiceRequest.get_media_prefix(),
'DAJAXICE_XMLHTTPREQUEST_JS_IMPORT': DajaxiceRequest.get_xmlhttprequest_js_import(),
'DAJAXICE_JSON2_JS_IMPORT': DajaxiceRequest.get_json2_js_import(),
'DAJAXICE_EXCEPTION': DajaxiceRequest.get_exception_message(),
'DAJAXICE_JS_DOCSTRINGS': DajaxiceRequest.get_js_docstrings()}
return render_to_response('dajaxice/dajaxice.core.js', data, mimetype="text/javascript")

View file

@ -1,6 +1,7 @@
import sys
import time as timeutils
import inspect
try:
import syslog
logger = syslog.syslog
@ -15,11 +16,14 @@ except ImportError:
pformat = lambda x: x
import cProfile
import traceback as tb
try:
from django.conf import settings
debug = settings.DEBUG
except ImportError:
debug = True
from decorator import decorator
# A debug decorator, written by Paul Butler, taken from
@ -34,7 +38,7 @@ increment = 2
# Number of times to indent output
# A list is used to force access by reference
_report_indent = [4]
_mark = timeutils.clock()
_mark = [ timeutils.clock() ]
def set_indent(i):
_report_indent[0] = i
@ -79,16 +83,15 @@ def trace(fn): # renamed from 'report' by henrik 16 Jun 2011
return fn
def mark():
say("! mark")
_mark = timeutils.clock()
_mark[0] = timeutils.clock()
def lap(s):
tau = timeutils.clock() - _mark
tau = timeutils.clock() - _mark[0]
say("> %s: %.3fs since mark" % (s, tau))
def clock(s):
lap(s)
_mark = timeutils.clock()
_mark[0] = timeutils.clock()
def time(fn):
"""Decorator to print timing information about a function call.
@ -170,3 +173,16 @@ def profile(fn):
else:
return fn
def traceback():
if debug:
indent = ' ' * (_report_indent[0])
for s in tb.format_stack()[:-1]:
sys.stderr.write("%s%s" % (indent, s))
def info(name):
if debug:
frame = inspect.stack()[1][0]
value = eval(name, frame.f_globals, frame.f_locals)
indent = ' ' * (_report_indent[0])
sys.stderr.write("%s%s: %s %s\n" % (indent, name, value, type(value)))

View file

@ -1,251 +0,0 @@
########################## LICENCE ###############################
# Copyright (c) 2005-2012, Michele Simionato
# All rights reserved.
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
# Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# Redistributions in bytecode form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
"""
Decorator module, see http://pypi.python.org/pypi/decorator
for the documentation.
"""
__version__ = '3.4.0'
__all__ = ["decorator", "FunctionMaker", "contextmanager"]
import sys, re, inspect
if sys.version >= '3':
from inspect import getfullargspec
def get_init(cls):
return cls.__init__
else:
class getfullargspec(object):
"A quick and dirty replacement for getfullargspec for Python 2.X"
def __init__(self, f):
self.args, self.varargs, self.varkw, self.defaults = \
inspect.getargspec(f)
self.kwonlyargs = []
self.kwonlydefaults = None
def __iter__(self):
yield self.args
yield self.varargs
yield self.varkw
yield self.defaults
def get_init(cls):
return cls.__init__.im_func
DEF = re.compile('\s*def\s*([_\w][_\w\d]*)\s*\(')
# basic functionality
class FunctionMaker(object):
"""
An object with the ability to create functions with a given signature.
It has attributes name, doc, module, signature, defaults, dict and
methods update and make.
"""
def __init__(self, func=None, name=None, signature=None,
defaults=None, doc=None, module=None, funcdict=None):
self.shortsignature = signature
if func:
# func can be a class or a callable, but not an instance method
self.name = func.__name__
if self.name == '<lambda>': # small hack for lambda functions
self.name = '_lambda_'
self.doc = func.__doc__
self.module = func.__module__
if inspect.isfunction(func):
argspec = getfullargspec(func)
self.annotations = getattr(func, '__annotations__', {})
for a in ('args', 'varargs', 'varkw', 'defaults', 'kwonlyargs',
'kwonlydefaults'):
setattr(self, a, getattr(argspec, a))
for i, arg in enumerate(self.args):
setattr(self, 'arg%d' % i, arg)
if sys.version < '3': # easy way
self.shortsignature = self.signature = \
inspect.formatargspec(
formatvalue=lambda val: "", *argspec)[1:-1]
else: # Python 3 way
allargs = list(self.args)
allshortargs = list(self.args)
if self.varargs:
allargs.append('*' + self.varargs)
allshortargs.append('*' + self.varargs)
elif self.kwonlyargs:
allargs.append('*') # single star syntax
for a in self.kwonlyargs:
allargs.append('%s=None' % a)
allshortargs.append('%s=%s' % (a, a))
if self.varkw:
allargs.append('**' + self.varkw)
allshortargs.append('**' + self.varkw)
self.signature = ', '.join(allargs)
self.shortsignature = ', '.join(allshortargs)
self.dict = func.__dict__.copy()
# func=None happens when decorating a caller
if name:
self.name = name
if signature is not None:
self.signature = signature
if defaults:
self.defaults = defaults
if doc:
self.doc = doc
if module:
self.module = module
if funcdict:
self.dict = funcdict
# check existence required attributes
assert hasattr(self, 'name')
if not hasattr(self, 'signature'):
raise TypeError('You are decorating a non function: %s' % func)
def update(self, func, **kw):
"Update the signature of func with the data in self"
func.__name__ = self.name
func.__doc__ = getattr(self, 'doc', None)
func.__dict__ = getattr(self, 'dict', {})
func.func_defaults = getattr(self, 'defaults', ())
func.__kwdefaults__ = getattr(self, 'kwonlydefaults', None)
func.__annotations__ = getattr(self, 'annotations', None)
callermodule = sys._getframe(3).f_globals.get('__name__', '?')
func.__module__ = getattr(self, 'module', callermodule)
func.__dict__.update(kw)
def make(self, src_templ, evaldict=None, addsource=False, **attrs):
"Make a new function from a given template and update the signature"
src = src_templ % vars(self) # expand name and signature
evaldict = evaldict or {}
mo = DEF.match(src)
if mo is None:
raise SyntaxError('not a valid function template\n%s' % src)
name = mo.group(1) # extract the function name
names = set([name] + [arg.strip(' *') for arg in
self.shortsignature.split(',')])
for n in names:
if n in ('_func_', '_call_'):
raise NameError('%s is overridden in\n%s' % (n, src))
if not src.endswith('\n'): # add a newline just for safety
src += '\n' # this is needed in old versions of Python
try:
code = compile(src, '<string>', 'single')
# print >> sys.stderr, 'Compiling %s' % src
exec code in evaldict
except:
print >> sys.stderr, 'Error in generated code:'
print >> sys.stderr, src
raise
func = evaldict[name]
if addsource:
attrs['__source__'] = src
self.update(func, **attrs)
return func
@classmethod
def create(cls, obj, body, evaldict, defaults=None,
doc=None, module=None, addsource=True, **attrs):
"""
Create a function from the strings name, signature and body.
evaldict is the evaluation dictionary. If addsource is true an attribute
__source__ is added to the result. The attributes attrs are added,
if any.
"""
if isinstance(obj, str): # "name(signature)"
name, rest = obj.strip().split('(', 1)
signature = rest[:-1] #strip a right parens
func = None
else: # a function
name = None
signature = None
func = obj
self = cls(func, name, signature, defaults, doc, module)
ibody = '\n'.join(' ' + line for line in body.splitlines())
return self.make('def %(name)s(%(signature)s):\n' + ibody,
evaldict, addsource, **attrs)
def decorator(caller, func=None):
"""
decorator(caller) converts a caller function into a decorator;
decorator(caller, func) decorates a function using a caller.
"""
if func is not None: # returns a decorated function
evaldict = func.func_globals.copy()
evaldict['_call_'] = caller
evaldict['_func_'] = func
return FunctionMaker.create(
func, "return _call_(_func_, %(shortsignature)s)",
evaldict, undecorated=func, __wrapped__=func)
else: # returns a decorator
if inspect.isclass(caller):
name = caller.__name__.lower()
callerfunc = get_init(caller)
doc = 'decorator(%s) converts functions/generators into ' \
'factories of %s objects' % (caller.__name__, caller.__name__)
fun = getfullargspec(callerfunc).args[1] # second arg
elif inspect.isfunction(caller):
name = '_lambda_' if caller.__name__ == '<lambda>' \
else caller.__name__
callerfunc = caller
doc = caller.__doc__
fun = getfullargspec(callerfunc).args[0] # first arg
else: # assume caller is an object with a __call__ method
name = caller.__class__.__name__.lower()
callerfunc = caller.__call__.im_func
doc = caller.__call__.__doc__
fun = getfullargspec(callerfunc).args[1] # second arg
evaldict = callerfunc.func_globals.copy()
evaldict['_call_'] = caller
evaldict['decorator'] = decorator
return FunctionMaker.create(
'%s(%s)' % (name, fun),
'return decorator(_call_, %s)' % fun,
evaldict, undecorated=caller, __wrapped__=caller,
doc=doc, module=caller.__module__)
######################### contextmanager ########################
def __call__(self, func):
'Context manager decorator'
return FunctionMaker.create(
func, "with _self_: return _func_(%(shortsignature)s)",
dict(_self_=self, _func_=func), __wrapped__=func)
try: # Python >= 3.2
from contextlib import _GeneratorContextManager
ContextManager = type(
'ContextManager', (_GeneratorContextManager,), dict(__call__=__call__))
except ImportError: # Python >= 2.5
from contextlib import GeneratorContextManager
def __init__(self, f, *a, **k):
return GeneratorContextManager.__init__(self, f(*a, **k))
ContextManager = type(
'ContextManager', (GeneratorContextManager,),
dict(__call__=__call__, __init__=__init__))
contextmanager = decorator(ContextManager)

View file

@ -343,8 +343,8 @@ class QuerySet(object):
if num == 1:
return clone._result_cache[0]
if not num:
raise self.model.DoesNotExist("%s matching query does not exist."
% self.model._meta.object_name)
raise self.model.DoesNotExist("%s matching query does not exist. Lookup parameters were %s"
% (self.model._meta.object_name, kwargs))
raise self.model.MultipleObjectsReturned("get() returned more than one %s -- it returned %s! Lookup parameters were %s"
% (self.model._meta.object_name, num, kwargs))

View file

@ -1,11 +1,11 @@
import datetime
from django.conf import settings
import django.test
from ietf.utils.test_utils import SimpleUrlTestCase, canonicalize_sitemap
from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.utils import TestCase
from ietf.announcements.models import ScheduledAnnouncement
@ -21,7 +21,7 @@ class AnnouncementsUrlTestCase(SimpleUrlTestCase):
else:
return content
class SendScheduledAnnouncementsTestCase(django.test.TestCase):
class SendScheduledAnnouncementsTestCase(TestCase):
def test_send_plain_announcement(self):
a = ScheduledAnnouncement.objects.create(
mail_sent=False,
@ -66,8 +66,9 @@ class SendScheduledAnnouncementsTestCase(django.test.TestCase):
self.assertTrue(ScheduledAnnouncement.objects.get(id=a.id).mail_sent)
class SendScheduledAnnouncementsTestCaseREDESIGN(django.test.TestCase):
fixtures = ["names"]
class SendScheduledAnnouncementsTestCaseREDESIGN(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ["names"]
def test_send_plain_announcement(self):
make_test_data()

View file

@ -12,11 +12,8 @@ class DBTemplateForm(forms.ModelForm):
def clean_content(self):
try:
content = self.cleaned_data['content']
debug.show('type(content)')
debug.show('content')
if self.instance.type.slug == 'rst':
return_code = RSTTemplate(content).render(Context({}))
debug.show('return_code')
elif self.instance.type.slug == 'django':
DjangoTemplate(content).render(Context({}))
elif self.instance.type.slug == 'plain':

View file

@ -1,6 +1,5 @@
import os, shutil, datetime
import django.test
from django.core.urlresolvers import reverse as urlreverse
from pyquery import PyQuery
@ -8,6 +7,7 @@ from pyquery import PyQuery
from ietf.utils.mail import outbox
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.utils import TestCase
from ietf.doc.models import *
from ietf.name.models import *
@ -23,8 +23,9 @@ from ietf.doc.tests_conflict_review import *
from ietf.doc.tests_status_change import *
class SearchTestCase(django.test.TestCase):
fixtures = ['names']
class SearchTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_search(self):
draft = make_test_data()
@ -125,8 +126,9 @@ class SearchTestCase(django.test.TestCase):
self.assertTrue(draft.title in r.content)
class DocTestCase(django.test.TestCase):
fixtures = ['names']
class DocTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_document_draft(self):
draft = make_test_data()
@ -248,8 +250,9 @@ class DocTestCase(django.test.TestCase):
self.assertEqual(r.status_code, 200)
class AddCommentTestCase(django.test.TestCase):
fixtures = ['names']
class AddCommentTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_add_comment(self):
draft = make_test_data()

View file

@ -3,7 +3,6 @@ import StringIO
import os, shutil
from datetime import date, timedelta, time
import django.test
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
@ -19,9 +18,11 @@ from ietf.iesg.models import TelechatDate
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.utils import TestCase
class EditPositionTestCase(django.test.TestCase):
fixtures = ['names']
class EditPositionTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_edit_position(self):
draft = make_test_data()
@ -169,8 +170,9 @@ class EditPositionTestCase(django.test.TestCase):
self.assertTrue("Test!" in str(m))
class DeferBallotTestCase(django.test.TestCase):
fixtures = ['names']
class DeferBallotTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_defer_ballot(self):
draft = make_test_data()
@ -215,8 +217,9 @@ class DeferBallotTestCase(django.test.TestCase):
draft = Document.objects.get(name=draft.name)
self.assertEquals(draft.get_state_slug("draft-iesg"), "iesg-eva")
class BallotWriteupsTestCase(django.test.TestCase):
fixtures = ['names']
class BallotWriteupsTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_edit_last_call_text(self):
draft = make_test_data()
@ -406,8 +409,9 @@ class BallotWriteupsTestCase(django.test.TestCase):
draft = Document.objects.get(name=draft.name)
self.assertTrue("Subject: Results of IETF-conflict review" in draft.latest_event(WriteupDocEvent, type="changed_ballot_approval_text").text)
class ApproveBallotTestCase(django.test.TestCase):
fixtures = ['names']
class ApproveBallotTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_approve_ballot(self):
draft = make_test_data()
@ -456,8 +460,9 @@ class ApproveBallotTestCase(django.test.TestCase):
self.assertEquals(len(outbox), mailbox_before + 3)
self.assertTrue("NOT be published" in str(outbox[-1]))
class MakeLastCallTestCase(django.test.TestCase):
fixtures = ['names']
class MakeLastCallTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_make_last_call(self):
draft = make_test_data()

View file

@ -6,7 +6,6 @@ from StringIO import StringIO
from textwrap import wrap
import django.test
from django.conf import settings
from django.core.urlresolvers import reverse as urlreverse
@ -15,6 +14,7 @@ from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.doc.utils import create_ballot_if_not_open
from ietf.doc.views_conflict_review import default_approval_text
from ietf.utils import TestCase
from ietf.doc.models import Document,DocEvent,NewRevisionDocEvent,BallotPositionDocEvent,TelechatDocEvent,DocAlias,State
from ietf.name.models import StreamName
@ -22,9 +22,9 @@ from ietf.group.models import Person
from ietf.iesg.models import TelechatDate
class ConflictReviewTestCase(django.test.TestCase):
fixtures = ['names']
class ConflictReviewTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_start_review(self):
@ -254,9 +254,9 @@ class ConflictReviewTestCase(django.test.TestCase):
make_test_data()
class ConflictReviewSubmitTestCase(django.test.TestCase):
fixtures = ['names']
class ConflictReviewSubmitTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names',]
def test_initial_submission(self):
doc = Document.objects.get(name='conflict-review-imaginary-irtf-submission')

View file

@ -3,7 +3,6 @@ import StringIO
import os, shutil
from datetime import date, timedelta, time
import django.test
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
@ -19,10 +18,12 @@ from ietf.iesg.models import TelechatDate
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.utils import TestCase
class ChangeStateTestCase(django.test.TestCase):
fixtures = ['names']
class ChangeStateTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_change_state(self):
draft = make_test_data()
@ -177,8 +178,9 @@ class ChangeStateTestCase(django.test.TestCase):
self.assertTrue("Last call was requested" in draft.latest_event().desc)
class EditInfoTestCase(django.test.TestCase):
fixtures = ['names']
class EditInfoTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_edit_info(self):
draft = make_test_data()
@ -359,8 +361,9 @@ class EditInfoTestCase(django.test.TestCase):
self.assertEqual(draft.latest_event(ConsensusDocEvent, type="changed_consensus").consensus, True)
class ResurrectTestCase(django.test.TestCase):
fixtures = ['names']
class ResurrectTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_request_resurrect(self):
draft = make_test_data()
@ -426,8 +429,9 @@ class ResurrectTestCase(django.test.TestCase):
self.assertEquals(len(outbox), mailbox_before + 1)
class ExpireIDsTestCase(django.test.TestCase):
fixtures = ['names']
class ExpireIDsTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def setUp(self):
self.id_dir = os.path.abspath("tmp-id-dir")
@ -608,8 +612,9 @@ class ExpireIDsTestCase(django.test.TestCase):
self.assertTrue(not os.path.exists(os.path.join(self.id_dir, txt)))
self.assertTrue(os.path.exists(os.path.join(self.archive_dir, "deleted_tombstones", txt)))
class ExpireLastCallTestCase(django.test.TestCase):
fixtures = ['names']
class ExpireLastCallTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_expire_last_call(self):
from ietf.doc.lastcall import get_expired_last_calls, expire_last_call
@ -657,9 +662,9 @@ class ExpireLastCallTestCase(django.test.TestCase):
self.assertEquals(len(outbox), mailbox_before + 1)
self.assertTrue("Last Call Expired" in outbox[-1]["Subject"])
class IndividualInfoFormsTestCase(django.test.TestCase):
fixtures = ['names']
class IndividualInfoFormsTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_doc_change_stream(self):
url = urlreverse('doc_change_stream', kwargs=dict(name=self.docname))
@ -885,8 +890,9 @@ class IndividualInfoFormsTestCase(django.test.TestCase):
self.docname='draft-ietf-mars-test'
self.doc = Document.objects.get(name=self.docname)
class SubmitToIesgTestCase(django.test.TestCase):
fixtures = ['names']
class SubmitToIesgTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def verify_permissions(self):
@ -945,8 +951,9 @@ class SubmitToIesgTestCase(django.test.TestCase):
self.doc = Document.objects.get(name=self.docname)
self.doc.unset_state('draft-iesg')
class RequestPublicationTestCase(django.test.TestCase):
fixtures = ['names']
class RequestPublicationTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_request_publication(self):
draft = make_test_data()

View file

@ -6,7 +6,6 @@ from StringIO import StringIO
from textwrap import wrap
import django.test
from django.conf import settings
from django.core.urlresolvers import reverse as urlreverse
@ -15,6 +14,7 @@ from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.doc.utils import create_ballot_if_not_open
from ietf.doc.views_status_change import default_approval_text
from ietf.utils import TestCase
from ietf.doc.models import Document,DocEvent,NewRevisionDocEvent,BallotPositionDocEvent,TelechatDocEvent,WriteupDocEvent,DocAlias,State
from ietf.name.models import StreamName
@ -22,9 +22,9 @@ from ietf.group.models import Person
from ietf.iesg.models import TelechatDate
class StatusChangeTestCase(django.test.TestCase):
fixtures = ['names']
class StatusChangeTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_start_review(self):
@ -353,9 +353,9 @@ class StatusChangeTestCase(django.test.TestCase):
make_test_data()
class StatusChangeSubmitTestCase(django.test.TestCase):
fixtures = ['names']
class StatusChangeSubmitTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_initial_submission(self):
doc = Document.objects.get(name='status-change-imaginary-mid-review')

23
ietf/group/ajax.py Normal file
View file

@ -0,0 +1,23 @@
from django.utils import simplejson as json
from dajaxice.core import dajaxice_functions
from dajaxice.decorators import dajaxice_register
from ietf.ietfauth.decorators import group_required
from django.shortcuts import get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse, Http404
from ietf.group.models import Group
import datetime
import logging
import sys
from ietf.settings import LOG_DIR
log = logging.getLogger(__name__)
def group_json(request, groupname):
group = get_object_or_404(Group, acronym=groupname)
#print "group request is: %s\n" % (request.build_absolute_uri('/'))
return HttpResponse(json.dumps(group.json_dict(request.build_absolute_uri('/')),
sort_keys=True, indent=2),
mimetype="text/json")

30
ietf/group/colors.py Normal file
View file

@ -0,0 +1,30 @@
#
# colours should be taken from the group as a list of "Areas"
# but for now, just return a dict of areas and colours.
#
fg_group_colors = dict()
fg_group_colors['APP']="#008"
fg_group_colors['GEN']="#080"
fg_group_colors['INT']="#088"
fg_group_colors['OPS']="#800"
fg_group_colors['RAI']="#808"
fg_group_colors['RTG']="#880"
fg_group_colors['SEC']="#488"
fg_group_colors['TSV']="#484"
fg_group_colors['IRTF']="#448"
fg_group_colors['IETF']="blue"
bg_group_colors = dict()
bg_group_colors['APP']="#eef"
bg_group_colors['GEN']="#efe"
bg_group_colors['INT']="#eff"
bg_group_colors['OPS']="#fee"
bg_group_colors['RAI']="#fef"
bg_group_colors['RTG']="#ffe"
bg_group_colors['SEC']="#dff"
bg_group_colors['TSV']="#dfd"
bg_group_colors['IRTF']="#ddf"
bg_group_colors['IETF']="white"

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,963 @@
[
{"pk": 1, "model": "group.rolehistory", "fields": {"person": 17188, "group": 1, "name": "ad", "email": "hardie@qualcomm.com"}},
{"pk": 2, "model": "group.rolehistory", "fields": {"person": 22873, "group": 1, "name": "ad", "email": "sah@428cobrajet.net"}},
{"pk": 3, "model": "group.rolehistory", "fields": {"person": 5778, "group": 2, "name": "ad", "email": "harald@alvestrand.no"}},
{"pk": 4, "model": "group.rolehistory", "fields": {"person": 7262, "group": 3, "name": "ad", "email": "narten@us.ibm.com"}},
{"pk": 5, "model": "group.rolehistory", "fields": {"person": 100887, "group": 3, "name": "ad", "email": "mrw@lilacglade.org"}},
{"pk": 6, "model": "group.rolehistory", "fields": {"person": 6842, "group": 4, "name": "ad", "email": "bertietf@bwijnen.net"}},
{"pk": 7, "model": "group.rolehistory", "fields": {"person": 19587, "group": 4, "name": "ad", "email": "david.kessens@nsn.com"}},
{"pk": 8, "model": "group.rolehistory", "fields": {"person": 13108, "group": 5, "name": "ad", "email": "fenner@fenron.com"}},
{"pk": 9, "model": "group.rolehistory", "fields": {"person": 103264, "group": 5, "name": "ad", "email": "azinin@cisco.com"}},
{"pk": 10, "model": "group.rolehistory", "fields": {"person": 5376, "group": 6, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 11, "model": "group.rolehistory", "fields": {"person": 103048, "group": 6, "name": "ad", "email": "hartmans-ietf@mit.edu"}},
{"pk": 12, "model": "group.rolehistory", "fields": {"person": 2515, "group": 7, "name": "ad", "email": "mankin@psg.com"}},
{"pk": 13, "model": "group.rolehistory", "fields": {"person": 104557, "group": 7, "name": "ad", "email": "jon.peterson@neustar.biz"}},
{"pk": 14, "model": "group.rolehistory", "fields": {"person": 1958, "group": 8, "name": "ad", "email": "brc@zurich.ibm.com"}},
{"pk": 15, "model": "group.rolehistory", "fields": {"person": 22948, "group": 9, "name": "ad", "email": "mark@townsley.net"}},
{"pk": 16, "model": "group.rolehistory", "fields": {"person": 100887, "group": 9, "name": "ad", "email": "mrw@lilacglade.org"}},
{"pk": 17, "model": "group.rolehistory", "fields": {"person": 107420, "group": 10, "name": "ad", "email": "noreply@ietf.org"}},
{"pk": 18, "model": "group.rolehistory", "fields": {"person": 17188, "group": 11, "name": "ad", "email": "hardie@qualcomm.com"}},
{"pk": 19, "model": "group.rolehistory", "fields": {"person": 22971, "group": 11, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 20, "model": "group.rolehistory", "fields": {"person": 21072, "group": 12, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 21, "model": "group.rolehistory", "fields": {"person": 22948, "group": 12, "name": "ad", "email": "mark@townsley.net"}},
{"pk": 22, "model": "group.rolehistory", "fields": {"person": 6699, "group": 13, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 23, "model": "group.rolehistory", "fields": {"person": 19587, "group": 13, "name": "ad", "email": "david.kessens@nsn.com"}},
{"pk": 24, "model": "group.rolehistory", "fields": {"person": 2723, "group": 14, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 25, "model": "group.rolehistory", "fields": {"person": 13108, "group": 14, "name": "ad", "email": "fenner@fenron.com"}},
{"pk": 26, "model": "group.rolehistory", "fields": {"person": 104294, "group": 15, "name": "ad", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 27, "model": "group.rolehistory", "fields": {"person": 112773, "group": 15, "name": "ad", "email": "lars@netapp.com"}},
{"pk": 28, "model": "group.rolehistory", "fields": {"person": 104557, "group": 16, "name": "ad", "email": "jon.peterson@neustar.biz"}},
{"pk": 29, "model": "group.rolehistory", "fields": {"person": 105791, "group": 16, "name": "ad", "email": "fluffy@cisco.com"}},
{"pk": 30, "model": "group.rolehistory", "fields": {"person": 9909, "group": 17, "name": "ad", "email": "chris.newman@oracle.com"}},
{"pk": 31, "model": "group.rolehistory", "fields": {"person": 22971, "group": 17, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 32, "model": "group.rolehistory", "fields": {"person": 5376, "group": 18, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 33, "model": "group.rolehistory", "fields": {"person": 6699, "group": 19, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 34, "model": "group.rolehistory", "fields": {"person": 101568, "group": 19, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 35, "model": "group.rolehistory", "fields": {"person": 2723, "group": 20, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 36, "model": "group.rolehistory", "fields": {"person": 23057, "group": 20, "name": "ad", "email": "dward@juniper.net"}},
{"pk": 37, "model": "group.rolehistory", "fields": {"person": 19790, "group": 21, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 38, "model": "group.rolehistory", "fields": {"person": 103048, "group": 21, "name": "ad", "email": "hartmans-ietf@mit.edu"}},
{"pk": 39, "model": "group.rolehistory", "fields": {"person": 19790, "group": 22, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 40, "model": "group.rolehistory", "fields": {"person": 106164, "group": 22, "name": "ad", "email": "pe@iki.fi"}},
{"pk": 41, "model": "group.rolehistory", "fields": {"person": 22971, "group": 23, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 42, "model": "group.rolehistory", "fields": {"person": 102154, "group": 23, "name": "ad", "email": "alexey.melnikov@isode.com"}},
{"pk": 43, "model": "group.rolehistory", "fields": {"person": 21072, "group": 24, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 44, "model": "group.rolehistory", "fields": {"person": 2348, "group": 24, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 45, "model": "group.rolehistory", "fields": {"person": 105791, "group": 25, "name": "ad", "email": "fluffy@cisco.com"}},
{"pk": 46, "model": "group.rolehistory", "fields": {"person": 103961, "group": 25, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 47, "model": "group.rolehistory", "fields": {"person": 2723, "group": 26, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 48, "model": "group.rolehistory", "fields": {"person": 104198, "group": 26, "name": "ad", "email": "adrian@olddog.co.uk"}},
{"pk": 49, "model": "group.rolehistory", "fields": {"person": 102154, "group": 27, "name": "ad", "email": "alexey.melnikov@isode.com"}},
{"pk": 50, "model": "group.rolehistory", "fields": {"person": 105907, "group": 27, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 51, "model": "group.rolehistory", "fields": {"person": 104198, "group": 28, "name": "ad", "email": "adrian@olddog.co.uk"}},
{"pk": 52, "model": "group.rolehistory", "fields": {"person": 2329, "group": 28, "name": "ad", "email": "stbryant@cisco.com"}},
{"pk": 53, "model": "group.rolehistory", "fields": {"person": 19483, "group": 29, "name": "ad", "email": "turners@ieca.com"}},
{"pk": 54, "model": "group.rolehistory", "fields": {"person": 19790, "group": 29, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 55, "model": "group.rolehistory", "fields": {"person": 112773, "group": 30, "name": "ad", "email": "lars@netapp.com"}},
{"pk": 56, "model": "group.rolehistory", "fields": {"person": 17253, "group": 30, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 57, "model": "group.rolehistory", "fields": {"person": 103961, "group": 31, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 58, "model": "group.rolehistory", "fields": {"person": 103539, "group": 31, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 59, "model": "group.rolehistory", "fields": {"person": 105682, "group": 33, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 60, "model": "group.rolehistory", "fields": {"person": 111529, "group": 33, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 61, "model": "group.rolehistory", "fields": {"person": 105682, "group": 34, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 62, "model": "group.rolehistory", "fields": {"person": 111529, "group": 34, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 63, "model": "group.rolehistory", "fields": {"person": 6766, "group": 34, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 64, "model": "group.rolehistory", "fields": {"person": 106186, "group": 36, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 65, "model": "group.rolehistory", "fields": {"person": 109800, "group": 36, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 66, "model": "group.rolehistory", "fields": {"person": 106186, "group": 40, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 67, "model": "group.rolehistory", "fields": {"person": 106186, "group": 41, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 68, "model": "group.rolehistory", "fields": {"person": 109800, "group": 41, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 69, "model": "group.rolehistory", "fields": {"person": 106186, "group": 42, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 70, "model": "group.rolehistory", "fields": {"person": 109800, "group": 42, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 71, "model": "group.rolehistory", "fields": {"person": 106186, "group": 43, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 72, "model": "group.rolehistory", "fields": {"person": 109800, "group": 43, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 73, "model": "group.rolehistory", "fields": {"person": 106186, "group": 44, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 74, "model": "group.rolehistory", "fields": {"person": 109800, "group": 44, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 75, "model": "group.rolehistory", "fields": {"person": 102154, "group": 45, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 76, "model": "group.rolehistory", "fields": {"person": 21684, "group": 45, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 77, "model": "group.rolehistory", "fields": {"person": 107279, "group": 45, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 78, "model": "group.rolehistory", "fields": {"person": 106872, "group": 46, "name": "chair", "email": "T.Clausen@computer.org"}},
{"pk": 79, "model": "group.rolehistory", "fields": {"person": 105595, "group": 46, "name": "chair", "email": "ryuji.wakikawa@gmail.com"}},
{"pk": 80, "model": "group.rolehistory", "fields": {"person": 7262, "group": 48, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 81, "model": "group.rolehistory", "fields": {"person": 7262, "group": 49, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 82, "model": "group.rolehistory", "fields": {"person": 105786, "group": 49, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 83, "model": "group.rolehistory", "fields": {"person": 16366, "group": 50, "name": "chair", "email": "Ed.Lewis@neustar.biz"}},
{"pk": 84, "model": "group.rolehistory", "fields": {"person": 2890, "group": 50, "name": "chair", "email": "jaap@sidn.nl"}},
{"pk": 85, "model": "group.rolehistory", "fields": {"person": 107256, "group": 51, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 86, "model": "group.rolehistory", "fields": {"person": 11928, "group": 51, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 87, "model": "group.rolehistory", "fields": {"person": 107190, "group": 53, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 88, "model": "group.rolehistory", "fields": {"person": 106438, "group": 54, "name": "chair", "email": "bryan@ethernot.org"}},
{"pk": 89, "model": "group.rolehistory", "fields": {"person": 106987, "group": 54, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 90, "model": "group.rolehistory", "fields": {"person": 105097, "group": 56, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 91, "model": "group.rolehistory", "fields": {"person": 105097, "group": 57, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 92, "model": "group.rolehistory", "fields": {"person": 107684, "group": 57, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 93, "model": "group.rolehistory", "fields": {"person": 22933, "group": 58, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 94, "model": "group.rolehistory", "fields": {"person": 23057, "group": 58, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 95, "model": "group.rolehistory", "fields": {"person": 22933, "group": 59, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 96, "model": "group.rolehistory", "fields": {"person": 2399, "group": 60, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 97, "model": "group.rolehistory", "fields": {"person": 23057, "group": 60, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 98, "model": "group.rolehistory", "fields": {"person": 105046, "group": 60, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 99, "model": "group.rolehistory", "fields": {"person": 2399, "group": 61, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 100, "model": "group.rolehistory", "fields": {"person": 105046, "group": 61, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 101, "model": "group.rolehistory", "fields": {"person": 23057, "group": 62, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 102, "model": "group.rolehistory", "fields": {"person": 103539, "group": 62, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 103, "model": "group.rolehistory", "fields": {"person": 103539, "group": 63, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 104, "model": "group.rolehistory", "fields": {"person": 109558, "group": 64, "name": "delegate", "email": "daniel@olddog.co.uk"}},
{"pk": 105, "model": "group.rolehistory", "fields": {"person": 109703, "group": 64, "name": "delegate", "email": "daniele.ceccarelli@ericsson.com"}},
{"pk": 106, "model": "group.rolehistory", "fields": {"person": 109558, "group": 64, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 107, "model": "group.rolehistory", "fields": {"person": 10064, "group": 64, "name": "chair", "email": "lberger@labn.net"}},
{"pk": 108, "model": "group.rolehistory", "fields": {"person": 106471, "group": 64, "name": "chair", "email": "dbrungard@att.com"}},
{"pk": 109, "model": "group.rolehistory", "fields": {"person": 2324, "group": 65, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 110, "model": "group.rolehistory", "fields": {"person": 107131, "group": 65, "name": "chair", "email": "martin.thomson@andrew.com"}},
{"pk": 111, "model": "group.rolehistory", "fields": {"person": 2324, "group": 66, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 112, "model": "group.rolehistory", "fields": {"person": 102154, "group": 67, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 113, "model": "group.rolehistory", "fields": {"person": 21684, "group": 67, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 114, "model": "group.rolehistory", "fields": {"person": 107279, "group": 67, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 115, "model": "group.rolehistory", "fields": {"person": 106842, "group": 67, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 116, "model": "group.rolehistory", "fields": {"person": 102154, "group": 68, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 117, "model": "group.rolehistory", "fields": {"person": 21684, "group": 68, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 118, "model": "group.rolehistory", "fields": {"person": 107279, "group": 68, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 119, "model": "group.rolehistory", "fields": {"person": 106842, "group": 68, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 120, "model": "group.rolehistory", "fields": {"person": 106842, "group": 68, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 121, "model": "group.rolehistory", "fields": {"person": 102154, "group": 69, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 122, "model": "group.rolehistory", "fields": {"person": 107279, "group": 69, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 123, "model": "group.rolehistory", "fields": {"person": 106842, "group": 69, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 124, "model": "group.rolehistory", "fields": {"person": 106842, "group": 69, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 125, "model": "group.rolehistory", "fields": {"person": 105519, "group": 70, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 126, "model": "group.rolehistory", "fields": {"person": 109919, "group": 70, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 127, "model": "group.rolehistory", "fields": {"person": 105519, "group": 71, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 128, "model": "group.rolehistory", "fields": {"person": 109919, "group": 71, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 129, "model": "group.rolehistory", "fields": {"person": 103392, "group": 71, "name": "chair", "email": "sprevidi@cisco.com"}},
{"pk": 130, "model": "group.rolehistory", "fields": {"person": 18321, "group": 72, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 131, "model": "group.rolehistory", "fields": {"person": 105907, "group": 72, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 132, "model": "group.rolehistory", "fields": {"person": 21684, "group": 72, "name": "pre-ad", "email": "barryleiba@computer.org"}},
{"pk": 133, "model": "group.rolehistory", "fields": {"person": 18321, "group": 73, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 134, "model": "group.rolehistory", "fields": {"person": 105907, "group": 73, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 135, "model": "group.rolehistory", "fields": {"person": 21684, "group": 73, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 136, "model": "group.rolehistory", "fields": {"person": 21072, "group": 74, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 137, "model": "group.rolehistory", "fields": {"person": 2348, "group": 74, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 138, "model": "group.rolehistory", "fields": {"person": 100664, "group": 74, "name": "pre-ad", "email": "brian@innovationslab.net"}},
{"pk": 139, "model": "group.rolehistory", "fields": {"person": 21072, "group": 75, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 140, "model": "group.rolehistory", "fields": {"person": 2348, "group": 75, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 141, "model": "group.rolehistory", "fields": {"person": 100664, "group": 75, "name": "ad", "email": "brian@innovationslab.net"}},
{"pk": 142, "model": "group.rolehistory", "fields": {"person": 101568, "group": 76, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 143, "model": "group.rolehistory", "fields": {"person": 6699, "group": 76, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 144, "model": "group.rolehistory", "fields": {"person": 105682, "group": 76, "name": "pre-ad", "email": "bclaise@cisco.com"}},
{"pk": 145, "model": "group.rolehistory", "fields": {"person": 101568, "group": 77, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 146, "model": "group.rolehistory", "fields": {"person": 6699, "group": 77, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 147, "model": "group.rolehistory", "fields": {"person": 105682, "group": 77, "name": "ad", "email": "bclaise@cisco.com"}},
{"pk": 148, "model": "group.rolehistory", "fields": {"person": 110856, "group": 78, "name": "ad", "email": "wes@mti-systems.com"}},
{"pk": 149, "model": "group.rolehistory", "fields": {"person": 17253, "group": 78, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 150, "model": "group.rolehistory", "fields": {"person": 105519, "group": 78, "name": "pre-ad", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 151, "model": "group.rolehistory", "fields": {"person": 110856, "group": 79, "name": "ad", "email": "wes@mti-systems.com"}},
{"pk": 152, "model": "group.rolehistory", "fields": {"person": 17253, "group": 79, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 153, "model": "group.rolehistory", "fields": {"person": 105519, "group": 79, "name": "ad", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 154, "model": "group.rolehistory", "fields": {"person": 102154, "group": 80, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 155, "model": "group.rolehistory", "fields": {"person": 106842, "group": 80, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 156, "model": "group.rolehistory", "fields": {"person": 106842, "group": 80, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 157, "model": "group.rolehistory", "fields": {"person": 105791, "group": 81, "name": "chair", "email": "fluffy@cisco.com"}},
{"pk": 158, "model": "group.rolehistory", "fields": {"person": 11843, "group": 81, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 159, "model": "group.rolehistory", "fields": {"person": 103881, "group": 82, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 160, "model": "group.rolehistory", "fields": {"person": 109918, "group": 83, "name": "secr", "email": "sm+ietf@elandsys.com"}},
{"pk": 161, "model": "group.rolehistory", "fields": {"person": 107491, "group": 83, "name": "chair", "email": "Salvatore.Loreto@ericsson.com"}},
{"pk": 162, "model": "group.rolehistory", "fields": {"person": 108488, "group": 83, "name": "chair", "email": "Gabriel.Montenegro@microsoft.com"}},
{"pk": 163, "model": "group.rolehistory", "fields": {"person": 21684, "group": 84, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 164, "model": "group.rolehistory", "fields": {"person": 106842, "group": 84, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 165, "model": "group.rolehistory", "fields": {"person": 106296, "group": 85, "name": "chair", "email": "andy@hxr.us"}},
{"pk": 166, "model": "group.rolehistory", "fields": {"person": 110063, "group": 85, "name": "chair", "email": "ah@TR-Sys.de"}},
{"pk": 167, "model": "group.rolehistory", "fields": {"person": 106745, "group": 86, "name": "secr", "email": "ynir@checkpoint.com"}},
{"pk": 168, "model": "group.rolehistory", "fields": {"person": 19483, "group": 86, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 169, "model": "group.rolehistory", "fields": {"person": 106405, "group": 86, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 170, "model": "group.rolehistory", "fields": {"person": 102154, "group": 86, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 171, "model": "group.rolehistory", "fields": {"person": 112547, "group": 87, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 172, "model": "group.rolehistory", "fields": {"person": 106987, "group": 88, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 173, "model": "group.rolehistory", "fields": {"person": 108123, "group": 88, "name": "chair", "email": "Gabor.Bajko@nokia.com"}},
{"pk": 174, "model": "group.rolehistory", "fields": {"person": 108717, "group": 89, "name": "chair", "email": "simon.perreault@viagenie.ca"}},
{"pk": 175, "model": "group.rolehistory", "fields": {"person": 21684, "group": 90, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 176, "model": "group.rolehistory", "fields": {"person": 106842, "group": 90, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 177, "model": "group.rolehistory", "fields": {"person": 105907, "group": 91, "name": "techadv", "email": "stpeter@stpeter.im"}},
{"pk": 178, "model": "group.rolehistory", "fields": {"person": 105857, "group": 91, "name": "chair", "email": "Hannes.Tschofenig@gmx.net"}},
{"pk": 179, "model": "group.rolehistory", "fields": {"person": 21684, "group": 91, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 180, "model": "group.rolehistory", "fields": {"person": 8698, "group": 91, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 181, "model": "group.rolehistory", "fields": {"person": 2793, "group": 92, "name": "chair", "email": "bob.hinden@gmail.com"}},
{"pk": 182, "model": "group.rolehistory", "fields": {"person": 100664, "group": 92, "name": "chair", "email": "brian@innovationslab.net"}},
{"pk": 183, "model": "group.rolehistory", "fields": {"person": 105691, "group": 92, "name": "chair", "email": "otroan@employees.org"}},
{"pk": 184, "model": "group.rolehistory", "fields": {"person": 100664, "group": 93, "name": "chair", "email": "brian@innovationslab.net"}},
{"pk": 185, "model": "group.rolehistory", "fields": {"person": 4857, "group": 93, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 186, "model": "group.rolehistory", "fields": {"person": 109919, "group": 94, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 187, "model": "group.rolehistory", "fields": {"person": 103392, "group": 94, "name": "chair", "email": "sprevidi@cisco.com"}},
{"pk": 188, "model": "group.rolehistory", "fields": {"person": 100038, "group": 95, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 189, "model": "group.rolehistory", "fields": {"person": 15927, "group": 95, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 190, "model": "group.rolehistory", "fields": {"person": 104331, "group": 96, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 191, "model": "group.rolehistory", "fields": {"person": 104267, "group": 96, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 192, "model": "group.rolehistory", "fields": {"person": 105907, "group": 97, "name": "techadv", "email": "stpeter@stpeter.im"}},
{"pk": 193, "model": "group.rolehistory", "fields": {"person": 107435, "group": 97, "name": "chair", "email": "enrico.marocco@telecomitalia.it"}},
{"pk": 194, "model": "group.rolehistory", "fields": {"person": 106812, "group": 97, "name": "chair", "email": "vkg@bell-labs.com"}},
{"pk": 195, "model": "group.rolehistory", "fields": {"person": 2690, "group": 98, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 196, "model": "group.rolehistory", "fields": {"person": 101685, "group": 98, "name": "chair", "email": "flefauch@cisco.com"}},
{"pk": 197, "model": "group.rolehistory", "fields": {"person": 102154, "group": 99, "name": "techadv", "email": "alexey.melnikov@isode.com"}},
{"pk": 198, "model": "group.rolehistory", "fields": {"person": 109430, "group": 99, "name": "chair", "email": "haibin.song@huawei.com"}},
{"pk": 199, "model": "group.rolehistory", "fields": {"person": 2690, "group": 99, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 200, "model": "group.rolehistory", "fields": {"person": 106315, "group": 100, "name": "chair", "email": "gjshep@gmail.com"}},
{"pk": 201, "model": "group.rolehistory", "fields": {"person": 110406, "group": 101, "name": "techadv", "email": "leifj@sunet.se"}},
{"pk": 202, "model": "group.rolehistory", "fields": {"person": 21097, "group": 101, "name": "chair", "email": "spencer.shepler@gmail.com"}},
{"pk": 203, "model": "group.rolehistory", "fields": {"person": 18587, "group": 101, "name": "chair", "email": "beepy@netapp.com"}},
{"pk": 204, "model": "group.rolehistory", "fields": {"person": 2324, "group": 102, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 205, "model": "group.rolehistory", "fields": {"person": 106638, "group": 102, "name": "chair", "email": "slblake@petri-meat.com"}},
{"pk": 206, "model": "group.rolehistory", "fields": {"person": 100609, "group": 103, "name": "chair", "email": "lorenzo@vicisano.net"}},
{"pk": 207, "model": "group.rolehistory", "fields": {"person": 12671, "group": 103, "name": "chair", "email": "adamson@itd.nrl.navy.mil"}},
{"pk": 208, "model": "group.rolehistory", "fields": {"person": 8209, "group": 104, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 209, "model": "group.rolehistory", "fields": {"person": 103156, "group": 104, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 210, "model": "group.rolehistory", "fields": {"person": 100887, "group": 105, "name": "chair", "email": "mrw@lilacglade.org"}},
{"pk": 211, "model": "group.rolehistory", "fields": {"person": 109884, "group": 105, "name": "chair", "email": "denghui02@hotmail.com"}},
{"pk": 212, "model": "group.rolehistory", "fields": {"person": 105328, "group": 106, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 213, "model": "group.rolehistory", "fields": {"person": 15927, "group": 106, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 214, "model": "group.rolehistory", "fields": {"person": 108081, "group": 107, "name": "secr", "email": "junbi@tsinghua.edu.cn"}},
{"pk": 215, "model": "group.rolehistory", "fields": {"person": 107482, "group": 107, "name": "techadv", "email": "jianping@cernet.edu.cn"}},
{"pk": 216, "model": "group.rolehistory", "fields": {"person": 108428, "group": 107, "name": "chair", "email": "jeanmichel.combes@gmail.com"}},
{"pk": 217, "model": "group.rolehistory", "fields": {"person": 108396, "group": 107, "name": "chair", "email": "christian.vogt@ericsson.com"}},
{"pk": 218, "model": "group.rolehistory", "fields": {"person": 2793, "group": 108, "name": "chair", "email": "bob.hinden@gmail.com"}},
{"pk": 219, "model": "group.rolehistory", "fields": {"person": 105691, "group": 108, "name": "chair", "email": "otroan@employees.org"}},
{"pk": 220, "model": "group.rolehistory", "fields": {"person": 106186, "group": 109, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 221, "model": "group.rolehistory", "fields": {"person": 109800, "group": 109, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 222, "model": "group.rolehistory", "fields": {"person": 106199, "group": 110, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 223, "model": "group.rolehistory", "fields": {"person": 108833, "group": 110, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 224, "model": "group.rolehistory", "fields": {"person": 108822, "group": 110, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 225, "model": "group.rolehistory", "fields": {"person": 3862, "group": 110, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 226, "model": "group.rolehistory", "fields": {"person": 112773, "group": 111, "name": "techadv", "email": "lars@netapp.com"}},
{"pk": 227, "model": "group.rolehistory", "fields": {"person": 111293, "group": 111, "name": "chair", "email": "robert.cragie@gridmerge.com"}},
{"pk": 228, "model": "group.rolehistory", "fields": {"person": 110531, "group": 111, "name": "chair", "email": "caozhen@chinamobile.com"}},
{"pk": 229, "model": "group.rolehistory", "fields": {"person": 106173, "group": 112, "name": "chair", "email": "stig@venaas.com"}},
{"pk": 230, "model": "group.rolehistory", "fields": {"person": 105992, "group": 112, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 231, "model": "group.rolehistory", "fields": {"person": 105730, "group": 113, "name": "chair", "email": "henrik@levkowetz.com"}},
{"pk": 232, "model": "group.rolehistory", "fields": {"person": 106010, "group": 113, "name": "chair", "email": "mccap@petoni.org"}},
{"pk": 233, "model": "group.rolehistory", "fields": {"person": 101214, "group": 114, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 234, "model": "group.rolehistory", "fields": {"person": 103283, "group": 114, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 235, "model": "group.rolehistory", "fields": {"person": 4857, "group": 115, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 236, "model": "group.rolehistory", "fields": {"person": 8249, "group": 116, "name": "techadv", "email": "carlsonj@workingcode.com"}},
{"pk": 237, "model": "group.rolehistory", "fields": {"person": 102391, "group": 116, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 238, "model": "group.rolehistory", "fields": {"person": 106414, "group": 117, "name": "chair", "email": "yaakov_s@rad.com"}},
{"pk": 239, "model": "group.rolehistory", "fields": {"person": 4857, "group": 117, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 240, "model": "group.rolehistory", "fields": {"person": 2324, "group": 118, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 241, "model": "group.rolehistory", "fields": {"person": 104807, "group": 118, "name": "chair", "email": "ietf@cdl.asgaard.org"}},
{"pk": 242, "model": "group.rolehistory", "fields": {"person": 101104, "group": 118, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 243, "model": "group.rolehistory", "fields": {"person": 106462, "group": 119, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 244, "model": "group.rolehistory", "fields": {"person": 107067, "group": 119, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 245, "model": "group.rolehistory", "fields": {"person": 105024, "group": 119, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 246, "model": "group.rolehistory", "fields": {"person": 107258, "group": 119, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 247, "model": "group.rolehistory", "fields": {"person": 106345, "group": 119, "name": "chair", "email": "Menachem.Dodge@ecitele.com"}},
{"pk": 248, "model": "group.rolehistory", "fields": {"person": 109800, "group": 120, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 249, "model": "group.rolehistory", "fields": {"person": 107737, "group": 120, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 250, "model": "group.rolehistory", "fields": {"person": 111529, "group": 121, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 251, "model": "group.rolehistory", "fields": {"person": 6766, "group": 121, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 252, "model": "group.rolehistory", "fields": {"person": 19790, "group": 122, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 253, "model": "group.rolehistory", "fields": {"person": 6842, "group": 122, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 254, "model": "group.rolehistory", "fields": {"person": 105537, "group": 122, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 255, "model": "group.rolehistory", "fields": {"person": 21106, "group": 123, "name": "chair", "email": "j.schoenwaelder@jacobs-university.de"}},
{"pk": 256, "model": "group.rolehistory", "fields": {"person": 19587, "group": 123, "name": "chair", "email": "david.kessens@nsn.com"}},
{"pk": 257, "model": "group.rolehistory", "fields": {"person": 6766, "group": 124, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 258, "model": "group.rolehistory", "fields": {"person": 103651, "group": 124, "name": "chair", "email": "quittek@neclab.eu"}},
{"pk": 259, "model": "group.rolehistory", "fields": {"person": 17681, "group": 125, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 260, "model": "group.rolehistory", "fields": {"person": 109800, "group": 125, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 261, "model": "group.rolehistory", "fields": {"person": 111434, "group": 125, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 262, "model": "group.rolehistory", "fields": {"person": 109558, "group": 126, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 263, "model": "group.rolehistory", "fields": {"person": 110259, "group": 126, "name": "techadv", "email": "rstruik.ext@gmail.com"}},
{"pk": 264, "model": "group.rolehistory", "fields": {"person": 106269, "group": 126, "name": "chair", "email": "jpv@cisco.com"}},
{"pk": 265, "model": "group.rolehistory", "fields": {"person": 108796, "group": 126, "name": "chair", "email": "culler@cs.berkeley.edu"}},
{"pk": 266, "model": "group.rolehistory", "fields": {"person": 109558, "group": 127, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 267, "model": "group.rolehistory", "fields": {"person": 110259, "group": 127, "name": "techadv", "email": "rstruik.ext@gmail.com"}},
{"pk": 268, "model": "group.rolehistory", "fields": {"person": 102254, "group": 127, "name": "chair", "email": "mcr+ietf@sandelman.ca"}},
{"pk": 269, "model": "group.rolehistory", "fields": {"person": 106269, "group": 127, "name": "chair", "email": "jpv@cisco.com"}},
{"pk": 270, "model": "group.rolehistory", "fields": {"person": 108796, "group": 127, "name": "chair", "email": "culler@cs.berkeley.edu"}},
{"pk": 271, "model": "group.rolehistory", "fields": {"person": 105097, "group": 128, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 272, "model": "group.rolehistory", "fields": {"person": 107684, "group": 128, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 273, "model": "group.rolehistory", "fields": {"person": 105097, "group": 129, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 274, "model": "group.rolehistory", "fields": {"person": 110842, "group": 129, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 275, "model": "group.rolehistory", "fields": {"person": 107684, "group": 129, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 276, "model": "group.rolehistory", "fields": {"person": 112547, "group": 130, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 277, "model": "group.rolehistory", "fields": {"person": 7262, "group": 131, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 278, "model": "group.rolehistory", "fields": {"person": 105786, "group": 131, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 279, "model": "group.rolehistory", "fields": {"person": 112438, "group": 131, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 280, "model": "group.rolehistory", "fields": {"person": 7262, "group": 132, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 281, "model": "group.rolehistory", "fields": {"person": 105786, "group": 132, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 282, "model": "group.rolehistory", "fields": {"person": 112438, "group": 132, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 283, "model": "group.rolehistory", "fields": {"person": 6771, "group": 133, "name": "chair", "email": "tony@att.com"}},
{"pk": 284, "model": "group.rolehistory", "fields": {"person": 109498, "group": 133, "name": "chair", "email": "anthonybryan@gmail.com"}},
{"pk": 285, "model": "group.rolehistory", "fields": {"person": 109558, "group": 134, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 286, "model": "group.rolehistory", "fields": {"person": 19987, "group": 134, "name": "chair", "email": "danny@tcb.net"}},
{"pk": 287, "model": "group.rolehistory", "fields": {"person": 107256, "group": 134, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 288, "model": "group.rolehistory", "fields": {"person": 108185, "group": 134, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 289, "model": "group.rolehistory", "fields": {"person": 109558, "group": 135, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 290, "model": "group.rolehistory", "fields": {"person": 19987, "group": 135, "name": "chair", "email": "danny@tcb.net"}},
{"pk": 291, "model": "group.rolehistory", "fields": {"person": 107256, "group": 135, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 292, "model": "group.rolehistory", "fields": {"person": 2329, "group": 135, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 293, "model": "group.rolehistory", "fields": {"person": 108185, "group": 135, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 294, "model": "group.rolehistory", "fields": {"person": 109558, "group": 136, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 295, "model": "group.rolehistory", "fields": {"person": 107256, "group": 136, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 296, "model": "group.rolehistory", "fields": {"person": 2329, "group": 136, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 297, "model": "group.rolehistory", "fields": {"person": 108185, "group": 136, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 298, "model": "group.rolehistory", "fields": {"person": 109558, "group": 137, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 299, "model": "group.rolehistory", "fields": {"person": 2329, "group": 137, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 300, "model": "group.rolehistory", "fields": {"person": 108185, "group": 137, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 301, "model": "group.rolehistory", "fields": {"person": 104557, "group": 140, "name": "techadv", "email": "jon.peterson@neustar.biz"}},
{"pk": 302, "model": "group.rolehistory", "fields": {"person": 105426, "group": 140, "name": "chair", "email": "hisham.khartabil@gmail.com"}},
{"pk": 303, "model": "group.rolehistory", "fields": {"person": 104140, "group": 140, "name": "chair", "email": "ben@nostrum.com"}},
{"pk": 304, "model": "group.rolehistory", "fields": {"person": 110049, "group": 141, "name": "chair", "email": "jhildebr@cisco.com"}},
{"pk": 305, "model": "group.rolehistory", "fields": {"person": 104140, "group": 141, "name": "chair", "email": "ben@nostrum.com"}},
{"pk": 306, "model": "group.rolehistory", "fields": {"person": 102391, "group": 142, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 307, "model": "group.rolehistory", "fields": {"person": 8243, "group": 142, "name": "chair", "email": "nordmark@acm.org"}},
{"pk": 308, "model": "group.rolehistory", "fields": {"person": 109558, "group": 143, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 309, "model": "group.rolehistory", "fields": {"person": 2329, "group": 143, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 310, "model": "group.rolehistory", "fields": {"person": 109558, "group": 144, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 311, "model": "group.rolehistory", "fields": {"person": 2329, "group": 144, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 312, "model": "group.rolehistory", "fields": {"person": 106860, "group": 144, "name": "chair", "email": "thomas.morin@orange.com"}},
{"pk": 313, "model": "group.rolehistory", "fields": {"person": 107084, "group": 145, "name": "secr", "email": "rmarshall@telecomsys.com"}},
{"pk": 314, "model": "group.rolehistory", "fields": {"person": 106012, "group": 145, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 315, "model": "group.rolehistory", "fields": {"person": 108049, "group": 145, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 316, "model": "group.rolehistory", "fields": {"person": 107084, "group": 146, "name": "secr", "email": "rmarshall@telecomsys.com"}},
{"pk": 317, "model": "group.rolehistory", "fields": {"person": 106012, "group": 146, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 318, "model": "group.rolehistory", "fields": {"person": 108049, "group": 146, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 319, "model": "group.rolehistory", "fields": {"person": 107084, "group": 146, "name": "chair", "email": "rmarshall@telecomsys.com"}},
{"pk": 320, "model": "group.rolehistory", "fields": {"person": 5797, "group": 147, "name": "techadv", "email": "smb@cs.columbia.edu"}},
{"pk": 321, "model": "group.rolehistory", "fields": {"person": 13219, "group": 147, "name": "chair", "email": "Sandra.Murphy@sparta.com"}},
{"pk": 322, "model": "group.rolehistory", "fields": {"person": 111246, "group": 147, "name": "chair", "email": "morrowc@ops-netman.net"}},
{"pk": 323, "model": "group.rolehistory", "fields": {"person": 109178, "group": 148, "name": "chair", "email": "ajs@anvilwalrusden.com"}},
{"pk": 324, "model": "group.rolehistory", "fields": {"person": 106842, "group": 148, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 325, "model": "group.rolehistory", "fields": {"person": 102174, "group": 150, "name": "chair", "email": "dirk.kutscher@neclab.eu"}},
{"pk": 326, "model": "group.rolehistory", "fields": {"person": 18250, "group": 151, "name": "chair", "email": "Borje.Ohlman@ericsson.com"}},
{"pk": 327, "model": "group.rolehistory", "fields": {"person": 102174, "group": 151, "name": "chair", "email": "dirk.kutscher@neclab.eu"}},
{"pk": 328, "model": "group.rolehistory", "fields": {"person": 109814, "group": 157, "name": "chair", "email": "lachlan.andrew@gmail.com"}},
{"pk": 329, "model": "group.rolehistory", "fields": {"person": 19826, "group": 159, "name": "chair", "email": "canetti@watson.ibm.com"}},
{"pk": 330, "model": "group.rolehistory", "fields": {"person": 103303, "group": 159, "name": "chair", "email": "mcgrew@cisco.com"}},
{"pk": 331, "model": "group.rolehistory", "fields": {"person": 109225, "group": 159, "name": "chair", "email": "kmigoe@nsa.gov"}},
{"pk": 332, "model": "group.rolehistory", "fields": {"person": 21226, "group": 160, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 333, "model": "group.rolehistory", "fields": {"person": 11928, "group": 160, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 334, "model": "group.rolehistory", "fields": {"person": 102154, "group": 161, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 335, "model": "group.rolehistory", "fields": {"person": 106842, "group": 161, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 336, "model": "group.rolehistory", "fields": {"person": 106842, "group": 161, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 337, "model": "group.rolehistory", "fields": {"person": 109558, "group": 162, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 338, "model": "group.rolehistory", "fields": {"person": 108279, "group": 162, "name": "chair", "email": "martin.vigoureux@alcatel-lucent.com"}},
{"pk": 339, "model": "group.rolehistory", "fields": {"person": 2329, "group": 162, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 340, "model": "group.rolehistory", "fields": {"person": 106860, "group": 162, "name": "chair", "email": "thomas.morin@orange.com"}},
{"pk": 341, "model": "group.rolehistory", "fields": {"person": 7262, "group": 164, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 342, "model": "group.rolehistory", "fields": {"person": 105786, "group": 164, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 343, "model": "group.rolehistory", "fields": {"person": 112438, "group": 164, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 344, "model": "group.rolehistory", "fields": {"person": 105786, "group": 165, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 345, "model": "group.rolehistory", "fields": {"person": 112438, "group": 165, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 346, "model": "group.rolehistory", "fields": {"person": 112160, "group": 167, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 347, "model": "group.rolehistory", "fields": {"person": 19869, "group": 168, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 348, "model": "group.rolehistory", "fields": {"person": 112160, "group": 168, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 349, "model": "group.rolehistory", "fields": {"person": 19869, "group": 169, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 350, "model": "group.rolehistory", "fields": {"person": 2853, "group": 169, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 351, "model": "group.rolehistory", "fields": {"person": 112160, "group": 169, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 352, "model": "group.rolehistory", "fields": {"person": 105519, "group": 170, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 353, "model": "group.rolehistory", "fields": {"person": 19869, "group": 170, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 354, "model": "group.rolehistory", "fields": {"person": 2853, "group": 170, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 355, "model": "group.rolehistory", "fields": {"person": 112160, "group": 170, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 356, "model": "group.rolehistory", "fields": {"person": 101568, "group": 171, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 357, "model": "group.rolehistory", "fields": {"person": 105786, "group": 171, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 358, "model": "group.rolehistory", "fields": {"person": 112438, "group": 171, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 359, "model": "group.rolehistory", "fields": {"person": 105519, "group": 172, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 360, "model": "group.rolehistory", "fields": {"person": 19869, "group": 172, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 361, "model": "group.rolehistory", "fields": {"person": 2329, "group": 172, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 362, "model": "group.rolehistory", "fields": {"person": 2853, "group": 172, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 363, "model": "group.rolehistory", "fields": {"person": 112160, "group": 172, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 364, "model": "group.rolehistory", "fields": {"person": 108054, "group": 173, "name": "secr", "email": "jiangsheng@huawei.com"}},
{"pk": 365, "model": "group.rolehistory", "fields": {"person": 106461, "group": 173, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 366, "model": "group.rolehistory", "fields": {"person": 112160, "group": 173, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 367, "model": "group.rolehistory", "fields": {"person": 108054, "group": 174, "name": "secr", "email": "jiangsheng@huawei.com"}},
{"pk": 368, "model": "group.rolehistory", "fields": {"person": 106461, "group": 174, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 369, "model": "group.rolehistory", "fields": {"person": 111656, "group": 175, "name": "chair", "email": "warren@kumari.net"}},
{"pk": 370, "model": "group.rolehistory", "fields": {"person": 108304, "group": 175, "name": "chair", "email": "gvandeve@cisco.com"}},
{"pk": 371, "model": "group.rolehistory", "fields": {"person": 12620, "group": 176, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 372, "model": "group.rolehistory", "fields": {"person": 105113, "group": 176, "name": "execdir", "email": "jabley@hopcount.ca"}},
{"pk": 373, "model": "group.rolehistory", "fields": {"person": 109259, "group": 176, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 374, "model": "group.rolehistory", "fields": {"person": 12620, "group": 176, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 375, "model": "group.rolehistory", "fields": {"person": 102830, "group": 176, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 376, "model": "group.rolehistory", "fields": {"person": 12620, "group": 177, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 377, "model": "group.rolehistory", "fields": {"person": 109259, "group": 177, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 378, "model": "group.rolehistory", "fields": {"person": 12620, "group": 177, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 379, "model": "group.rolehistory", "fields": {"person": 102830, "group": 177, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 380, "model": "group.rolehistory", "fields": {"person": 12620, "group": 178, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 381, "model": "group.rolehistory", "fields": {"person": 102830, "group": 178, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 382, "model": "group.rolehistory", "fields": {"person": 109259, "group": 178, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 383, "model": "group.rolehistory", "fields": {"person": 12620, "group": 178, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 384, "model": "group.rolehistory", "fields": {"person": 102830, "group": 178, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 385, "model": "group.rolehistory", "fields": {"person": 12620, "group": 179, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 386, "model": "group.rolehistory", "fields": {"person": 102830, "group": 179, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 387, "model": "group.rolehistory", "fields": {"person": 109259, "group": 179, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 388, "model": "group.rolehistory", "fields": {"person": 12620, "group": 179, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 389, "model": "group.rolehistory", "fields": {"person": 12620, "group": 181, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 390, "model": "group.rolehistory", "fields": {"person": 102830, "group": 181, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 391, "model": "group.rolehistory", "fields": {"person": 12620, "group": 181, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 392, "model": "group.rolehistory", "fields": {"person": 12620, "group": 182, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 393, "model": "group.rolehistory", "fields": {"person": 102830, "group": 182, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 394, "model": "group.rolehistory", "fields": {"person": 108756, "group": 182, "name": "secr", "email": "cmorgan@amsl.com"}},
{"pk": 395, "model": "group.rolehistory", "fields": {"person": 12620, "group": 182, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 396, "model": "group.rolehistory", "fields": {"person": 2097, "group": 183, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 397, "model": "group.rolehistory", "fields": {"person": 5797, "group": 183, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 398, "model": "group.rolehistory", "fields": {"person": 12620, "group": 184, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 399, "model": "group.rolehistory", "fields": {"person": 102830, "group": 184, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 400, "model": "group.rolehistory", "fields": {"person": 12620, "group": 184, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 401, "model": "group.rolehistory", "fields": {"person": 2399, "group": 185, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 402, "model": "group.rolehistory", "fields": {"person": 23057, "group": 185, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 403, "model": "group.rolehistory", "fields": {"person": 105046, "group": 185, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 404, "model": "group.rolehistory", "fields": {"person": 21106, "group": 186, "name": "chair", "email": "j.schoenwaelder@jacobs-university.de"}},
{"pk": 405, "model": "group.rolehistory", "fields": {"person": 19587, "group": 186, "name": "chair", "email": "david.kessens@nsn.com"}},
{"pk": 406, "model": "group.rolehistory", "fields": {"person": 19790, "group": 187, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 407, "model": "group.rolehistory", "fields": {"person": 6842, "group": 187, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 408, "model": "group.rolehistory", "fields": {"person": 105537, "group": 187, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 409, "model": "group.rolehistory", "fields": {"person": 109178, "group": 188, "name": "chair", "email": "ajs@anvilwalrusden.com"}},
{"pk": 410, "model": "group.rolehistory", "fields": {"person": 106842, "group": 188, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 411, "model": "group.rolehistory", "fields": {"person": 106842, "group": 189, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 412, "model": "group.rolehistory", "fields": {"person": 100454, "group": 190, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 413, "model": "group.rolehistory", "fields": {"person": 106842, "group": 190, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 414, "model": "group.rolehistory", "fields": {"person": 100454, "group": 191, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 415, "model": "group.rolehistory", "fields": {"person": 106842, "group": 191, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 416, "model": "group.rolehistory", "fields": {"person": 106012, "group": 192, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 417, "model": "group.rolehistory", "fields": {"person": 108049, "group": 192, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 418, "model": "group.rolehistory", "fields": {"person": 107084, "group": 192, "name": "chair", "email": "rmarshall@telecomsys.com"}},
{"pk": 419, "model": "group.rolehistory", "fields": {"person": 19483, "group": 193, "name": "chair", "email": "turners@ieca.com"}},
{"pk": 420, "model": "group.rolehistory", "fields": {"person": 19177, "group": 193, "name": "chair", "email": "stephen.farrell@cs.tcd.ie"}},
{"pk": 421, "model": "group.rolehistory", "fields": {"person": 19647, "group": 194, "name": "chair", "email": "dharkins@lounge.org"}},
{"pk": 422, "model": "group.rolehistory", "fields": {"person": 110934, "group": 194, "name": "chair", "email": "lnovikov@mitre.org"}},
{"pk": 423, "model": "group.rolehistory", "fields": {"person": 106186, "group": 195, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 424, "model": "group.rolehistory", "fields": {"person": 109800, "group": 195, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 425, "model": "group.rolehistory", "fields": {"person": 2097, "group": 196, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 426, "model": "group.rolehistory", "fields": {"person": 5797, "group": 196, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 427, "model": "group.rolehistory", "fields": {"person": 107292, "group": 197, "name": "liaiman", "email": "tsbsg2@itu.int"}},
{"pk": 428, "model": "group.rolehistory", "fields": {"person": 106224, "group": 197, "name": "liaiman", "email": "mmorrow@cisco.com"}},
{"pk": 429, "model": "group.rolehistory", "fields": {"person": 106842, "group": 198, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 430, "model": "group.rolehistory", "fields": {"person": 100454, "group": 200, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 431, "model": "group.rolehistory", "fields": {"person": 106842, "group": 200, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 432, "model": "group.rolehistory", "fields": {"person": 100454, "group": 201, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 433, "model": "group.rolehistory", "fields": {"person": 102154, "group": 202, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 434, "model": "group.rolehistory", "fields": {"person": 106842, "group": 202, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 435, "model": "group.rolehistory", "fields": {"person": 102154, "group": 203, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 436, "model": "group.rolehistory", "fields": {"person": 112772, "group": 204, "name": "auth", "email": "zhiyuan.hu@alcatel-sbell.com.cn"}},
{"pk": 437, "model": "group.rolehistory", "fields": {"person": 112613, "group": 204, "name": "auth", "email": "jerry.shih@att.com"}},
{"pk": 438, "model": "group.rolehistory", "fields": {"person": 113064, "group": 204, "name": "auth", "email": "thierry.berisot@telekom.de"}},
{"pk": 439, "model": "group.rolehistory", "fields": {"person": 113067, "group": 204, "name": "auth", "email": "laurentwalter.goix@telecomitalia.it"}},
{"pk": 440, "model": "group.rolehistory", "fields": {"person": 106842, "group": 204, "name": "liaiman", "email": "msk@cloudmark.com"}},
{"pk": 441, "model": "group.rolehistory", "fields": {"person": 112772, "group": 205, "name": "auth", "email": "zhiyuan.hu@alcatel-sbell.com.cn"}},
{"pk": 442, "model": "group.rolehistory", "fields": {"person": 112613, "group": 205, "name": "auth", "email": "jerry.shih@att.com"}},
{"pk": 443, "model": "group.rolehistory", "fields": {"person": 113064, "group": 205, "name": "auth", "email": "thierry.berisot@telekom.de"}},
{"pk": 444, "model": "group.rolehistory", "fields": {"person": 113067, "group": 205, "name": "auth", "email": "laurentwalter.goix@telecomitalia.it"}},
{"pk": 445, "model": "group.rolehistory", "fields": {"person": 106987, "group": 206, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 446, "model": "group.rolehistory", "fields": {"person": 18321, "group": 207, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 447, "model": "group.rolehistory", "fields": {"person": 105907, "group": 207, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 448, "model": "group.rolehistory", "fields": {"person": 18321, "group": 208, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 449, "model": "group.rolehistory", "fields": {"person": 105907, "group": 208, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 450, "model": "group.rolehistory", "fields": {"person": 21684, "group": 208, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 451, "model": "group.rolehistory", "fields": {"person": 110856, "group": 209, "name": "chair", "email": "wes@mti-systems.com"}},
{"pk": 452, "model": "group.rolehistory", "fields": {"person": 17253, "group": 209, "name": "chair", "email": "ietfdbh@comcast.net"}},
{"pk": 453, "model": "group.rolehistory", "fields": {"person": 110856, "group": 210, "name": "chair", "email": "wes@mti-systems.com"}},
{"pk": 454, "model": "group.rolehistory", "fields": {"person": 17253, "group": 210, "name": "chair", "email": "ietfdbh@comcast.net"}},
{"pk": 455, "model": "group.rolehistory", "fields": {"person": 105519, "group": 210, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 456, "model": "group.rolehistory", "fields": {"person": 6699, "group": 211, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 457, "model": "group.rolehistory", "fields": {"person": 101568, "group": 211, "name": "chair", "email": "rbonica@juniper.net"}},
{"pk": 458, "model": "group.rolehistory", "fields": {"person": 6699, "group": 212, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 459, "model": "group.rolehistory", "fields": {"person": 101568, "group": 212, "name": "chair", "email": "rbonica@juniper.net"}},
{"pk": 460, "model": "group.rolehistory", "fields": {"person": 105682, "group": 212, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 461, "model": "group.rolehistory", "fields": {"person": 112611, "group": 213, "name": "chair", "email": "eckelcu@cisco.com"}},
{"pk": 462, "model": "group.rolehistory", "fields": {"person": 107520, "group": 213, "name": "chair", "email": "shida@ntt-at.com"}},
{"pk": 463, "model": "group.rolehistory", "fields": {"person": 6699, "group": 214, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 464, "model": "group.rolehistory", "fields": {"person": 112611, "group": 214, "name": "chair", "email": "eckelcu@cisco.com"}},
{"pk": 465, "model": "group.rolehistory", "fields": {"person": 107520, "group": 214, "name": "chair", "email": "shida@ntt-at.com"}},
{"pk": 466, "model": "group.rolehistory", "fields": {"person": 2097, "group": 216, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 467, "model": "group.rolehistory", "fields": {"person": 5797, "group": 216, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 468, "model": "group.rolehistory", "fields": {"person": 5797, "group": 217, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 469, "model": "group.rolehistory", "fields": {"person": 110406, "group": 219, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 470, "model": "group.rolehistory", "fields": {"person": 113270, "group": 220, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 471, "model": "group.rolehistory", "fields": {"person": 110406, "group": 220, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 472, "model": "group.rolehistory", "fields": {"person": 101214, "group": 221, "name": "chair", "email": "Rajeev.Koodli@gmail.com"}},
{"pk": 473, "model": "group.rolehistory", "fields": {"person": 106412, "group": 221, "name": "chair", "email": "suresh.krishnan@ericsson.com"}},
{"pk": 474, "model": "group.rolehistory", "fields": {"person": 113270, "group": 222, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 475, "model": "group.rolehistory", "fields": {"person": 110406, "group": 222, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 476, "model": "group.rolehistory", "fields": {"person": 110636, "group": 223, "name": "chair", "email": "michael.scharf@alcatel-lucent.com"}},
{"pk": 477, "model": "group.rolehistory", "fields": {"person": 15951, "group": 223, "name": "chair", "email": "nishida@sfc.wide.ad.jp"}},
{"pk": 478, "model": "group.rolehistory", "fields": {"person": 109321, "group": 223, "name": "chair", "email": "pasi.sarolahti@iki.fi"}},
{"pk": 479, "model": "group.rolehistory", "fields": {"person": 107415, "group": 224, "name": "techadv", "email": "xing@cernet.edu.cn"}},
{"pk": 480, "model": "group.rolehistory", "fields": {"person": 105328, "group": 224, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 481, "model": "group.rolehistory", "fields": {"person": 108848, "group": 224, "name": "chair", "email": "cuiyong@tsinghua.edu.cn"}},
{"pk": 482, "model": "group.rolehistory", "fields": {"person": 100038, "group": 225, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 483, "model": "group.rolehistory", "fields": {"person": 15927, "group": 225, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 484, "model": "group.rolehistory", "fields": {"person": 22933, "group": 226, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 485, "model": "group.rolehistory", "fields": {"person": 23057, "group": 226, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 486, "model": "group.rolehistory", "fields": {"person": 100038, "group": 232, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 487, "model": "group.rolehistory", "fields": {"person": 15927, "group": 232, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 488, "model": "group.rolehistory", "fields": {"person": 110406, "group": 233, "name": "techadv", "email": "leifj@sunet.se"}},
{"pk": 489, "model": "group.rolehistory", "fields": {"person": 21097, "group": 233, "name": "chair", "email": "spencer.shepler@gmail.com"}},
{"pk": 490, "model": "group.rolehistory", "fields": {"person": 18587, "group": 233, "name": "chair", "email": "beepy@netapp.com"}},
{"pk": 491, "model": "group.rolehistory", "fields": {"person": 107998, "group": 234, "name": "chair", "email": "philip.eardley@bt.com"}},
{"pk": 492, "model": "group.rolehistory", "fields": {"person": 15951, "group": 234, "name": "chair", "email": "nishida@sfc.wide.ad.jp"}},
{"pk": 493, "model": "group.rolehistory", "fields": {"person": 113270, "group": 235, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 494, "model": "group.rolehistory", "fields": {"person": 110406, "group": 235, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 495, "model": "group.rolehistory", "fields": {"person": 107415, "group": 238, "name": "techadv", "email": "xing@cernet.edu.cn"}},
{"pk": 496, "model": "group.rolehistory", "fields": {"person": 108848, "group": 238, "name": "chair", "email": "cuiyong@tsinghua.edu.cn"}},
{"pk": 497, "model": "group.rolehistory", "fields": {"person": 102154, "group": 243, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 498, "model": "group.rolehistory", "fields": {"person": 106842, "group": 243, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 499, "model": "group.rolehistory", "fields": {"person": 102154, "group": 245, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 500, "model": "group.rolehistory", "fields": {"person": 4397, "group": 245, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 501, "model": "group.rolehistory", "fields": {"person": 111086, "group": 246, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 502, "model": "group.rolehistory", "fields": {"person": 112438, "group": 246, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 503, "model": "group.rolehistory", "fields": {"person": 111086, "group": 247, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 504, "model": "group.rolehistory", "fields": {"person": 101568, "group": 248, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 505, "model": "group.rolehistory", "fields": {"person": 105786, "group": 248, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 506, "model": "group.rolehistory", "fields": {"person": 112438, "group": 248, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 507, "model": "group.rolehistory", "fields": {"person": 101568, "group": 249, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 508, "model": "group.rolehistory", "fields": {"person": 105786, "group": 249, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 509, "model": "group.rolehistory", "fields": {"person": 112438, "group": 249, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 510, "model": "group.rolehistory", "fields": {"person": 112438, "group": 249, "name": "chair", "email": "bensons@queuefull.net"}},
{"pk": 511, "model": "group.rolehistory", "fields": {"person": 102154, "group": 250, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 512, "model": "group.rolehistory", "fields": {"person": 4397, "group": 250, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 513, "model": "group.rolehistory", "fields": {"person": 104331, "group": 251, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 514, "model": "group.rolehistory", "fields": {"person": 104267, "group": 251, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 515, "model": "group.rolehistory", "fields": {"person": 106842, "group": 252, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 516, "model": "group.rolehistory", "fields": {"person": 107491, "group": 254, "name": "chair", "email": "Salvatore.Loreto@ericsson.com"}},
{"pk": 517, "model": "group.rolehistory", "fields": {"person": 102154, "group": 254, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 518, "model": "group.rolehistory", "fields": {"person": 106842, "group": 254, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 519, "model": "group.rolehistory", "fields": {"person": 20209, "group": 256, "name": "chair", "email": "csp@csperkins.org"}},
{"pk": 520, "model": "group.rolehistory", "fields": {"person": 113031, "group": 257, "name": "auth", "email": "gunilla.berndtsson@ericsson.com"}},
{"pk": 521, "model": "group.rolehistory", "fields": {"person": 113032, "group": 257, "name": "auth", "email": "catherine.quinquis@orange.com"}},
{"pk": 522, "model": "group.rolehistory", "fields": {"person": 2324, "group": 260, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 523, "model": "group.rolehistory", "fields": {"person": 104807, "group": 260, "name": "chair", "email": "ietf@cdl.asgaard.org"}},
{"pk": 524, "model": "group.rolehistory", "fields": {"person": 101104, "group": 260, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 525, "model": "group.rolehistory", "fields": {"person": 2324, "group": 261, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 526, "model": "group.rolehistory", "fields": {"person": 101104, "group": 261, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 527, "model": "group.rolehistory", "fields": {"person": 108295, "group": 263, "name": "chair", "email": "mlepinski@gmail.com"}},
{"pk": 528, "model": "group.rolehistory", "fields": {"person": 105097, "group": 265, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 529, "model": "group.rolehistory", "fields": {"person": 110842, "group": 265, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 530, "model": "group.rolehistory", "fields": {"person": 110842, "group": 266, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 531, "model": "group.rolehistory", "fields": {"person": 110721, "group": 268, "name": "chair", "email": "ted.ietf@gmail.com"}},
{"pk": 532, "model": "group.rolehistory", "fields": {"person": 106412, "group": 269, "name": "chair", "email": "nomcom-chair@ietf.org"}},
{"pk": 533, "model": "group.rolehistory", "fields": {"person": 104331, "group": 270, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 534, "model": "group.rolehistory", "fields": {"person": 104267, "group": 270, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 535, "model": "group.rolehistory", "fields": {"person": 110070, "group": 270, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 536, "model": "group.rolehistory", "fields": {"person": 106186, "group": 271, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 537, "model": "group.rolehistory", "fields": {"person": 106412, "group": 271, "name": "chair", "email": "suresh.krishnan@ericsson.com"}},
{"pk": 538, "model": "group.rolehistory", "fields": {"person": 105519, "group": 272, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 539, "model": "group.rolehistory", "fields": {"person": 19869, "group": 272, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 540, "model": "group.rolehistory", "fields": {"person": 2329, "group": 272, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 541, "model": "group.rolehistory", "fields": {"person": 2853, "group": 272, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 542, "model": "group.rolehistory", "fields": {"person": 112160, "group": 272, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 543, "model": "group.rolehistory", "fields": {"person": 107923, "group": 273, "name": "chair", "email": "christer.holmberg@ericsson.com"}},
{"pk": 544, "model": "group.rolehistory", "fields": {"person": 108963, "group": 273, "name": "chair", "email": "vpascual@acmepacket.com"}},
{"pk": 545, "model": "group.rolehistory", "fields": {"person": 2324, "group": 275, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 546, "model": "group.rolehistory", "fields": {"person": 106638, "group": 275, "name": "chair", "email": "slblake@petri-meat.com"}},
{"pk": 547, "model": "group.rolehistory", "fields": {"person": 105728, "group": 276, "name": "chair", "email": "gurtov@cs.helsinki.fi"}},
{"pk": 548, "model": "group.rolehistory", "fields": {"person": 107003, "group": 276, "name": "chair", "email": "thomas.r.henderson@boeing.com"}},
{"pk": 549, "model": "group.rolehistory", "fields": {"person": 106745, "group": 277, "name": "secr", "email": "ynir@checkpoint.com"}},
{"pk": 550, "model": "group.rolehistory", "fields": {"person": 19483, "group": 277, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 551, "model": "group.rolehistory", "fields": {"person": 106405, "group": 277, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 552, "model": "group.rolehistory", "fields": {"person": 102154, "group": 277, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 553, "model": "group.rolehistory", "fields": {"person": 110910, "group": 279, "name": "chair", "email": "ietf@augustcellars.com"}},
{"pk": 554, "model": "group.rolehistory", "fields": {"person": 6771, "group": 279, "name": "chair", "email": "tony@att.com"}},
{"pk": 555, "model": "group.rolehistory", "fields": {"person": 110910, "group": 280, "name": "chair", "email": "ietf@augustcellars.com"}},
{"pk": 556, "model": "group.rolehistory", "fields": {"person": 4857, "group": 280, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 557, "model": "group.rolehistory", "fields": {"person": 6771, "group": 280, "name": "chair", "email": "tony@att.com"}},
{"pk": 558, "model": "group.rolehistory", "fields": {"person": 106988, "group": 281, "name": "chair", "email": "glenzorn@gmail.com"}},
{"pk": 559, "model": "group.rolehistory", "fields": {"person": 107598, "group": 281, "name": "chair", "email": "tena@huawei.com"}},
{"pk": 560, "model": "group.rolehistory", "fields": {"person": 112773, "group": 283, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 561, "model": "group.rolehistory", "fields": {"person": 112773, "group": 284, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 562, "model": "group.rolehistory", "fields": {"person": 21072, "group": 284, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 563, "model": "group.rolehistory", "fields": {"person": 112773, "group": 285, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 564, "model": "group.rolehistory", "fields": {"person": 21072, "group": 285, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 565, "model": "group.rolehistory", "fields": {"person": 20580, "group": 285, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 566, "model": "group.rolehistory", "fields": {"person": 112773, "group": 286, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 567, "model": "group.rolehistory", "fields": {"person": 21072, "group": 286, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 568, "model": "group.rolehistory", "fields": {"person": 20580, "group": 286, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 569, "model": "group.rolehistory", "fields": {"person": 107190, "group": 286, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 570, "model": "group.rolehistory", "fields": {"person": 112773, "group": 287, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 571, "model": "group.rolehistory", "fields": {"person": 21072, "group": 287, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 572, "model": "group.rolehistory", "fields": {"person": 20580, "group": 287, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 573, "model": "group.rolehistory", "fields": {"person": 107190, "group": 287, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 574, "model": "group.rolehistory", "fields": {"person": 21226, "group": 287, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 575, "model": "group.rolehistory", "fields": {"person": 112773, "group": 288, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 576, "model": "group.rolehistory", "fields": {"person": 21072, "group": 288, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 577, "model": "group.rolehistory", "fields": {"person": 20580, "group": 288, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 578, "model": "group.rolehistory", "fields": {"person": 21226, "group": 288, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 579, "model": "group.rolehistory", "fields": {"person": 112773, "group": 289, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 580, "model": "group.rolehistory", "fields": {"person": 21072, "group": 289, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 581, "model": "group.rolehistory", "fields": {"person": 20580, "group": 289, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 582, "model": "group.rolehistory", "fields": {"person": 112773, "group": 290, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 583, "model": "group.rolehistory", "fields": {"person": 21072, "group": 290, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 584, "model": "group.rolehistory", "fields": {"person": 20580, "group": 290, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 585, "model": "group.rolehistory", "fields": {"person": 107190, "group": 290, "name": "atlarge", "email": "spencer@wonderhamster.org"}},
{"pk": 586, "model": "group.rolehistory", "fields": {"person": 10083, "group": 291, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 587, "model": "group.rolehistory", "fields": {"person": 104278, "group": 291, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 588, "model": "group.rolehistory", "fields": {"person": 20209, "group": 292, "name": "chair", "email": "csp@csperkins.org"}},
{"pk": 589, "model": "group.rolehistory", "fields": {"person": 103877, "group": 292, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 590, "model": "group.rolehistory", "fields": {"person": 109800, "group": 295, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 591, "model": "group.rolehistory", "fields": {"person": 107737, "group": 295, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 592, "model": "group.rolehistory", "fields": {"person": 100754, "group": 296, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 593, "model": "group.rolehistory", "fields": {"person": 105873, "group": 296, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 594, "model": "group.rolehistory", "fields": {"person": 104294, "group": 296, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 595, "model": "group.rolehistory", "fields": {"person": 100754, "group": 297, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 596, "model": "group.rolehistory", "fields": {"person": 104294, "group": 297, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 597, "model": "group.rolehistory", "fields": {"person": 108368, "group": 298, "name": "chair", "email": "abegen@cisco.com"}},
{"pk": 598, "model": "group.rolehistory", "fields": {"person": 105873, "group": 298, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 599, "model": "group.rolehistory", "fields": {"person": 108368, "group": 299, "name": "chair", "email": "abegen@cisco.com"}},
{"pk": 600, "model": "group.rolehistory", "fields": {"person": 109800, "group": 300, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 601, "model": "group.rolehistory", "fields": {"person": 107737, "group": 300, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 602, "model": "group.rolehistory", "fields": {"person": 109800, "group": 301, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 603, "model": "group.rolehistory", "fields": {"person": 107737, "group": 301, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 604, "model": "group.rolehistory", "fields": {"person": 109800, "group": 302, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 605, "model": "group.rolehistory", "fields": {"person": 107737, "group": 302, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 606, "model": "group.rolehistory", "fields": {"person": 109802, "group": 308, "name": "chair", "email": "alvaro.retana@hp.com"}},
{"pk": 607, "model": "group.rolehistory", "fields": {"person": 106742, "group": 308, "name": "chair", "email": "akatlas@gmail.com"}},
{"pk": 608, "model": "group.rolehistory", "fields": {"person": 106742, "group": 309, "name": "chair", "email": "akatlas@gmail.com"}},
{"pk": 609, "model": "group.rolehistory", "fields": {"person": 108081, "group": 311, "name": "secr", "email": "junbi@tsinghua.edu.cn"}},
{"pk": 610, "model": "group.rolehistory", "fields": {"person": 107482, "group": 311, "name": "techadv", "email": "jianping@cernet.edu.cn"}},
{"pk": 611, "model": "group.rolehistory", "fields": {"person": 108428, "group": 311, "name": "chair", "email": "jeanmichel.combes@gmail.com"}},
{"pk": 612, "model": "group.rolehistory", "fields": {"person": 108396, "group": 311, "name": "chair", "email": "christian.vogt@ericsson.com"}},
{"pk": 613, "model": "group.rolehistory", "fields": {"person": 103881, "group": 315, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 614, "model": "group.rolehistory", "fields": {"person": 19790, "group": 316, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 615, "model": "group.rolehistory", "fields": {"person": 6842, "group": 316, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 616, "model": "group.rolehistory", "fields": {"person": 105537, "group": 316, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 617, "model": "group.rolehistory", "fields": {"person": 105791, "group": 317, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 618, "model": "group.rolehistory", "fields": {"person": 11843, "group": 317, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 619, "model": "group.rolehistory", "fields": {"person": 100754, "group": 318, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 620, "model": "group.rolehistory", "fields": {"person": 105097, "group": 318, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 621, "model": "group.rolehistory", "fields": {"person": 105873, "group": 318, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 622, "model": "group.rolehistory", "fields": {"person": 100754, "group": 319, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 623, "model": "group.rolehistory", "fields": {"person": 105097, "group": 319, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 624, "model": "group.rolehistory", "fields": {"person": 19790, "group": 322, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 625, "model": "group.rolehistory", "fields": {"person": 6842, "group": 322, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 626, "model": "group.rolehistory", "fields": {"person": 105537, "group": 322, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 627, "model": "group.rolehistory", "fields": {"person": 19790, "group": 326, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 628, "model": "group.rolehistory", "fields": {"person": 6842, "group": 326, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 629, "model": "group.rolehistory", "fields": {"person": 105537, "group": 326, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 630, "model": "group.rolehistory", "fields": {"person": 19790, "group": 327, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 631, "model": "group.rolehistory", "fields": {"person": 6842, "group": 327, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 632, "model": "group.rolehistory", "fields": {"person": 105537, "group": 327, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 633, "model": "group.rolehistory", "fields": {"person": 103881, "group": 328, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 634, "model": "group.rolehistory", "fields": {"person": 103881, "group": 329, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 635, "model": "group.rolehistory", "fields": {"person": 107729, "group": 330, "name": "liaiman", "email": "Eric.Gray@Ericsson.com"}},
{"pk": 636, "model": "group.rolehistory", "fields": {"person": 107599, "group": 330, "name": "auth", "email": "tony@jeffree.co.uk"}},
{"pk": 637, "model": "group.rolehistory", "fields": {"person": 106897, "group": 331, "name": "techadv", "email": "stewe@stewe.org"}},
{"pk": 638, "model": "group.rolehistory", "fields": {"person": 105791, "group": 331, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 639, "model": "group.rolehistory", "fields": {"person": 2250, "group": 331, "name": "chair", "email": "jdrosen@jdrosen.net"}},
{"pk": 640, "model": "group.rolehistory", "fields": {"person": 102154, "group": 332, "name": "techadv", "email": "alexey.melnikov@isode.com"}},
{"pk": 641, "model": "group.rolehistory", "fields": {"person": 109430, "group": 332, "name": "chair", "email": "haibin.song@huawei.com"}},
{"pk": 642, "model": "group.rolehistory", "fields": {"person": 2690, "group": 332, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 643, "model": "group.rolehistory", "fields": {"person": 2324, "group": 333, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 644, "model": "group.rolehistory", "fields": {"person": 104807, "group": 333, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 645, "model": "group.rolehistory", "fields": {"person": 101104, "group": 333, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 646, "model": "group.rolehistory", "fields": {"person": 19790, "group": 334, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 647, "model": "group.rolehistory", "fields": {"person": 6842, "group": 334, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 648, "model": "group.rolehistory", "fields": {"person": 105537, "group": 334, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 649, "model": "group.rolehistory", "fields": {"person": 19790, "group": 336, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 650, "model": "group.rolehistory", "fields": {"person": 6842, "group": 336, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 651, "model": "group.rolehistory", "fields": {"person": 105537, "group": 336, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 652, "model": "group.rolehistory", "fields": {"person": 112773, "group": 338, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 653, "model": "group.rolehistory", "fields": {"person": 112330, "group": 338, "name": "chair", "email": "mirja.kuehlewind@ikr.uni-stuttgart.de"}},
{"pk": 654, "model": "group.rolehistory", "fields": {"person": 112773, "group": 339, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 655, "model": "group.rolehistory", "fields": {"person": 112330, "group": 339, "name": "chair", "email": "mirja.kuehlewind@ikr.uni-stuttgart.de"}},
{"pk": 656, "model": "group.rolehistory", "fields": {"person": 18321, "group": 340, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 657, "model": "group.rolehistory", "fields": {"person": 21684, "group": 340, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 658, "model": "group.rolehistory", "fields": {"person": 18321, "group": 341, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 659, "model": "group.rolehistory", "fields": {"person": 21684, "group": 341, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 660, "model": "group.rolehistory", "fields": {"person": 18321, "group": 341, "name": "chair", "email": "presnick@qti.qualcomm.com"}},
{"pk": 661, "model": "group.rolehistory", "fields": {"person": 18321, "group": 342, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 662, "model": "group.rolehistory", "fields": {"person": 21684, "group": 342, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 663, "model": "group.rolehistory", "fields": {"person": 18321, "group": 343, "name": "pre-ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 664, "model": "group.rolehistory", "fields": {"person": 18321, "group": 343, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 665, "model": "group.rolehistory", "fields": {"person": 21684, "group": 343, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 666, "model": "group.rolehistory", "fields": {"person": 18321, "group": 344, "name": "pre-ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 667, "model": "group.rolehistory", "fields": {"person": 18321, "group": 344, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 668, "model": "group.rolehistory", "fields": {"person": 21684, "group": 344, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 669, "model": "group.rolehistory", "fields": {"person": 18321, "group": 345, "name": "ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 670, "model": "group.rolehistory", "fields": {"person": 18321, "group": 345, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 671, "model": "group.rolehistory", "fields": {"person": 21684, "group": 345, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 672, "model": "group.rolehistory", "fields": {"person": 2324, "group": 346, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 673, "model": "group.rolehistory", "fields": {"person": 104807, "group": 346, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 674, "model": "group.rolehistory", "fields": {"person": 101104, "group": 346, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 675, "model": "group.rolehistory", "fields": {"person": 103881, "group": 347, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 676, "model": "group.rolehistory", "fields": {"person": 23057, "group": 349, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 677, "model": "group.rolehistory", "fields": {"person": 111584, "group": 354, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 678, "model": "group.rolehistory", "fields": {"person": 105992, "group": 356, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 679, "model": "group.rolehistory", "fields": {"person": 102154, "group": 358, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 680, "model": "group.rolehistory", "fields": {"person": 103881, "group": 358, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 681, "model": "group.rolehistory", "fields": {"person": 102154, "group": 359, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 682, "model": "group.rolehistory", "fields": {"person": 103881, "group": 359, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 683, "model": "group.rolehistory", "fields": {"person": 103881, "group": 360, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 684, "model": "group.rolehistory", "fields": {"person": 8698, "group": 362, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 685, "model": "group.rolehistory", "fields": {"person": 15448, "group": 365, "name": "chair", "email": "shanna@juniper.net"}},
{"pk": 686, "model": "group.rolehistory", "fields": {"person": 2399, "group": 366, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 687, "model": "group.rolehistory", "fields": {"person": 23057, "group": 366, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 688, "model": "group.rolehistory", "fields": {"person": 105046, "group": 366, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 689, "model": "group.rolehistory", "fields": {"person": 103881, "group": 367, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 690, "model": "group.rolehistory", "fields": {"person": 101214, "group": 368, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 691, "model": "group.rolehistory", "fields": {"person": 103283, "group": 368, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 692, "model": "group.rolehistory", "fields": {"person": 101214, "group": 369, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 693, "model": "group.rolehistory", "fields": {"person": 103283, "group": 369, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 694, "model": "group.rolehistory", "fields": {"person": 103283, "group": 369, "name": "chair", "email": "bpatil1+ietf@gmail.com"}},
{"pk": 695, "model": "group.rolehistory", "fields": {"person": 103881, "group": 370, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 696, "model": "group.rolehistory", "fields": {"person": 102191, "group": 371, "name": "chair", "email": "tlyu@mit.edu"}},
{"pk": 697, "model": "group.rolehistory", "fields": {"person": 107956, "group": 371, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 698, "model": "group.rolehistory", "fields": {"person": 102154, "group": 371, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 699, "model": "group.rolehistory", "fields": {"person": 104978, "group": 372, "name": "chair", "email": "jhutz@cmu.edu"}},
{"pk": 700, "model": "group.rolehistory", "fields": {"person": 106376, "group": 372, "name": "chair", "email": "larry.zhu@microsoft.com"}},
{"pk": 701, "model": "group.rolehistory", "fields": {"person": 103048, "group": 372, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 702, "model": "group.rolehistory", "fields": {"person": 103881, "group": 373, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 703, "model": "group.rolehistory", "fields": {"person": 107729, "group": 374, "name": "liaiman", "email": "Eric.Gray@Ericsson.com"}},
{"pk": 704, "model": "group.rolehistory", "fields": {"person": 107599, "group": 374, "name": "auth", "email": "tony@jeffree.co.uk"}},
{"pk": 705, "model": "group.rolehistory", "fields": {"person": 114106, "group": 374, "name": "auth", "email": "r.b.marks@ieee.org"}},
{"pk": 706, "model": "group.rolehistory", "fields": {"person": 104851, "group": 375, "name": "chair", "email": "Kathleen.Moriarty@emc.com"}},
{"pk": 707, "model": "group.rolehistory", "fields": {"person": 113031, "group": 376, "name": "auth", "email": "gunilla.berndtsson@ericsson.com"}},
{"pk": 708, "model": "group.rolehistory", "fields": {"person": 113032, "group": 376, "name": "auth", "email": "catherine.quinquis@orange.com"}},
{"pk": 709, "model": "group.rolehistory", "fields": {"person": 113672, "group": 376, "name": "auth", "email": "sarah.scott@itu.int"}},
{"pk": 710, "model": "group.rolehistory", "fields": {"person": 111584, "group": 377, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 711, "model": "group.rolehistory", "fields": {"person": 106462, "group": 378, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 712, "model": "group.rolehistory", "fields": {"person": 107067, "group": 378, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 713, "model": "group.rolehistory", "fields": {"person": 105024, "group": 378, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 714, "model": "group.rolehistory", "fields": {"person": 107258, "group": 378, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 715, "model": "group.rolehistory", "fields": {"person": 106345, "group": 378, "name": "chair", "email": "Menachem.Dodge@ecitele.com"}},
{"pk": 716, "model": "group.rolehistory", "fields": {"person": 106462, "group": 379, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 717, "model": "group.rolehistory", "fields": {"person": 107067, "group": 379, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 718, "model": "group.rolehistory", "fields": {"person": 105024, "group": 379, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 719, "model": "group.rolehistory", "fields": {"person": 107258, "group": 379, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 720, "model": "group.rolehistory", "fields": {"person": 106199, "group": 380, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 721, "model": "group.rolehistory", "fields": {"person": 108833, "group": 380, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 722, "model": "group.rolehistory", "fields": {"person": 108822, "group": 380, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 723, "model": "group.rolehistory", "fields": {"person": 3862, "group": 380, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 724, "model": "group.rolehistory", "fields": {"person": 106199, "group": 381, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 725, "model": "group.rolehistory", "fields": {"person": 108833, "group": 381, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 726, "model": "group.rolehistory", "fields": {"person": 108822, "group": 381, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 727, "model": "group.rolehistory", "fields": {"person": 3862, "group": 381, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 728, "model": "group.rolehistory", "fields": {"person": 108833, "group": 381, "name": "secr", "email": "ggx@gigix.net"}},
{"pk": 729, "model": "group.rolehistory", "fields": {"person": 2324, "group": 382, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 730, "model": "group.rolehistory", "fields": {"person": 104807, "group": 382, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 731, "model": "group.rolehistory", "fields": {"person": 101104, "group": 382, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 732, "model": "group.rolehistory", "fields": {"person": 107956, "group": 384, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 733, "model": "group.rolehistory", "fields": {"person": 111163, "group": 384, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 734, "model": "group.rolehistory", "fields": {"person": 103048, "group": 384, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 735, "model": "group.rolehistory", "fields": {"person": 107956, "group": 385, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 736, "model": "group.rolehistory", "fields": {"person": 111163, "group": 385, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 737, "model": "group.rolehistory", "fields": {"person": 103048, "group": 385, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 738, "model": "group.rolehistory", "fields": {"person": 111086, "group": 386, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 739, "model": "group.rolehistory", "fields": {"person": 112438, "group": 386, "name": "chair", "email": "bensons@queuefull.net"}},
{"pk": 740, "model": "group.rolehistory", "fields": {"person": 105328, "group": 388, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 741, "model": "group.rolehistory", "fields": {"person": 15927, "group": 388, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 742, "model": "group.rolehistory", "fields": {"person": 105328, "group": 389, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 743, "model": "group.rolehistory", "fields": {"person": 15927, "group": 389, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 744, "model": "group.rolehistory", "fields": {"person": 104985, "group": 389, "name": "chair", "email": "repenno@cisco.com"}},
{"pk": 745, "model": "group.rolehistory", "fields": {"person": 106897, "group": 390, "name": "liaiman", "email": "stewe@stewe.org"}},
{"pk": 746, "model": "group.rolehistory", "fields": {"person": 112510, "group": 391, "name": "liaiman", "email": "nan@metroethernetforum.org"}},
{"pk": 747, "model": "group.rolehistory", "fields": {"person": 112511, "group": 391, "name": "liaiman", "email": "bill@metroethernetforum.net"}},
{"pk": 748, "model": "group.rolehistory", "fields": {"person": 112512, "group": 391, "name": "liaiman", "email": "rraghu@ciena.com"}},
{"pk": 749, "model": "group.rolehistory", "fields": {"person": 105907, "group": 392, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 750, "model": "group.rolehistory", "fields": {"person": 17681, "group": 394, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 751, "model": "group.rolehistory", "fields": {"person": 109800, "group": 394, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 752, "model": "group.rolehistory", "fields": {"person": 111434, "group": 394, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 753, "model": "group.rolehistory", "fields": {"person": 17681, "group": 395, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 754, "model": "group.rolehistory", "fields": {"person": 109800, "group": 395, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 755, "model": "group.rolehistory", "fields": {"person": 111434, "group": 395, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 756, "model": "group.rolehistory", "fields": {"person": 17681, "group": 396, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 757, "model": "group.rolehistory", "fields": {"person": 109800, "group": 396, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 758, "model": "group.rolehistory", "fields": {"person": 111434, "group": 396, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 759, "model": "group.rolehistory", "fields": {"person": 17681, "group": 397, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 760, "model": "group.rolehistory", "fields": {"person": 109800, "group": 397, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 761, "model": "group.rolehistory", "fields": {"person": 111434, "group": 397, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 762, "model": "group.rolehistory", "fields": {"person": 17681, "group": 398, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 763, "model": "group.rolehistory", "fields": {"person": 109800, "group": 398, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 764, "model": "group.rolehistory", "fields": {"person": 111434, "group": 398, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 765, "model": "group.rolehistory", "fields": {"person": 104196, "group": 399, "name": "chair", "email": "eburger@standardstrack.com"}},
{"pk": 766, "model": "group.rolehistory", "fields": {"person": 773, "group": 399, "name": "chair", "email": "oran@cisco.com"}},
{"pk": 767, "model": "group.rolehistory", "fields": {"person": 2324, "group": 400, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 768, "model": "group.rolehistory", "fields": {"person": 107131, "group": 400, "name": "chair", "email": "martin.thomson@gmail.com"}},
{"pk": 769, "model": "group.rolehistory", "fields": {"person": 108717, "group": 401, "name": "chair", "email": "simon.perreault@viagenie.ca"}},
{"pk": 770, "model": "group.rolehistory", "fields": {"person": 21684, "group": 402, "name": "secr", "email": "barryleiba@computer.org"}},
{"pk": 771, "model": "group.rolehistory", "fields": {"person": 101054, "group": 402, "name": "chair", "email": "cyrus@daboo.name"}},
{"pk": 772, "model": "group.rolehistory", "fields": {"person": 110093, "group": 402, "name": "chair", "email": "aaron@serendipity.cx"}},
{"pk": 773, "model": "group.rolehistory", "fields": {"person": 104331, "group": 403, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 774, "model": "group.rolehistory", "fields": {"person": 104267, "group": 403, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 775, "model": "group.rolehistory", "fields": {"person": 110070, "group": 403, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 776, "model": "group.rolehistory", "fields": {"person": 104331, "group": 404, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 777, "model": "group.rolehistory", "fields": {"person": 104267, "group": 404, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 778, "model": "group.rolehistory", "fields": {"person": 19483, "group": 405, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 779, "model": "group.rolehistory", "fields": {"person": 106405, "group": 405, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 780, "model": "group.rolehistory", "fields": {"person": 102154, "group": 405, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 781, "model": "group.rolehistory", "fields": {"person": 106745, "group": 405, "name": "chair", "email": "ynir@checkpoint.com"}},
{"pk": 782, "model": "group.rolehistory", "fields": {"person": 23057, "group": 406, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 783, "model": "group.rolehistory", "fields": {"person": 103539, "group": 406, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 784, "model": "group.rolehistory", "fields": {"person": 109727, "group": 407, "name": "chair", "email": "muraris@microsoft.com"}},
{"pk": 785, "model": "group.rolehistory", "fields": {"person": 103877, "group": 407, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 786, "model": "group.rolehistory", "fields": {"person": 103877, "group": 408, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 787, "model": "group.rolehistory", "fields": {"person": 12620, "group": 411, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 788, "model": "group.rolehistory", "fields": {"person": 102830, "group": 411, "name": "execdir", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 789, "model": "group.rolehistory", "fields": {"person": 102830, "group": 411, "name": "delegate", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 790, "model": "group.rolehistory", "fields": {"person": 101818, "group": 412, "name": "chair", "email": "matt@internet2.edu"}},
{"pk": 791, "model": "group.rolehistory", "fields": {"person": 100603, "group": 412, "name": "chair", "email": "henk@uijterwaal.nl"}},
{"pk": 792, "model": "group.rolehistory", "fields": {"person": 100603, "group": 413, "name": "chair", "email": "henk@uijterwaal.nl"}},
{"pk": 793, "model": "group.rolehistory", "fields": {"person": 113573, "group": 413, "name": "chair", "email": "bill@wjcerveny.com"}},
{"pk": 794, "model": "group.rolehistory", "fields": {"person": 101818, "group": 413, "name": "chair", "email": "matt@internet2.edu"}},
{"pk": 795, "model": "group.rolehistory", "fields": {"person": 109354, "group": 413, "name": "chair", "email": "trammell@tik.ee.ethz.ch"}},
{"pk": 796, "model": "group.rolehistory", "fields": {"person": 101742, "group": 414, "name": "chair", "email": "tphelan@sonusnet.com"}},
{"pk": 797, "model": "group.rolehistory", "fields": {"person": 109321, "group": 414, "name": "chair", "email": "pasi.sarolahti@iki.fi"}},
{"pk": 798, "model": "group.rolehistory", "fields": {"person": 8209, "group": 415, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 799, "model": "group.rolehistory", "fields": {"person": 103156, "group": 415, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 800, "model": "group.rolehistory", "fields": {"person": 103156, "group": 416, "name": "chair", "email": "david.black@emc.com"}},
{"pk": 801, "model": "group.rolehistory", "fields": {"person": 8209, "group": 416, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 802, "model": "group.rolehistory", "fields": {"person": 103156, "group": 416, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 803, "model": "group.rolehistory", "fields": {"person": 104331, "group": 417, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 804, "model": "group.rolehistory", "fields": {"person": 104267, "group": 417, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 805, "model": "group.rolehistory", "fields": {"person": 103156, "group": 417, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 806, "model": "group.rolehistory", "fields": {"person": 104331, "group": 418, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 807, "model": "group.rolehistory", "fields": {"person": 103156, "group": 418, "name": "chair", "email": "david.black@emc.com"}},
{"pk": 808, "model": "group.rolehistory", "fields": {"person": 104267, "group": 418, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 809, "model": "group.rolehistory", "fields": {"person": 103156, "group": 418, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 810, "model": "group.rolehistory", "fields": {"person": 10083, "group": 419, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 811, "model": "group.rolehistory", "fields": {"person": 104278, "group": 419, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 812, "model": "group.rolehistory", "fields": {"person": 17681, "group": 420, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 813, "model": "group.rolehistory", "fields": {"person": 109800, "group": 420, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 814, "model": "group.rolehistory", "fields": {"person": 111434, "group": 420, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 815, "model": "group.rolehistory", "fields": {"person": 102391, "group": 421, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 816, "model": "group.rolehistory", "fields": {"person": 8243, "group": 421, "name": "chair", "email": "nordmark@acm.org"}},
{"pk": 817, "model": "group.rolehistory", "fields": {"person": 10083, "group": 422, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 818, "model": "group.rolehistory", "fields": {"person": 104278, "group": 422, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 819, "model": "group.rolehistory", "fields": {"person": 10083, "group": 423, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 820, "model": "group.rolehistory", "fields": {"person": 104278, "group": 423, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 821, "model": "group.rolehistory", "fields": {"person": 105519, "group": 424, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 822, "model": "group.rolehistory", "fields": {"person": 19869, "group": 424, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 823, "model": "group.rolehistory", "fields": {"person": 2329, "group": 424, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 824, "model": "group.rolehistory", "fields": {"person": 2853, "group": 424, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 825, "model": "group.rolehistory", "fields": {"person": 112160, "group": 424, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 826, "model": "group.rolehistory", "fields": {"person": 112837, "group": 425, "name": "auth", "email": "christophe.alter@orange-ftgroup.com"}},
{"pk": 827, "model": "group.rolehistory", "fields": {"person": 109476, "group": 425, "name": "liaiman", "email": "david.sinicrope@ericsson.com"}},
{"pk": 828, "model": "group.rolehistory", "fields": {"person": 10083, "group": 426, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 829, "model": "group.rolehistory", "fields": {"person": 104278, "group": 426, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 830, "model": "group.rolehistory", "fields": {"person": 106284, "group": 427, "name": "auth", "email": "dstanley@arubanetworks.com"}},
{"pk": 831, "model": "group.rolehistory", "fields": {"person": 110070, "group": 428, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 832, "model": "group.rolehistory", "fields": {"person": 109727, "group": 428, "name": "chair", "email": "muraris@microsoft.com"}},
{"pk": 833, "model": "group.rolehistory", "fields": {"person": 106224, "group": 429, "name": "auth", "email": "mmorrow@cisco.com"}},
{"pk": 834, "model": "group.rolehistory", "fields": {"person": 10083, "group": 434, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 835, "model": "group.rolehistory", "fields": {"person": 104278, "group": 434, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 836, "model": "group.rolehistory", "fields": {"person": 10083, "group": 435, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 837, "model": "group.rolehistory", "fields": {"person": 104278, "group": 435, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 838, "model": "group.rolehistory", "fields": {"person": 105519, "group": 436, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 839, "model": "group.rolehistory", "fields": {"person": 19869, "group": 436, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 840, "model": "group.rolehistory", "fields": {"person": 2329, "group": 436, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 841, "model": "group.rolehistory", "fields": {"person": 2853, "group": 436, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 842, "model": "group.rolehistory", "fields": {"person": 112160, "group": 436, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 843, "model": "group.rolehistory", "fields": {"person": 105519, "group": 437, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 844, "model": "group.rolehistory", "fields": {"person": 19869, "group": 437, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 845, "model": "group.rolehistory", "fields": {"person": 2329, "group": 437, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 846, "model": "group.rolehistory", "fields": {"person": 2853, "group": 437, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 847, "model": "group.rolehistory", "fields": {"person": 112160, "group": 437, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 848, "model": "group.rolehistory", "fields": {"person": 105519, "group": 438, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 849, "model": "group.rolehistory", "fields": {"person": 19869, "group": 438, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 850, "model": "group.rolehistory", "fields": {"person": 2329, "group": 438, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 851, "model": "group.rolehistory", "fields": {"person": 2853, "group": 438, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 852, "model": "group.rolehistory", "fields": {"person": 112160, "group": 438, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 853, "model": "group.rolehistory", "fields": {"person": 15448, "group": 439, "name": "chair", "email": "shanna@juniper.net"}},
{"pk": 854, "model": "group.rolehistory", "fields": {"person": 110367, "group": 439, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 855, "model": "group.rolehistory", "fields": {"person": 110367, "group": 440, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 856, "model": "group.rolehistory", "fields": {"person": 112837, "group": 441, "name": "auth", "email": "christophe.alter@orange-ftgroup.com"}},
{"pk": 857, "model": "group.rolehistory", "fields": {"person": 109476, "group": 441, "name": "liaiman", "email": "david.sinicrope@ericsson.com"}},
{"pk": 858, "model": "group.rolehistory", "fields": {"person": 114696, "group": 441, "name": "auth", "email": "KEN.KO@adtran.com"}},
{"pk": 859, "model": "group.rolehistory", "fields": {"person": 114099, "group": 442, "name": "chair", "email": "andrewmcgr@gmail.com"}},
{"pk": 860, "model": "group.rolehistory", "fields": {"person": 11843, "group": 442, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 861, "model": "group.rolehistory", "fields": {"person": 114099, "group": 443, "name": "chair", "email": "andrewmcgr@gmail.com"}},
{"pk": 862, "model": "group.rolehistory", "fields": {"person": 11843, "group": 443, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 863, "model": "group.rolehistory", "fields": {"person": 114099, "group": 443, "name": "chair", "email": "andrewmcgr@google.com"}},
{"pk": 864, "model": "group.rolehistory", "fields": {"person": 10083, "group": 447, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 865, "model": "group.rolehistory", "fields": {"person": 104278, "group": 447, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 866, "model": "group.rolehistory", "fields": {"person": 105097, "group": 448, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 867, "model": "group.rolehistory", "fields": {"person": 104294, "group": 448, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 868, "model": "group.rolehistory", "fields": {"person": 107031, "group": 449, "name": "chair", "email": "fandreas@cisco.com"}},
{"pk": 869, "model": "group.rolehistory", "fields": {"person": 102848, "group": 449, "name": "chair", "email": "miguel.a.garcia@ericsson.com"}},
{"pk": 870, "model": "group.rolehistory", "fields": {"person": 106897, "group": 450, "name": "techadv", "email": "stewe@stewe.org"}},
{"pk": 871, "model": "group.rolehistory", "fields": {"person": 2250, "group": 450, "name": "chair", "email": "jdrosen@jdrosen.net"}},
{"pk": 872, "model": "group.rolehistory", "fields": {"person": 105791, "group": 450, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 873, "model": "group.rolehistory", "fields": {"person": 112724, "group": 450, "name": "chair", "email": "tterriberry@mozilla.com"}},
{"pk": 874, "model": "group.rolehistory", "fields": {"person": 103708, "group": 451, "name": "chair", "email": "dmm@1-4-5.net"}},
{"pk": 875, "model": "group.rolehistory", "fields": {"person": 103708, "group": 452, "name": "chair", "email": "dmm@1-4-5.net"}},
{"pk": 876, "model": "group.rolehistory", "fields": {"person": 110367, "group": 453, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 877, "model": "group.rolehistory", "fields": {"person": 112547, "group": 456, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 878, "model": "group.rolehistory", "fields": {"person": 105907, "group": 456, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 879, "model": "group.rolehistory", "fields": {"person": 107956, "group": 457, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 880, "model": "group.rolehistory", "fields": {"person": 111163, "group": 457, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 881, "model": "group.rolehistory", "fields": {"person": 103048, "group": 457, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 882, "model": "group.rolehistory", "fields": {"person": 104569, "group": 457, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 883, "model": "group.rolehistory", "fields": {"person": 107956, "group": 459, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 884, "model": "group.rolehistory", "fields": {"person": 111163, "group": 459, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 885, "model": "group.rolehistory", "fields": {"person": 103048, "group": 459, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 886, "model": "group.rolehistory", "fields": {"person": 104569, "group": 459, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 887, "model": "group.rolehistory", "fields": {"person": 107956, "group": 460, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 888, "model": "group.rolehistory", "fields": {"person": 111163, "group": 460, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 889, "model": "group.rolehistory", "fields": {"person": 103048, "group": 460, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 890, "model": "group.rolehistory", "fields": {"person": 104569, "group": 460, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 891, "model": "group.rolehistory", "fields": {"person": 106742, "group": 463, "name": "chair", "email": "akatlas@juniper.net"}},
{"pk": 892, "model": "group.rolehistory", "fields": {"person": 104147, "group": 463, "name": "chair", "email": "edc@google.com"}},
{"pk": 893, "model": "group.rolehistory", "fields": {"person": 106742, "group": 464, "name": "chair", "email": "akatlas@juniper.net"}},
{"pk": 894, "model": "group.rolehistory", "fields": {"person": 104147, "group": 464, "name": "chair", "email": "edc@google.com"}},
{"pk": 895, "model": "group.rolehistory", "fields": {"person": 5376, "group": 465, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 896, "model": "group.rolehistory", "fields": {"person": 2348, "group": 466, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 897, "model": "group.rolehistory", "fields": {"person": 100664, "group": 466, "name": "ad", "email": "brian@innovationslab.net"}},
{"pk": 898, "model": "group.rolehistory", "fields": {"person": 101568, "group": 467, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 899, "model": "group.rolehistory", "fields": {"person": 105682, "group": 467, "name": "ad", "email": "bclaise@cisco.com"}},
{"pk": 900, "model": "group.rolehistory", "fields": {"person": 103539, "group": 468, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 901, "model": "group.rolehistory", "fields": {"person": 103961, "group": 468, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 902, "model": "group.rolehistory", "fields": {"person": 102154, "group": 469, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 903, "model": "group.rolehistory", "fields": {"person": 4397, "group": 469, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 904, "model": "group.rolehistory", "fields": {"person": 110367, "group": 470, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 905, "model": "group.rolehistory", "fields": {"person": 106745, "group": 472, "name": "chair", "email": "ynir@checkpoint.com"}},
{"pk": 906, "model": "group.rolehistory", "fields": {"person": 8698, "group": 472, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 907, "model": "group.rolehistory", "fields": {"person": 2723, "group": 477, "name": "chair", "email": "rcallon@juniper.net"}},
{"pk": 908, "model": "group.rolehistory", "fields": {"person": 107256, "group": 478, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 909, "model": "group.rolehistory", "fields": {"person": 11928, "group": 478, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 910, "model": "group.rolehistory", "fields": {"person": 10083, "group": 479, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 911, "model": "group.rolehistory", "fields": {"person": 108722, "group": 480, "name": "chair", "email": "spromano@unina.it"}},
{"pk": 912, "model": "group.rolehistory", "fields": {"person": 106987, "group": 480, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 913, "model": "group.rolehistory", "fields": {"person": 110721, "group": 481, "name": "chair", "email": "ted.ietf@gmail.com"}},
{"pk": 914, "model": "group.rolehistory", "fields": {"person": 113697, "group": 481, "name": "chair", "email": "plale@cs.indiana.edu"}},
{"pk": 915, "model": "group.rolehistory", "fields": {"person": 105992, "group": 482, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 916, "model": "group.rolehistory", "fields": {"person": 109878, "group": 482, "name": "chair", "email": "dirk.von-hugo@telekom.de"}},
{"pk": 917, "model": "group.rolehistory", "fields": {"person": 107190, "group": 484, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 918, "model": "group.rolehistory", "fields": {"person": 106812, "group": 484, "name": "chair", "email": "vkg@bell-labs.com"}},
{"pk": 919, "model": "group.rolehistory", "fields": {"person": 23057, "group": 485, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 920, "model": "group.rolehistory", "fields": {"person": 2723, "group": 485, "name": "chair", "email": "rcallon@juniper.net"}},
{"pk": 921, "model": "group.rolehistory", "fields": {"person": 111584, "group": 486, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 922, "model": "group.rolehistory", "fields": {"person": 106461, "group": 486, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 923, "model": "group.rolehistory", "fields": {"person": 106315, "group": 487, "name": "chair", "email": "gjshep@gmail.com"}},
{"pk": 924, "model": "group.rolehistory", "fields": {"person": 107256, "group": 487, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 925, "model": "group.rolehistory", "fields": {"person": 113431, "group": 488, "name": "chair", "email": "hlflanagan@gmail.com"}},
{"pk": 926, "model": "group.rolehistory", "fields": {"person": 10083, "group": 489, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 927, "model": "group.rolehistory", "fields": {"person": 10064, "group": 490, "name": "chair", "email": "lberger@labn.net"}},
{"pk": 928, "model": "group.rolehistory", "fields": {"person": 112160, "group": 490, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 929, "model": "group.rolehistory", "fields": {"person": 105907, "group": 491, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 930, "model": "group.rolehistory", "fields": {"person": 102830, "group": 491, "name": "chair", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 931, "model": "group.rolehistory", "fields": {"person": 10083, "group": 492, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 932, "model": "group.rolehistory", "fields": {"person": 108049, "group": 492, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 933, "model": "group.rolehistory", "fields": {"person": 103539, "group": 493, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 934, "model": "group.rolehistory", "fields": {"person": 103961, "group": 493, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 935, "model": "group.rolehistory", "fields": {"person": 108049, "group": 493, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 936, "model": "group.rolehistory", "fields": {"person": 103539, "group": 494, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 937, "model": "group.rolehistory", "fields": {"person": 103961, "group": 494, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 938, "model": "group.rolehistory", "fields": {"person": 108049, "group": 494, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 939, "model": "group.rolehistory", "fields": {"person": 108049, "group": 494, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 940, "model": "group.rolehistory", "fields": {"person": 103539, "group": 495, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 941, "model": "group.rolehistory", "fields": {"person": 103961, "group": 495, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 942, "model": "group.rolehistory", "fields": {"person": 108049, "group": 495, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 943, "model": "group.rolehistory", "fields": {"person": 108049, "group": 495, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 944, "model": "group.rolehistory", "fields": {"person": 103539, "group": 496, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 945, "model": "group.rolehistory", "fields": {"person": 103961, "group": 496, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 946, "model": "group.rolehistory", "fields": {"person": 108049, "group": 496, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 947, "model": "group.rolehistory", "fields": {"person": 108049, "group": 496, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 948, "model": "group.rolehistory", "fields": {"person": 103961, "group": 497, "name": "delegate", "email": "rjsparks@nostrum.com"}},
{"pk": 949, "model": "group.rolehistory", "fields": {"person": 22971, "group": 497, "name": "techadv", "email": "lisa.dusseault@gmail.com"}},
{"pk": 950, "model": "group.rolehistory", "fields": {"person": 110077, "group": 497, "name": "chair", "email": "acooper@cdt.org"}},
{"pk": 951, "model": "group.rolehistory", "fields": {"person": 108049, "group": 497, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 952, "model": "group.rolehistory", "fields": {"person": 103961, "group": 498, "name": "delegate", "email": "rjsparks@nostrum.com"}},
{"pk": 953, "model": "group.rolehistory", "fields": {"person": 22971, "group": 498, "name": "techadv", "email": "lisa.dusseault@gmail.com"}},
{"pk": 954, "model": "group.rolehistory", "fields": {"person": 110077, "group": 498, "name": "chair", "email": "acooper@cdt.org"}},
{"pk": 955, "model": "group.rolehistory", "fields": {"person": 106289, "group": 499, "name": "chair", "email": "alan.b.johnston@gmail.com"}},
{"pk": 956, "model": "group.rolehistory", "fields": {"person": 108049, "group": 499, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 957, "model": "group.rolehistory", "fields": {"person": 106289, "group": 500, "name": "chair", "email": "alan.b.johnston@gmail.com"}},
{"pk": 958, "model": "group.rolehistory", "fields": {"person": 10083, "group": 501, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 959, "model": "group.rolehistory", "fields": {"person": 108049, "group": 501, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 960, "model": "group.rolehistory", "fields": {"person": 10083, "group": 502, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 961, "model": "group.rolehistory", "fields": {"person": 108049, "group": 503, "name": "liaiman", "email": "rbarnes@bbn.com"}}
]

View file

@ -0,0 +1,963 @@
[
{"pk": 1, "model": "group.rolehistory", "fields": {"person": 17188, "group": 1, "name": "ad", "email": "hardie@qualcomm.com"}},
{"pk": 2, "model": "group.rolehistory", "fields": {"person": 22873, "group": 1, "name": "ad", "email": "sah@428cobrajet.net"}},
{"pk": 3, "model": "group.rolehistory", "fields": {"person": 5778, "group": 2, "name": "ad", "email": "harald@alvestrand.no"}},
{"pk": 4, "model": "group.rolehistory", "fields": {"person": 7262, "group": 3, "name": "ad", "email": "narten@us.ibm.com"}},
{"pk": 5, "model": "group.rolehistory", "fields": {"person": 100887, "group": 3, "name": "ad", "email": "mrw@lilacglade.org"}},
{"pk": 6, "model": "group.rolehistory", "fields": {"person": 6842, "group": 4, "name": "ad", "email": "bertietf@bwijnen.net"}},
{"pk": 7, "model": "group.rolehistory", "fields": {"person": 19587, "group": 4, "name": "ad", "email": "david.kessens@nsn.com"}},
{"pk": 8, "model": "group.rolehistory", "fields": {"person": 13108, "group": 5, "name": "ad", "email": "fenner@fenron.com"}},
{"pk": 9, "model": "group.rolehistory", "fields": {"person": 103264, "group": 5, "name": "ad", "email": "azinin@cisco.com"}},
{"pk": 10, "model": "group.rolehistory", "fields": {"person": 5376, "group": 6, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 11, "model": "group.rolehistory", "fields": {"person": 103048, "group": 6, "name": "ad", "email": "hartmans-ietf@mit.edu"}},
{"pk": 12, "model": "group.rolehistory", "fields": {"person": 2515, "group": 7, "name": "ad", "email": "mankin@psg.com"}},
{"pk": 13, "model": "group.rolehistory", "fields": {"person": 104557, "group": 7, "name": "ad", "email": "jon.peterson@neustar.biz"}},
{"pk": 14, "model": "group.rolehistory", "fields": {"person": 1958, "group": 8, "name": "ad", "email": "brc@zurich.ibm.com"}},
{"pk": 15, "model": "group.rolehistory", "fields": {"person": 22948, "group": 9, "name": "ad", "email": "mark@townsley.net"}},
{"pk": 16, "model": "group.rolehistory", "fields": {"person": 100887, "group": 9, "name": "ad", "email": "mrw@lilacglade.org"}},
{"pk": 17, "model": "group.rolehistory", "fields": {"person": 107420, "group": 10, "name": "ad", "email": "noreply@ietf.org"}},
{"pk": 18, "model": "group.rolehistory", "fields": {"person": 17188, "group": 11, "name": "ad", "email": "hardie@qualcomm.com"}},
{"pk": 19, "model": "group.rolehistory", "fields": {"person": 22971, "group": 11, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 20, "model": "group.rolehistory", "fields": {"person": 21072, "group": 12, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 21, "model": "group.rolehistory", "fields": {"person": 22948, "group": 12, "name": "ad", "email": "mark@townsley.net"}},
{"pk": 22, "model": "group.rolehistory", "fields": {"person": 6699, "group": 13, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 23, "model": "group.rolehistory", "fields": {"person": 19587, "group": 13, "name": "ad", "email": "david.kessens@nsn.com"}},
{"pk": 24, "model": "group.rolehistory", "fields": {"person": 2723, "group": 14, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 25, "model": "group.rolehistory", "fields": {"person": 13108, "group": 14, "name": "ad", "email": "fenner@fenron.com"}},
{"pk": 26, "model": "group.rolehistory", "fields": {"person": 104294, "group": 15, "name": "ad", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 27, "model": "group.rolehistory", "fields": {"person": 112773, "group": 15, "name": "ad", "email": "lars@netapp.com"}},
{"pk": 28, "model": "group.rolehistory", "fields": {"person": 104557, "group": 16, "name": "ad", "email": "jon.peterson@neustar.biz"}},
{"pk": 29, "model": "group.rolehistory", "fields": {"person": 105791, "group": 16, "name": "ad", "email": "fluffy@cisco.com"}},
{"pk": 30, "model": "group.rolehistory", "fields": {"person": 9909, "group": 17, "name": "ad", "email": "chris.newman@oracle.com"}},
{"pk": 31, "model": "group.rolehistory", "fields": {"person": 22971, "group": 17, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 32, "model": "group.rolehistory", "fields": {"person": 5376, "group": 18, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 33, "model": "group.rolehistory", "fields": {"person": 6699, "group": 19, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 34, "model": "group.rolehistory", "fields": {"person": 101568, "group": 19, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 35, "model": "group.rolehistory", "fields": {"person": 2723, "group": 20, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 36, "model": "group.rolehistory", "fields": {"person": 23057, "group": 20, "name": "ad", "email": "dward@juniper.net"}},
{"pk": 37, "model": "group.rolehistory", "fields": {"person": 19790, "group": 21, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 38, "model": "group.rolehistory", "fields": {"person": 103048, "group": 21, "name": "ad", "email": "hartmans-ietf@mit.edu"}},
{"pk": 39, "model": "group.rolehistory", "fields": {"person": 19790, "group": 22, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 40, "model": "group.rolehistory", "fields": {"person": 106164, "group": 22, "name": "ad", "email": "pe@iki.fi"}},
{"pk": 41, "model": "group.rolehistory", "fields": {"person": 22971, "group": 23, "name": "ad", "email": "lisa.dusseault@gmail.com"}},
{"pk": 42, "model": "group.rolehistory", "fields": {"person": 102154, "group": 23, "name": "ad", "email": "alexey.melnikov@isode.com"}},
{"pk": 43, "model": "group.rolehistory", "fields": {"person": 21072, "group": 24, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 44, "model": "group.rolehistory", "fields": {"person": 2348, "group": 24, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 45, "model": "group.rolehistory", "fields": {"person": 105791, "group": 25, "name": "ad", "email": "fluffy@cisco.com"}},
{"pk": 46, "model": "group.rolehistory", "fields": {"person": 103961, "group": 25, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 47, "model": "group.rolehistory", "fields": {"person": 2723, "group": 26, "name": "ad", "email": "rcallon@juniper.net"}},
{"pk": 48, "model": "group.rolehistory", "fields": {"person": 104198, "group": 26, "name": "ad", "email": "adrian@olddog.co.uk"}},
{"pk": 49, "model": "group.rolehistory", "fields": {"person": 102154, "group": 27, "name": "ad", "email": "alexey.melnikov@isode.com"}},
{"pk": 50, "model": "group.rolehistory", "fields": {"person": 105907, "group": 27, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 51, "model": "group.rolehistory", "fields": {"person": 104198, "group": 28, "name": "ad", "email": "adrian@olddog.co.uk"}},
{"pk": 52, "model": "group.rolehistory", "fields": {"person": 2329, "group": 28, "name": "ad", "email": "stbryant@cisco.com"}},
{"pk": 53, "model": "group.rolehistory", "fields": {"person": 19483, "group": 29, "name": "ad", "email": "turners@ieca.com"}},
{"pk": 54, "model": "group.rolehistory", "fields": {"person": 19790, "group": 29, "name": "ad", "email": "tim.polk@nist.gov"}},
{"pk": 55, "model": "group.rolehistory", "fields": {"person": 112773, "group": 30, "name": "ad", "email": "lars@netapp.com"}},
{"pk": 56, "model": "group.rolehistory", "fields": {"person": 17253, "group": 30, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 57, "model": "group.rolehistory", "fields": {"person": 103961, "group": 31, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 58, "model": "group.rolehistory", "fields": {"person": 103539, "group": 31, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 59, "model": "group.rolehistory", "fields": {"person": 105682, "group": 33, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 60, "model": "group.rolehistory", "fields": {"person": 111529, "group": 33, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 61, "model": "group.rolehistory", "fields": {"person": 105682, "group": 34, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 62, "model": "group.rolehistory", "fields": {"person": 111529, "group": 34, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 63, "model": "group.rolehistory", "fields": {"person": 6766, "group": 34, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 64, "model": "group.rolehistory", "fields": {"person": 106186, "group": 36, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 65, "model": "group.rolehistory", "fields": {"person": 109800, "group": 36, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 66, "model": "group.rolehistory", "fields": {"person": 106186, "group": 40, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 67, "model": "group.rolehistory", "fields": {"person": 106186, "group": 41, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 68, "model": "group.rolehistory", "fields": {"person": 109800, "group": 41, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 69, "model": "group.rolehistory", "fields": {"person": 106186, "group": 42, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 70, "model": "group.rolehistory", "fields": {"person": 109800, "group": 42, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 71, "model": "group.rolehistory", "fields": {"person": 106186, "group": 43, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 72, "model": "group.rolehistory", "fields": {"person": 109800, "group": 43, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 73, "model": "group.rolehistory", "fields": {"person": 106186, "group": 44, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 74, "model": "group.rolehistory", "fields": {"person": 109800, "group": 44, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 75, "model": "group.rolehistory", "fields": {"person": 102154, "group": 45, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 76, "model": "group.rolehistory", "fields": {"person": 21684, "group": 45, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 77, "model": "group.rolehistory", "fields": {"person": 107279, "group": 45, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 78, "model": "group.rolehistory", "fields": {"person": 106872, "group": 46, "name": "chair", "email": "T.Clausen@computer.org"}},
{"pk": 79, "model": "group.rolehistory", "fields": {"person": 105595, "group": 46, "name": "chair", "email": "ryuji.wakikawa@gmail.com"}},
{"pk": 80, "model": "group.rolehistory", "fields": {"person": 7262, "group": 48, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 81, "model": "group.rolehistory", "fields": {"person": 7262, "group": 49, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 82, "model": "group.rolehistory", "fields": {"person": 105786, "group": 49, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 83, "model": "group.rolehistory", "fields": {"person": 16366, "group": 50, "name": "chair", "email": "Ed.Lewis@neustar.biz"}},
{"pk": 84, "model": "group.rolehistory", "fields": {"person": 2890, "group": 50, "name": "chair", "email": "jaap@sidn.nl"}},
{"pk": 85, "model": "group.rolehistory", "fields": {"person": 107256, "group": 51, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 86, "model": "group.rolehistory", "fields": {"person": 11928, "group": 51, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 87, "model": "group.rolehistory", "fields": {"person": 107190, "group": 53, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 88, "model": "group.rolehistory", "fields": {"person": 106438, "group": 54, "name": "chair", "email": "bryan@ethernot.org"}},
{"pk": 89, "model": "group.rolehistory", "fields": {"person": 106987, "group": 54, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 90, "model": "group.rolehistory", "fields": {"person": 105097, "group": 56, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 91, "model": "group.rolehistory", "fields": {"person": 105097, "group": 57, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 92, "model": "group.rolehistory", "fields": {"person": 107684, "group": 57, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 93, "model": "group.rolehistory", "fields": {"person": 22933, "group": 58, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 94, "model": "group.rolehistory", "fields": {"person": 23057, "group": 58, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 95, "model": "group.rolehistory", "fields": {"person": 22933, "group": 59, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 96, "model": "group.rolehistory", "fields": {"person": 2399, "group": 60, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 97, "model": "group.rolehistory", "fields": {"person": 23057, "group": 60, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 98, "model": "group.rolehistory", "fields": {"person": 105046, "group": 60, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 99, "model": "group.rolehistory", "fields": {"person": 2399, "group": 61, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 100, "model": "group.rolehistory", "fields": {"person": 105046, "group": 61, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 101, "model": "group.rolehistory", "fields": {"person": 23057, "group": 62, "name": "chair", "email": "dward@juniper.net"}},
{"pk": 102, "model": "group.rolehistory", "fields": {"person": 103539, "group": 62, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 103, "model": "group.rolehistory", "fields": {"person": 103539, "group": 63, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 104, "model": "group.rolehistory", "fields": {"person": 109558, "group": 64, "name": "delegate", "email": "daniel@olddog.co.uk"}},
{"pk": 105, "model": "group.rolehistory", "fields": {"person": 109703, "group": 64, "name": "delegate", "email": "daniele.ceccarelli@ericsson.com"}},
{"pk": 106, "model": "group.rolehistory", "fields": {"person": 109558, "group": 64, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 107, "model": "group.rolehistory", "fields": {"person": 10064, "group": 64, "name": "chair", "email": "lberger@labn.net"}},
{"pk": 108, "model": "group.rolehistory", "fields": {"person": 106471, "group": 64, "name": "chair", "email": "dbrungard@att.com"}},
{"pk": 109, "model": "group.rolehistory", "fields": {"person": 2324, "group": 65, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 110, "model": "group.rolehistory", "fields": {"person": 107131, "group": 65, "name": "chair", "email": "martin.thomson@andrew.com"}},
{"pk": 111, "model": "group.rolehistory", "fields": {"person": 2324, "group": 66, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 112, "model": "group.rolehistory", "fields": {"person": 102154, "group": 67, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 113, "model": "group.rolehistory", "fields": {"person": 21684, "group": 67, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 114, "model": "group.rolehistory", "fields": {"person": 107279, "group": 67, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 115, "model": "group.rolehistory", "fields": {"person": 106842, "group": 67, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 116, "model": "group.rolehistory", "fields": {"person": 102154, "group": 68, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 117, "model": "group.rolehistory", "fields": {"person": 21684, "group": 68, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 118, "model": "group.rolehistory", "fields": {"person": 107279, "group": 68, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 119, "model": "group.rolehistory", "fields": {"person": 106842, "group": 68, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 120, "model": "group.rolehistory", "fields": {"person": 106842, "group": 68, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 121, "model": "group.rolehistory", "fields": {"person": 102154, "group": 69, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 122, "model": "group.rolehistory", "fields": {"person": 107279, "group": 69, "name": "chair", "email": "yaojk@cnnic.cn"}},
{"pk": 123, "model": "group.rolehistory", "fields": {"person": 106842, "group": 69, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 124, "model": "group.rolehistory", "fields": {"person": 106842, "group": 69, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 125, "model": "group.rolehistory", "fields": {"person": 105519, "group": 70, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 126, "model": "group.rolehistory", "fields": {"person": 109919, "group": 70, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 127, "model": "group.rolehistory", "fields": {"person": 105519, "group": 71, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 128, "model": "group.rolehistory", "fields": {"person": 109919, "group": 71, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 129, "model": "group.rolehistory", "fields": {"person": 103392, "group": 71, "name": "chair", "email": "sprevidi@cisco.com"}},
{"pk": 130, "model": "group.rolehistory", "fields": {"person": 18321, "group": 72, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 131, "model": "group.rolehistory", "fields": {"person": 105907, "group": 72, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 132, "model": "group.rolehistory", "fields": {"person": 21684, "group": 72, "name": "pre-ad", "email": "barryleiba@computer.org"}},
{"pk": 133, "model": "group.rolehistory", "fields": {"person": 18321, "group": 73, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 134, "model": "group.rolehistory", "fields": {"person": 105907, "group": 73, "name": "ad", "email": "stpeter@stpeter.im"}},
{"pk": 135, "model": "group.rolehistory", "fields": {"person": 21684, "group": 73, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 136, "model": "group.rolehistory", "fields": {"person": 21072, "group": 74, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 137, "model": "group.rolehistory", "fields": {"person": 2348, "group": 74, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 138, "model": "group.rolehistory", "fields": {"person": 100664, "group": 74, "name": "pre-ad", "email": "brian@innovationslab.net"}},
{"pk": 139, "model": "group.rolehistory", "fields": {"person": 21072, "group": 75, "name": "ad", "email": "jari.arkko@piuha.net"}},
{"pk": 140, "model": "group.rolehistory", "fields": {"person": 2348, "group": 75, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 141, "model": "group.rolehistory", "fields": {"person": 100664, "group": 75, "name": "ad", "email": "brian@innovationslab.net"}},
{"pk": 142, "model": "group.rolehistory", "fields": {"person": 101568, "group": 76, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 143, "model": "group.rolehistory", "fields": {"person": 6699, "group": 76, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 144, "model": "group.rolehistory", "fields": {"person": 105682, "group": 76, "name": "pre-ad", "email": "bclaise@cisco.com"}},
{"pk": 145, "model": "group.rolehistory", "fields": {"person": 101568, "group": 77, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 146, "model": "group.rolehistory", "fields": {"person": 6699, "group": 77, "name": "ad", "email": "dromasca@avaya.com"}},
{"pk": 147, "model": "group.rolehistory", "fields": {"person": 105682, "group": 77, "name": "ad", "email": "bclaise@cisco.com"}},
{"pk": 148, "model": "group.rolehistory", "fields": {"person": 110856, "group": 78, "name": "ad", "email": "wes@mti-systems.com"}},
{"pk": 149, "model": "group.rolehistory", "fields": {"person": 17253, "group": 78, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 150, "model": "group.rolehistory", "fields": {"person": 105519, "group": 78, "name": "pre-ad", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 151, "model": "group.rolehistory", "fields": {"person": 110856, "group": 79, "name": "ad", "email": "wes@mti-systems.com"}},
{"pk": 152, "model": "group.rolehistory", "fields": {"person": 17253, "group": 79, "name": "ad", "email": "ietfdbh@comcast.net"}},
{"pk": 153, "model": "group.rolehistory", "fields": {"person": 105519, "group": 79, "name": "ad", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 154, "model": "group.rolehistory", "fields": {"person": 102154, "group": 80, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 155, "model": "group.rolehistory", "fields": {"person": 106842, "group": 80, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 156, "model": "group.rolehistory", "fields": {"person": 106842, "group": 80, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 157, "model": "group.rolehistory", "fields": {"person": 105791, "group": 81, "name": "chair", "email": "fluffy@cisco.com"}},
{"pk": 158, "model": "group.rolehistory", "fields": {"person": 11843, "group": 81, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 159, "model": "group.rolehistory", "fields": {"person": 103881, "group": 82, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 160, "model": "group.rolehistory", "fields": {"person": 109918, "group": 83, "name": "secr", "email": "sm+ietf@elandsys.com"}},
{"pk": 161, "model": "group.rolehistory", "fields": {"person": 107491, "group": 83, "name": "chair", "email": "Salvatore.Loreto@ericsson.com"}},
{"pk": 162, "model": "group.rolehistory", "fields": {"person": 108488, "group": 83, "name": "chair", "email": "Gabriel.Montenegro@microsoft.com"}},
{"pk": 163, "model": "group.rolehistory", "fields": {"person": 21684, "group": 84, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 164, "model": "group.rolehistory", "fields": {"person": 106842, "group": 84, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 165, "model": "group.rolehistory", "fields": {"person": 106296, "group": 85, "name": "chair", "email": "andy@hxr.us"}},
{"pk": 166, "model": "group.rolehistory", "fields": {"person": 110063, "group": 85, "name": "chair", "email": "ah@TR-Sys.de"}},
{"pk": 167, "model": "group.rolehistory", "fields": {"person": 106745, "group": 86, "name": "secr", "email": "ynir@checkpoint.com"}},
{"pk": 168, "model": "group.rolehistory", "fields": {"person": 19483, "group": 86, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 169, "model": "group.rolehistory", "fields": {"person": 106405, "group": 86, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 170, "model": "group.rolehistory", "fields": {"person": 102154, "group": 86, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 171, "model": "group.rolehistory", "fields": {"person": 112547, "group": 87, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 172, "model": "group.rolehistory", "fields": {"person": 106987, "group": 88, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 173, "model": "group.rolehistory", "fields": {"person": 108123, "group": 88, "name": "chair", "email": "Gabor.Bajko@nokia.com"}},
{"pk": 174, "model": "group.rolehistory", "fields": {"person": 108717, "group": 89, "name": "chair", "email": "simon.perreault@viagenie.ca"}},
{"pk": 175, "model": "group.rolehistory", "fields": {"person": 21684, "group": 90, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 176, "model": "group.rolehistory", "fields": {"person": 106842, "group": 90, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 177, "model": "group.rolehistory", "fields": {"person": 105907, "group": 91, "name": "techadv", "email": "stpeter@stpeter.im"}},
{"pk": 178, "model": "group.rolehistory", "fields": {"person": 105857, "group": 91, "name": "chair", "email": "Hannes.Tschofenig@gmx.net"}},
{"pk": 179, "model": "group.rolehistory", "fields": {"person": 21684, "group": 91, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 180, "model": "group.rolehistory", "fields": {"person": 8698, "group": 91, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 181, "model": "group.rolehistory", "fields": {"person": 2793, "group": 92, "name": "chair", "email": "bob.hinden@gmail.com"}},
{"pk": 182, "model": "group.rolehistory", "fields": {"person": 100664, "group": 92, "name": "chair", "email": "brian@innovationslab.net"}},
{"pk": 183, "model": "group.rolehistory", "fields": {"person": 105691, "group": 92, "name": "chair", "email": "otroan@employees.org"}},
{"pk": 184, "model": "group.rolehistory", "fields": {"person": 100664, "group": 93, "name": "chair", "email": "brian@innovationslab.net"}},
{"pk": 185, "model": "group.rolehistory", "fields": {"person": 4857, "group": 93, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 186, "model": "group.rolehistory", "fields": {"person": 109919, "group": 94, "name": "chair", "email": "zhangyunfei@chinamobile.com"}},
{"pk": 187, "model": "group.rolehistory", "fields": {"person": 103392, "group": 94, "name": "chair", "email": "sprevidi@cisco.com"}},
{"pk": 188, "model": "group.rolehistory", "fields": {"person": 100038, "group": 95, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 189, "model": "group.rolehistory", "fields": {"person": 15927, "group": 95, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 190, "model": "group.rolehistory", "fields": {"person": 104331, "group": 96, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 191, "model": "group.rolehistory", "fields": {"person": 104267, "group": 96, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 192, "model": "group.rolehistory", "fields": {"person": 105907, "group": 97, "name": "techadv", "email": "stpeter@stpeter.im"}},
{"pk": 193, "model": "group.rolehistory", "fields": {"person": 107435, "group": 97, "name": "chair", "email": "enrico.marocco@telecomitalia.it"}},
{"pk": 194, "model": "group.rolehistory", "fields": {"person": 106812, "group": 97, "name": "chair", "email": "vkg@bell-labs.com"}},
{"pk": 195, "model": "group.rolehistory", "fields": {"person": 2690, "group": 98, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 196, "model": "group.rolehistory", "fields": {"person": 101685, "group": 98, "name": "chair", "email": "flefauch@cisco.com"}},
{"pk": 197, "model": "group.rolehistory", "fields": {"person": 102154, "group": 99, "name": "techadv", "email": "alexey.melnikov@isode.com"}},
{"pk": 198, "model": "group.rolehistory", "fields": {"person": 109430, "group": 99, "name": "chair", "email": "haibin.song@huawei.com"}},
{"pk": 199, "model": "group.rolehistory", "fields": {"person": 2690, "group": 99, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 200, "model": "group.rolehistory", "fields": {"person": 106315, "group": 100, "name": "chair", "email": "gjshep@gmail.com"}},
{"pk": 201, "model": "group.rolehistory", "fields": {"person": 110406, "group": 101, "name": "techadv", "email": "leifj@sunet.se"}},
{"pk": 202, "model": "group.rolehistory", "fields": {"person": 21097, "group": 101, "name": "chair", "email": "spencer.shepler@gmail.com"}},
{"pk": 203, "model": "group.rolehistory", "fields": {"person": 18587, "group": 101, "name": "chair", "email": "beepy@netapp.com"}},
{"pk": 204, "model": "group.rolehistory", "fields": {"person": 2324, "group": 102, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 205, "model": "group.rolehistory", "fields": {"person": 106638, "group": 102, "name": "chair", "email": "slblake@petri-meat.com"}},
{"pk": 206, "model": "group.rolehistory", "fields": {"person": 100609, "group": 103, "name": "chair", "email": "lorenzo@vicisano.net"}},
{"pk": 207, "model": "group.rolehistory", "fields": {"person": 12671, "group": 103, "name": "chair", "email": "adamson@itd.nrl.navy.mil"}},
{"pk": 208, "model": "group.rolehistory", "fields": {"person": 8209, "group": 104, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 209, "model": "group.rolehistory", "fields": {"person": 103156, "group": 104, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 210, "model": "group.rolehistory", "fields": {"person": 100887, "group": 105, "name": "chair", "email": "mrw@lilacglade.org"}},
{"pk": 211, "model": "group.rolehistory", "fields": {"person": 109884, "group": 105, "name": "chair", "email": "denghui02@hotmail.com"}},
{"pk": 212, "model": "group.rolehistory", "fields": {"person": 105328, "group": 106, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 213, "model": "group.rolehistory", "fields": {"person": 15927, "group": 106, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 214, "model": "group.rolehistory", "fields": {"person": 108081, "group": 107, "name": "secr", "email": "junbi@tsinghua.edu.cn"}},
{"pk": 215, "model": "group.rolehistory", "fields": {"person": 107482, "group": 107, "name": "techadv", "email": "jianping@cernet.edu.cn"}},
{"pk": 216, "model": "group.rolehistory", "fields": {"person": 108428, "group": 107, "name": "chair", "email": "jeanmichel.combes@gmail.com"}},
{"pk": 217, "model": "group.rolehistory", "fields": {"person": 108396, "group": 107, "name": "chair", "email": "christian.vogt@ericsson.com"}},
{"pk": 218, "model": "group.rolehistory", "fields": {"person": 2793, "group": 108, "name": "chair", "email": "bob.hinden@gmail.com"}},
{"pk": 219, "model": "group.rolehistory", "fields": {"person": 105691, "group": 108, "name": "chair", "email": "otroan@employees.org"}},
{"pk": 220, "model": "group.rolehistory", "fields": {"person": 106186, "group": 109, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 221, "model": "group.rolehistory", "fields": {"person": 109800, "group": 109, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 222, "model": "group.rolehistory", "fields": {"person": 106199, "group": 110, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 223, "model": "group.rolehistory", "fields": {"person": 108833, "group": 110, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 224, "model": "group.rolehistory", "fields": {"person": 108822, "group": 110, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 225, "model": "group.rolehistory", "fields": {"person": 3862, "group": 110, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 226, "model": "group.rolehistory", "fields": {"person": 112773, "group": 111, "name": "techadv", "email": "lars@netapp.com"}},
{"pk": 227, "model": "group.rolehistory", "fields": {"person": 111293, "group": 111, "name": "chair", "email": "robert.cragie@gridmerge.com"}},
{"pk": 228, "model": "group.rolehistory", "fields": {"person": 110531, "group": 111, "name": "chair", "email": "caozhen@chinamobile.com"}},
{"pk": 229, "model": "group.rolehistory", "fields": {"person": 106173, "group": 112, "name": "chair", "email": "stig@venaas.com"}},
{"pk": 230, "model": "group.rolehistory", "fields": {"person": 105992, "group": 112, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 231, "model": "group.rolehistory", "fields": {"person": 105730, "group": 113, "name": "chair", "email": "henrik@levkowetz.com"}},
{"pk": 232, "model": "group.rolehistory", "fields": {"person": 106010, "group": 113, "name": "chair", "email": "mccap@petoni.org"}},
{"pk": 233, "model": "group.rolehistory", "fields": {"person": 101214, "group": 114, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 234, "model": "group.rolehistory", "fields": {"person": 103283, "group": 114, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 235, "model": "group.rolehistory", "fields": {"person": 4857, "group": 115, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 236, "model": "group.rolehistory", "fields": {"person": 8249, "group": 116, "name": "techadv", "email": "carlsonj@workingcode.com"}},
{"pk": 237, "model": "group.rolehistory", "fields": {"person": 102391, "group": 116, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 238, "model": "group.rolehistory", "fields": {"person": 106414, "group": 117, "name": "chair", "email": "yaakov_s@rad.com"}},
{"pk": 239, "model": "group.rolehistory", "fields": {"person": 4857, "group": 117, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 240, "model": "group.rolehistory", "fields": {"person": 2324, "group": 118, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 241, "model": "group.rolehistory", "fields": {"person": 104807, "group": 118, "name": "chair", "email": "ietf@cdl.asgaard.org"}},
{"pk": 242, "model": "group.rolehistory", "fields": {"person": 101104, "group": 118, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 243, "model": "group.rolehistory", "fields": {"person": 106462, "group": 119, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 244, "model": "group.rolehistory", "fields": {"person": 107067, "group": 119, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 245, "model": "group.rolehistory", "fields": {"person": 105024, "group": 119, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 246, "model": "group.rolehistory", "fields": {"person": 107258, "group": 119, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 247, "model": "group.rolehistory", "fields": {"person": 106345, "group": 119, "name": "chair", "email": "Menachem.Dodge@ecitele.com"}},
{"pk": 248, "model": "group.rolehistory", "fields": {"person": 109800, "group": 120, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 249, "model": "group.rolehistory", "fields": {"person": 107737, "group": 120, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 250, "model": "group.rolehistory", "fields": {"person": 111529, "group": 121, "name": "chair", "email": "bnordman@lbl.gov"}},
{"pk": 251, "model": "group.rolehistory", "fields": {"person": 6766, "group": 121, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 252, "model": "group.rolehistory", "fields": {"person": 19790, "group": 122, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 253, "model": "group.rolehistory", "fields": {"person": 6842, "group": 122, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 254, "model": "group.rolehistory", "fields": {"person": 105537, "group": 122, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 255, "model": "group.rolehistory", "fields": {"person": 21106, "group": 123, "name": "chair", "email": "j.schoenwaelder@jacobs-university.de"}},
{"pk": 256, "model": "group.rolehistory", "fields": {"person": 19587, "group": 123, "name": "chair", "email": "david.kessens@nsn.com"}},
{"pk": 257, "model": "group.rolehistory", "fields": {"person": 6766, "group": 124, "name": "chair", "email": "n.brownlee@auckland.ac.nz"}},
{"pk": 258, "model": "group.rolehistory", "fields": {"person": 103651, "group": 124, "name": "chair", "email": "quittek@neclab.eu"}},
{"pk": 259, "model": "group.rolehistory", "fields": {"person": 17681, "group": 125, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 260, "model": "group.rolehistory", "fields": {"person": 109800, "group": 125, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 261, "model": "group.rolehistory", "fields": {"person": 111434, "group": 125, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 262, "model": "group.rolehistory", "fields": {"person": 109558, "group": 126, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 263, "model": "group.rolehistory", "fields": {"person": 110259, "group": 126, "name": "techadv", "email": "rstruik.ext@gmail.com"}},
{"pk": 264, "model": "group.rolehistory", "fields": {"person": 106269, "group": 126, "name": "chair", "email": "jpv@cisco.com"}},
{"pk": 265, "model": "group.rolehistory", "fields": {"person": 108796, "group": 126, "name": "chair", "email": "culler@cs.berkeley.edu"}},
{"pk": 266, "model": "group.rolehistory", "fields": {"person": 109558, "group": 127, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 267, "model": "group.rolehistory", "fields": {"person": 110259, "group": 127, "name": "techadv", "email": "rstruik.ext@gmail.com"}},
{"pk": 268, "model": "group.rolehistory", "fields": {"person": 102254, "group": 127, "name": "chair", "email": "mcr+ietf@sandelman.ca"}},
{"pk": 269, "model": "group.rolehistory", "fields": {"person": 106269, "group": 127, "name": "chair", "email": "jpv@cisco.com"}},
{"pk": 270, "model": "group.rolehistory", "fields": {"person": 108796, "group": 127, "name": "chair", "email": "culler@cs.berkeley.edu"}},
{"pk": 271, "model": "group.rolehistory", "fields": {"person": 105097, "group": 128, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 272, "model": "group.rolehistory", "fields": {"person": 107684, "group": 128, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 273, "model": "group.rolehistory", "fields": {"person": 105097, "group": 129, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 274, "model": "group.rolehistory", "fields": {"person": 110842, "group": 129, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 275, "model": "group.rolehistory", "fields": {"person": 107684, "group": 129, "name": "chair", "email": "hkaplan@acmepacket.com"}},
{"pk": 276, "model": "group.rolehistory", "fields": {"person": 112547, "group": 130, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 277, "model": "group.rolehistory", "fields": {"person": 7262, "group": 131, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 278, "model": "group.rolehistory", "fields": {"person": 105786, "group": 131, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 279, "model": "group.rolehistory", "fields": {"person": 112438, "group": 131, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 280, "model": "group.rolehistory", "fields": {"person": 7262, "group": 132, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 281, "model": "group.rolehistory", "fields": {"person": 105786, "group": 132, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 282, "model": "group.rolehistory", "fields": {"person": 112438, "group": 132, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 283, "model": "group.rolehistory", "fields": {"person": 6771, "group": 133, "name": "chair", "email": "tony@att.com"}},
{"pk": 284, "model": "group.rolehistory", "fields": {"person": 109498, "group": 133, "name": "chair", "email": "anthonybryan@gmail.com"}},
{"pk": 285, "model": "group.rolehistory", "fields": {"person": 109558, "group": 134, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 286, "model": "group.rolehistory", "fields": {"person": 19987, "group": 134, "name": "chair", "email": "danny@tcb.net"}},
{"pk": 287, "model": "group.rolehistory", "fields": {"person": 107256, "group": 134, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 288, "model": "group.rolehistory", "fields": {"person": 108185, "group": 134, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 289, "model": "group.rolehistory", "fields": {"person": 109558, "group": 135, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 290, "model": "group.rolehistory", "fields": {"person": 19987, "group": 135, "name": "chair", "email": "danny@tcb.net"}},
{"pk": 291, "model": "group.rolehistory", "fields": {"person": 107256, "group": 135, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 292, "model": "group.rolehistory", "fields": {"person": 2329, "group": 135, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 293, "model": "group.rolehistory", "fields": {"person": 108185, "group": 135, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 294, "model": "group.rolehistory", "fields": {"person": 109558, "group": 136, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 295, "model": "group.rolehistory", "fields": {"person": 107256, "group": 136, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 296, "model": "group.rolehistory", "fields": {"person": 2329, "group": 136, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 297, "model": "group.rolehistory", "fields": {"person": 108185, "group": 136, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 298, "model": "group.rolehistory", "fields": {"person": 109558, "group": 137, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 299, "model": "group.rolehistory", "fields": {"person": 2329, "group": 137, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 300, "model": "group.rolehistory", "fields": {"person": 108185, "group": 137, "name": "chair", "email": "ben@niven-jenkins.co.uk"}},
{"pk": 301, "model": "group.rolehistory", "fields": {"person": 104557, "group": 140, "name": "techadv", "email": "jon.peterson@neustar.biz"}},
{"pk": 302, "model": "group.rolehistory", "fields": {"person": 105426, "group": 140, "name": "chair", "email": "hisham.khartabil@gmail.com"}},
{"pk": 303, "model": "group.rolehistory", "fields": {"person": 104140, "group": 140, "name": "chair", "email": "ben@nostrum.com"}},
{"pk": 304, "model": "group.rolehistory", "fields": {"person": 110049, "group": 141, "name": "chair", "email": "jhildebr@cisco.com"}},
{"pk": 305, "model": "group.rolehistory", "fields": {"person": 104140, "group": 141, "name": "chair", "email": "ben@nostrum.com"}},
{"pk": 306, "model": "group.rolehistory", "fields": {"person": 102391, "group": 142, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 307, "model": "group.rolehistory", "fields": {"person": 8243, "group": 142, "name": "chair", "email": "nordmark@acm.org"}},
{"pk": 308, "model": "group.rolehistory", "fields": {"person": 109558, "group": 143, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 309, "model": "group.rolehistory", "fields": {"person": 2329, "group": 143, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 310, "model": "group.rolehistory", "fields": {"person": 109558, "group": 144, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 311, "model": "group.rolehistory", "fields": {"person": 2329, "group": 144, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 312, "model": "group.rolehistory", "fields": {"person": 106860, "group": 144, "name": "chair", "email": "thomas.morin@orange.com"}},
{"pk": 313, "model": "group.rolehistory", "fields": {"person": 107084, "group": 145, "name": "secr", "email": "rmarshall@telecomsys.com"}},
{"pk": 314, "model": "group.rolehistory", "fields": {"person": 106012, "group": 145, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 315, "model": "group.rolehistory", "fields": {"person": 108049, "group": 145, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 316, "model": "group.rolehistory", "fields": {"person": 107084, "group": 146, "name": "secr", "email": "rmarshall@telecomsys.com"}},
{"pk": 317, "model": "group.rolehistory", "fields": {"person": 106012, "group": 146, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 318, "model": "group.rolehistory", "fields": {"person": 108049, "group": 146, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 319, "model": "group.rolehistory", "fields": {"person": 107084, "group": 146, "name": "chair", "email": "rmarshall@telecomsys.com"}},
{"pk": 320, "model": "group.rolehistory", "fields": {"person": 5797, "group": 147, "name": "techadv", "email": "smb@cs.columbia.edu"}},
{"pk": 321, "model": "group.rolehistory", "fields": {"person": 13219, "group": 147, "name": "chair", "email": "Sandra.Murphy@sparta.com"}},
{"pk": 322, "model": "group.rolehistory", "fields": {"person": 111246, "group": 147, "name": "chair", "email": "morrowc@ops-netman.net"}},
{"pk": 323, "model": "group.rolehistory", "fields": {"person": 109178, "group": 148, "name": "chair", "email": "ajs@anvilwalrusden.com"}},
{"pk": 324, "model": "group.rolehistory", "fields": {"person": 106842, "group": 148, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 325, "model": "group.rolehistory", "fields": {"person": 102174, "group": 150, "name": "chair", "email": "dirk.kutscher@neclab.eu"}},
{"pk": 326, "model": "group.rolehistory", "fields": {"person": 18250, "group": 151, "name": "chair", "email": "Borje.Ohlman@ericsson.com"}},
{"pk": 327, "model": "group.rolehistory", "fields": {"person": 102174, "group": 151, "name": "chair", "email": "dirk.kutscher@neclab.eu"}},
{"pk": 328, "model": "group.rolehistory", "fields": {"person": 109814, "group": 157, "name": "chair", "email": "lachlan.andrew@gmail.com"}},
{"pk": 329, "model": "group.rolehistory", "fields": {"person": 19826, "group": 159, "name": "chair", "email": "canetti@watson.ibm.com"}},
{"pk": 330, "model": "group.rolehistory", "fields": {"person": 103303, "group": 159, "name": "chair", "email": "mcgrew@cisco.com"}},
{"pk": 331, "model": "group.rolehistory", "fields": {"person": 109225, "group": 159, "name": "chair", "email": "kmigoe@nsa.gov"}},
{"pk": 332, "model": "group.rolehistory", "fields": {"person": 21226, "group": 160, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 333, "model": "group.rolehistory", "fields": {"person": 11928, "group": 160, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 334, "model": "group.rolehistory", "fields": {"person": 102154, "group": 161, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 335, "model": "group.rolehistory", "fields": {"person": 106842, "group": 161, "name": "delegate", "email": "msk@cloudmark.com"}},
{"pk": 336, "model": "group.rolehistory", "fields": {"person": 106842, "group": 161, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 337, "model": "group.rolehistory", "fields": {"person": 109558, "group": 162, "name": "secr", "email": "daniel@olddog.co.uk"}},
{"pk": 338, "model": "group.rolehistory", "fields": {"person": 108279, "group": 162, "name": "chair", "email": "martin.vigoureux@alcatel-lucent.com"}},
{"pk": 339, "model": "group.rolehistory", "fields": {"person": 2329, "group": 162, "name": "chair", "email": "stbryant@cisco.com"}},
{"pk": 340, "model": "group.rolehistory", "fields": {"person": 106860, "group": 162, "name": "chair", "email": "thomas.morin@orange.com"}},
{"pk": 341, "model": "group.rolehistory", "fields": {"person": 7262, "group": 164, "name": "chair", "email": "narten@us.ibm.com"}},
{"pk": 342, "model": "group.rolehistory", "fields": {"person": 105786, "group": 164, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 343, "model": "group.rolehistory", "fields": {"person": 112438, "group": 164, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 344, "model": "group.rolehistory", "fields": {"person": 105786, "group": 165, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 345, "model": "group.rolehistory", "fields": {"person": 112438, "group": 165, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 346, "model": "group.rolehistory", "fields": {"person": 112160, "group": 167, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 347, "model": "group.rolehistory", "fields": {"person": 19869, "group": 168, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 348, "model": "group.rolehistory", "fields": {"person": 112160, "group": 168, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 349, "model": "group.rolehistory", "fields": {"person": 19869, "group": 169, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 350, "model": "group.rolehistory", "fields": {"person": 2853, "group": 169, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 351, "model": "group.rolehistory", "fields": {"person": 112160, "group": 169, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 352, "model": "group.rolehistory", "fields": {"person": 105519, "group": 170, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 353, "model": "group.rolehistory", "fields": {"person": 19869, "group": 170, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 354, "model": "group.rolehistory", "fields": {"person": 2853, "group": 170, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 355, "model": "group.rolehistory", "fields": {"person": 112160, "group": 170, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 356, "model": "group.rolehistory", "fields": {"person": 101568, "group": 171, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 357, "model": "group.rolehistory", "fields": {"person": 105786, "group": 171, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 358, "model": "group.rolehistory", "fields": {"person": 112438, "group": 171, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 359, "model": "group.rolehistory", "fields": {"person": 105519, "group": 172, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 360, "model": "group.rolehistory", "fields": {"person": 19869, "group": 172, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 361, "model": "group.rolehistory", "fields": {"person": 2329, "group": 172, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 362, "model": "group.rolehistory", "fields": {"person": 2853, "group": 172, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 363, "model": "group.rolehistory", "fields": {"person": 112160, "group": 172, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 364, "model": "group.rolehistory", "fields": {"person": 108054, "group": 173, "name": "secr", "email": "jiangsheng@huawei.com"}},
{"pk": 365, "model": "group.rolehistory", "fields": {"person": 106461, "group": 173, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 366, "model": "group.rolehistory", "fields": {"person": 112160, "group": 173, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 367, "model": "group.rolehistory", "fields": {"person": 108054, "group": 174, "name": "secr", "email": "jiangsheng@huawei.com"}},
{"pk": 368, "model": "group.rolehistory", "fields": {"person": 106461, "group": 174, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 369, "model": "group.rolehistory", "fields": {"person": 111656, "group": 175, "name": "chair", "email": "warren@kumari.net"}},
{"pk": 370, "model": "group.rolehistory", "fields": {"person": 108304, "group": 175, "name": "chair", "email": "gvandeve@cisco.com"}},
{"pk": 371, "model": "group.rolehistory", "fields": {"person": 12620, "group": 176, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 372, "model": "group.rolehistory", "fields": {"person": 105113, "group": 176, "name": "execdir", "email": "jabley@hopcount.ca"}},
{"pk": 373, "model": "group.rolehistory", "fields": {"person": 109259, "group": 176, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 374, "model": "group.rolehistory", "fields": {"person": 12620, "group": 176, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 375, "model": "group.rolehistory", "fields": {"person": 102830, "group": 176, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 376, "model": "group.rolehistory", "fields": {"person": 12620, "group": 177, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 377, "model": "group.rolehistory", "fields": {"person": 109259, "group": 177, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 378, "model": "group.rolehistory", "fields": {"person": 12620, "group": 177, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 379, "model": "group.rolehistory", "fields": {"person": 102830, "group": 177, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 380, "model": "group.rolehistory", "fields": {"person": 12620, "group": 178, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 381, "model": "group.rolehistory", "fields": {"person": 102830, "group": 178, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 382, "model": "group.rolehistory", "fields": {"person": 109259, "group": 178, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 383, "model": "group.rolehistory", "fields": {"person": 12620, "group": 178, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 384, "model": "group.rolehistory", "fields": {"person": 102830, "group": 178, "name": "chair", "email": "mary.barnes@polycom.com"}},
{"pk": 385, "model": "group.rolehistory", "fields": {"person": 12620, "group": 179, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 386, "model": "group.rolehistory", "fields": {"person": 102830, "group": 179, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 387, "model": "group.rolehistory", "fields": {"person": 109259, "group": 179, "name": "chair", "email": "dow.street@linquest.com"}},
{"pk": 388, "model": "group.rolehistory", "fields": {"person": 12620, "group": 179, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 389, "model": "group.rolehistory", "fields": {"person": 12620, "group": 181, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 390, "model": "group.rolehistory", "fields": {"person": 102830, "group": 181, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 391, "model": "group.rolehistory", "fields": {"person": 12620, "group": 181, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 392, "model": "group.rolehistory", "fields": {"person": 12620, "group": 182, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 393, "model": "group.rolehistory", "fields": {"person": 102830, "group": 182, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 394, "model": "group.rolehistory", "fields": {"person": 108756, "group": 182, "name": "secr", "email": "cmorgan@amsl.com"}},
{"pk": 395, "model": "group.rolehistory", "fields": {"person": 12620, "group": 182, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 396, "model": "group.rolehistory", "fields": {"person": 2097, "group": 183, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 397, "model": "group.rolehistory", "fields": {"person": 5797, "group": 183, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 398, "model": "group.rolehistory", "fields": {"person": 12620, "group": 184, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 399, "model": "group.rolehistory", "fields": {"person": 102830, "group": 184, "name": "execdir", "email": "mary.barnes@polycom.com"}},
{"pk": 400, "model": "group.rolehistory", "fields": {"person": 12620, "group": 184, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 401, "model": "group.rolehistory", "fields": {"person": 2399, "group": 185, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 402, "model": "group.rolehistory", "fields": {"person": 23057, "group": 185, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 403, "model": "group.rolehistory", "fields": {"person": 105046, "group": 185, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 404, "model": "group.rolehistory", "fields": {"person": 21106, "group": 186, "name": "chair", "email": "j.schoenwaelder@jacobs-university.de"}},
{"pk": 405, "model": "group.rolehistory", "fields": {"person": 19587, "group": 186, "name": "chair", "email": "david.kessens@nsn.com"}},
{"pk": 406, "model": "group.rolehistory", "fields": {"person": 19790, "group": 187, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 407, "model": "group.rolehistory", "fields": {"person": 6842, "group": 187, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 408, "model": "group.rolehistory", "fields": {"person": 105537, "group": 187, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 409, "model": "group.rolehistory", "fields": {"person": 109178, "group": 188, "name": "chair", "email": "ajs@anvilwalrusden.com"}},
{"pk": 410, "model": "group.rolehistory", "fields": {"person": 106842, "group": 188, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 411, "model": "group.rolehistory", "fields": {"person": 106842, "group": 189, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 412, "model": "group.rolehistory", "fields": {"person": 100454, "group": 190, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 413, "model": "group.rolehistory", "fields": {"person": 106842, "group": 190, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 414, "model": "group.rolehistory", "fields": {"person": 100454, "group": 191, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 415, "model": "group.rolehistory", "fields": {"person": 106842, "group": 191, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 416, "model": "group.rolehistory", "fields": {"person": 106012, "group": 192, "name": "chair", "email": "marc.linsner@cisco.com"}},
{"pk": 417, "model": "group.rolehistory", "fields": {"person": 108049, "group": 192, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 418, "model": "group.rolehistory", "fields": {"person": 107084, "group": 192, "name": "chair", "email": "rmarshall@telecomsys.com"}},
{"pk": 419, "model": "group.rolehistory", "fields": {"person": 19483, "group": 193, "name": "chair", "email": "turners@ieca.com"}},
{"pk": 420, "model": "group.rolehistory", "fields": {"person": 19177, "group": 193, "name": "chair", "email": "stephen.farrell@cs.tcd.ie"}},
{"pk": 421, "model": "group.rolehistory", "fields": {"person": 19647, "group": 194, "name": "chair", "email": "dharkins@lounge.org"}},
{"pk": 422, "model": "group.rolehistory", "fields": {"person": 110934, "group": 194, "name": "chair", "email": "lnovikov@mitre.org"}},
{"pk": 423, "model": "group.rolehistory", "fields": {"person": 106186, "group": 195, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 424, "model": "group.rolehistory", "fields": {"person": 109800, "group": 195, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 425, "model": "group.rolehistory", "fields": {"person": 2097, "group": 196, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 426, "model": "group.rolehistory", "fields": {"person": 5797, "group": 196, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 427, "model": "group.rolehistory", "fields": {"person": 107292, "group": 197, "name": "liaiman", "email": "tsbsg2@itu.int"}},
{"pk": 428, "model": "group.rolehistory", "fields": {"person": 106224, "group": 197, "name": "liaiman", "email": "mmorrow@cisco.com"}},
{"pk": 429, "model": "group.rolehistory", "fields": {"person": 106842, "group": 198, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 430, "model": "group.rolehistory", "fields": {"person": 100454, "group": 200, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 431, "model": "group.rolehistory", "fields": {"person": 106842, "group": 200, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 432, "model": "group.rolehistory", "fields": {"person": 100454, "group": 201, "name": "chair", "email": "olaf@nlnetlabs.nl"}},
{"pk": 433, "model": "group.rolehistory", "fields": {"person": 102154, "group": 202, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 434, "model": "group.rolehistory", "fields": {"person": 106842, "group": 202, "name": "chair", "email": "msk@cloudmark.com"}},
{"pk": 435, "model": "group.rolehistory", "fields": {"person": 102154, "group": 203, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 436, "model": "group.rolehistory", "fields": {"person": 112772, "group": 204, "name": "auth", "email": "zhiyuan.hu@alcatel-sbell.com.cn"}},
{"pk": 437, "model": "group.rolehistory", "fields": {"person": 112613, "group": 204, "name": "auth", "email": "jerry.shih@att.com"}},
{"pk": 438, "model": "group.rolehistory", "fields": {"person": 113064, "group": 204, "name": "auth", "email": "thierry.berisot@telekom.de"}},
{"pk": 439, "model": "group.rolehistory", "fields": {"person": 113067, "group": 204, "name": "auth", "email": "laurentwalter.goix@telecomitalia.it"}},
{"pk": 440, "model": "group.rolehistory", "fields": {"person": 106842, "group": 204, "name": "liaiman", "email": "msk@cloudmark.com"}},
{"pk": 441, "model": "group.rolehistory", "fields": {"person": 112772, "group": 205, "name": "auth", "email": "zhiyuan.hu@alcatel-sbell.com.cn"}},
{"pk": 442, "model": "group.rolehistory", "fields": {"person": 112613, "group": 205, "name": "auth", "email": "jerry.shih@att.com"}},
{"pk": 443, "model": "group.rolehistory", "fields": {"person": 113064, "group": 205, "name": "auth", "email": "thierry.berisot@telekom.de"}},
{"pk": 444, "model": "group.rolehistory", "fields": {"person": 113067, "group": 205, "name": "auth", "email": "laurentwalter.goix@telecomitalia.it"}},
{"pk": 445, "model": "group.rolehistory", "fields": {"person": 106987, "group": 206, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 446, "model": "group.rolehistory", "fields": {"person": 18321, "group": 207, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 447, "model": "group.rolehistory", "fields": {"person": 105907, "group": 207, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 448, "model": "group.rolehistory", "fields": {"person": 18321, "group": 208, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 449, "model": "group.rolehistory", "fields": {"person": 105907, "group": 208, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 450, "model": "group.rolehistory", "fields": {"person": 21684, "group": 208, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 451, "model": "group.rolehistory", "fields": {"person": 110856, "group": 209, "name": "chair", "email": "wes@mti-systems.com"}},
{"pk": 452, "model": "group.rolehistory", "fields": {"person": 17253, "group": 209, "name": "chair", "email": "ietfdbh@comcast.net"}},
{"pk": 453, "model": "group.rolehistory", "fields": {"person": 110856, "group": 210, "name": "chair", "email": "wes@mti-systems.com"}},
{"pk": 454, "model": "group.rolehistory", "fields": {"person": 17253, "group": 210, "name": "chair", "email": "ietfdbh@comcast.net"}},
{"pk": 455, "model": "group.rolehistory", "fields": {"person": 105519, "group": 210, "name": "chair", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 456, "model": "group.rolehistory", "fields": {"person": 6699, "group": 211, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 457, "model": "group.rolehistory", "fields": {"person": 101568, "group": 211, "name": "chair", "email": "rbonica@juniper.net"}},
{"pk": 458, "model": "group.rolehistory", "fields": {"person": 6699, "group": 212, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 459, "model": "group.rolehistory", "fields": {"person": 101568, "group": 212, "name": "chair", "email": "rbonica@juniper.net"}},
{"pk": 460, "model": "group.rolehistory", "fields": {"person": 105682, "group": 212, "name": "chair", "email": "bclaise@cisco.com"}},
{"pk": 461, "model": "group.rolehistory", "fields": {"person": 112611, "group": 213, "name": "chair", "email": "eckelcu@cisco.com"}},
{"pk": 462, "model": "group.rolehistory", "fields": {"person": 107520, "group": 213, "name": "chair", "email": "shida@ntt-at.com"}},
{"pk": 463, "model": "group.rolehistory", "fields": {"person": 6699, "group": 214, "name": "chair", "email": "dromasca@avaya.com"}},
{"pk": 464, "model": "group.rolehistory", "fields": {"person": 112611, "group": 214, "name": "chair", "email": "eckelcu@cisco.com"}},
{"pk": 465, "model": "group.rolehistory", "fields": {"person": 107520, "group": 214, "name": "chair", "email": "shida@ntt-at.com"}},
{"pk": 466, "model": "group.rolehistory", "fields": {"person": 2097, "group": 216, "name": "chair", "email": "lear@cisco.com"}},
{"pk": 467, "model": "group.rolehistory", "fields": {"person": 5797, "group": 216, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 468, "model": "group.rolehistory", "fields": {"person": 5797, "group": 217, "name": "chair", "email": "smb@cs.columbia.edu"}},
{"pk": 469, "model": "group.rolehistory", "fields": {"person": 110406, "group": 219, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 470, "model": "group.rolehistory", "fields": {"person": 113270, "group": 220, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 471, "model": "group.rolehistory", "fields": {"person": 110406, "group": 220, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 472, "model": "group.rolehistory", "fields": {"person": 101214, "group": 221, "name": "chair", "email": "Rajeev.Koodli@gmail.com"}},
{"pk": 473, "model": "group.rolehistory", "fields": {"person": 106412, "group": 221, "name": "chair", "email": "suresh.krishnan@ericsson.com"}},
{"pk": 474, "model": "group.rolehistory", "fields": {"person": 113270, "group": 222, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 475, "model": "group.rolehistory", "fields": {"person": 110406, "group": 222, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 476, "model": "group.rolehistory", "fields": {"person": 110636, "group": 223, "name": "chair", "email": "michael.scharf@alcatel-lucent.com"}},
{"pk": 477, "model": "group.rolehistory", "fields": {"person": 15951, "group": 223, "name": "chair", "email": "nishida@sfc.wide.ad.jp"}},
{"pk": 478, "model": "group.rolehistory", "fields": {"person": 109321, "group": 223, "name": "chair", "email": "pasi.sarolahti@iki.fi"}},
{"pk": 479, "model": "group.rolehistory", "fields": {"person": 107415, "group": 224, "name": "techadv", "email": "xing@cernet.edu.cn"}},
{"pk": 480, "model": "group.rolehistory", "fields": {"person": 105328, "group": 224, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 481, "model": "group.rolehistory", "fields": {"person": 108848, "group": 224, "name": "chair", "email": "cuiyong@tsinghua.edu.cn"}},
{"pk": 482, "model": "group.rolehistory", "fields": {"person": 100038, "group": 225, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 483, "model": "group.rolehistory", "fields": {"person": 15927, "group": 225, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 484, "model": "group.rolehistory", "fields": {"person": 22933, "group": 226, "name": "chair", "email": "chopps@rawdofmt.org"}},
{"pk": 485, "model": "group.rolehistory", "fields": {"person": 23057, "group": 226, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 486, "model": "group.rolehistory", "fields": {"person": 100038, "group": 232, "name": "chair", "email": "dwing@cisco.com"}},
{"pk": 487, "model": "group.rolehistory", "fields": {"person": 15927, "group": 232, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 488, "model": "group.rolehistory", "fields": {"person": 110406, "group": 233, "name": "techadv", "email": "leifj@sunet.se"}},
{"pk": 489, "model": "group.rolehistory", "fields": {"person": 21097, "group": 233, "name": "chair", "email": "spencer.shepler@gmail.com"}},
{"pk": 490, "model": "group.rolehistory", "fields": {"person": 18587, "group": 233, "name": "chair", "email": "beepy@netapp.com"}},
{"pk": 491, "model": "group.rolehistory", "fields": {"person": 107998, "group": 234, "name": "chair", "email": "philip.eardley@bt.com"}},
{"pk": 492, "model": "group.rolehistory", "fields": {"person": 15951, "group": 234, "name": "chair", "email": "nishida@sfc.wide.ad.jp"}},
{"pk": 493, "model": "group.rolehistory", "fields": {"person": 113270, "group": 235, "name": "chair", "email": "moransar@cisco.com"}},
{"pk": 494, "model": "group.rolehistory", "fields": {"person": 110406, "group": 235, "name": "chair", "email": "leifj@sunet.se"}},
{"pk": 495, "model": "group.rolehistory", "fields": {"person": 107415, "group": 238, "name": "techadv", "email": "xing@cernet.edu.cn"}},
{"pk": 496, "model": "group.rolehistory", "fields": {"person": 108848, "group": 238, "name": "chair", "email": "cuiyong@tsinghua.edu.cn"}},
{"pk": 497, "model": "group.rolehistory", "fields": {"person": 102154, "group": 243, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 498, "model": "group.rolehistory", "fields": {"person": 106842, "group": 243, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 499, "model": "group.rolehistory", "fields": {"person": 102154, "group": 245, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 500, "model": "group.rolehistory", "fields": {"person": 4397, "group": 245, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 501, "model": "group.rolehistory", "fields": {"person": 111086, "group": 246, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 502, "model": "group.rolehistory", "fields": {"person": 112438, "group": 246, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 503, "model": "group.rolehistory", "fields": {"person": 111086, "group": 247, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 504, "model": "group.rolehistory", "fields": {"person": 101568, "group": 248, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 505, "model": "group.rolehistory", "fields": {"person": 105786, "group": 248, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 506, "model": "group.rolehistory", "fields": {"person": 112438, "group": 248, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 507, "model": "group.rolehistory", "fields": {"person": 101568, "group": 249, "name": "techadv", "email": "rbonica@juniper.net"}},
{"pk": 508, "model": "group.rolehistory", "fields": {"person": 105786, "group": 249, "name": "chair", "email": "matthew.bocci@alcatel-lucent.com"}},
{"pk": 509, "model": "group.rolehistory", "fields": {"person": 112438, "group": 249, "name": "chair", "email": "bschlies@cisco.com"}},
{"pk": 510, "model": "group.rolehistory", "fields": {"person": 112438, "group": 249, "name": "chair", "email": "bensons@queuefull.net"}},
{"pk": 511, "model": "group.rolehistory", "fields": {"person": 102154, "group": 250, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 512, "model": "group.rolehistory", "fields": {"person": 4397, "group": 250, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 513, "model": "group.rolehistory", "fields": {"person": 104331, "group": 251, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 514, "model": "group.rolehistory", "fields": {"person": 104267, "group": 251, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 515, "model": "group.rolehistory", "fields": {"person": 106842, "group": 252, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 516, "model": "group.rolehistory", "fields": {"person": 107491, "group": 254, "name": "chair", "email": "Salvatore.Loreto@ericsson.com"}},
{"pk": 517, "model": "group.rolehistory", "fields": {"person": 102154, "group": 254, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 518, "model": "group.rolehistory", "fields": {"person": 106842, "group": 254, "name": "chair", "email": "superuser@gmail.com"}},
{"pk": 519, "model": "group.rolehistory", "fields": {"person": 20209, "group": 256, "name": "chair", "email": "csp@csperkins.org"}},
{"pk": 520, "model": "group.rolehistory", "fields": {"person": 113031, "group": 257, "name": "auth", "email": "gunilla.berndtsson@ericsson.com"}},
{"pk": 521, "model": "group.rolehistory", "fields": {"person": 113032, "group": 257, "name": "auth", "email": "catherine.quinquis@orange.com"}},
{"pk": 522, "model": "group.rolehistory", "fields": {"person": 2324, "group": 260, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 523, "model": "group.rolehistory", "fields": {"person": 104807, "group": 260, "name": "chair", "email": "ietf@cdl.asgaard.org"}},
{"pk": 524, "model": "group.rolehistory", "fields": {"person": 101104, "group": 260, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 525, "model": "group.rolehistory", "fields": {"person": 2324, "group": 261, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 526, "model": "group.rolehistory", "fields": {"person": 101104, "group": 261, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 527, "model": "group.rolehistory", "fields": {"person": 108295, "group": 263, "name": "chair", "email": "mlepinski@gmail.com"}},
{"pk": 528, "model": "group.rolehistory", "fields": {"person": 105097, "group": 265, "name": "chair", "email": "drage@alcatel-lucent.com"}},
{"pk": 529, "model": "group.rolehistory", "fields": {"person": 110842, "group": 265, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 530, "model": "group.rolehistory", "fields": {"person": 110842, "group": 266, "name": "chair", "email": "gsalguei@cisco.com"}},
{"pk": 531, "model": "group.rolehistory", "fields": {"person": 110721, "group": 268, "name": "chair", "email": "ted.ietf@gmail.com"}},
{"pk": 532, "model": "group.rolehistory", "fields": {"person": 106412, "group": 269, "name": "chair", "email": "nomcom-chair@ietf.org"}},
{"pk": 533, "model": "group.rolehistory", "fields": {"person": 104331, "group": 270, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 534, "model": "group.rolehistory", "fields": {"person": 104267, "group": 270, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 535, "model": "group.rolehistory", "fields": {"person": 110070, "group": 270, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 536, "model": "group.rolehistory", "fields": {"person": 106186, "group": 271, "name": "chair", "email": "julien.ietf@gmail.com"}},
{"pk": 537, "model": "group.rolehistory", "fields": {"person": 106412, "group": 271, "name": "chair", "email": "suresh.krishnan@ericsson.com"}},
{"pk": 538, "model": "group.rolehistory", "fields": {"person": 105519, "group": 272, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 539, "model": "group.rolehistory", "fields": {"person": 19869, "group": 272, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 540, "model": "group.rolehistory", "fields": {"person": 2329, "group": 272, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 541, "model": "group.rolehistory", "fields": {"person": 2853, "group": 272, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 542, "model": "group.rolehistory", "fields": {"person": 112160, "group": 272, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 543, "model": "group.rolehistory", "fields": {"person": 107923, "group": 273, "name": "chair", "email": "christer.holmberg@ericsson.com"}},
{"pk": 544, "model": "group.rolehistory", "fields": {"person": 108963, "group": 273, "name": "chair", "email": "vpascual@acmepacket.com"}},
{"pk": 545, "model": "group.rolehistory", "fields": {"person": 2324, "group": 275, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 546, "model": "group.rolehistory", "fields": {"person": 106638, "group": 275, "name": "chair", "email": "slblake@petri-meat.com"}},
{"pk": 547, "model": "group.rolehistory", "fields": {"person": 105728, "group": 276, "name": "chair", "email": "gurtov@cs.helsinki.fi"}},
{"pk": 548, "model": "group.rolehistory", "fields": {"person": 107003, "group": 276, "name": "chair", "email": "thomas.r.henderson@boeing.com"}},
{"pk": 549, "model": "group.rolehistory", "fields": {"person": 106745, "group": 277, "name": "secr", "email": "ynir@checkpoint.com"}},
{"pk": 550, "model": "group.rolehistory", "fields": {"person": 19483, "group": 277, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 551, "model": "group.rolehistory", "fields": {"person": 106405, "group": 277, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 552, "model": "group.rolehistory", "fields": {"person": 102154, "group": 277, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 553, "model": "group.rolehistory", "fields": {"person": 110910, "group": 279, "name": "chair", "email": "ietf@augustcellars.com"}},
{"pk": 554, "model": "group.rolehistory", "fields": {"person": 6771, "group": 279, "name": "chair", "email": "tony@att.com"}},
{"pk": 555, "model": "group.rolehistory", "fields": {"person": 110910, "group": 280, "name": "chair", "email": "ietf@augustcellars.com"}},
{"pk": 556, "model": "group.rolehistory", "fields": {"person": 4857, "group": 280, "name": "chair", "email": "odonoghue@isoc.org"}},
{"pk": 557, "model": "group.rolehistory", "fields": {"person": 6771, "group": 280, "name": "chair", "email": "tony@att.com"}},
{"pk": 558, "model": "group.rolehistory", "fields": {"person": 106988, "group": 281, "name": "chair", "email": "glenzorn@gmail.com"}},
{"pk": 559, "model": "group.rolehistory", "fields": {"person": 107598, "group": 281, "name": "chair", "email": "tena@huawei.com"}},
{"pk": 560, "model": "group.rolehistory", "fields": {"person": 112773, "group": 283, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 561, "model": "group.rolehistory", "fields": {"person": 112773, "group": 284, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 562, "model": "group.rolehistory", "fields": {"person": 21072, "group": 284, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 563, "model": "group.rolehistory", "fields": {"person": 112773, "group": 285, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 564, "model": "group.rolehistory", "fields": {"person": 21072, "group": 285, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 565, "model": "group.rolehistory", "fields": {"person": 20580, "group": 285, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 566, "model": "group.rolehistory", "fields": {"person": 112773, "group": 286, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 567, "model": "group.rolehistory", "fields": {"person": 21072, "group": 286, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 568, "model": "group.rolehistory", "fields": {"person": 20580, "group": 286, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 569, "model": "group.rolehistory", "fields": {"person": 107190, "group": 286, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 570, "model": "group.rolehistory", "fields": {"person": 112773, "group": 287, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 571, "model": "group.rolehistory", "fields": {"person": 21072, "group": 287, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 572, "model": "group.rolehistory", "fields": {"person": 20580, "group": 287, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 573, "model": "group.rolehistory", "fields": {"person": 107190, "group": 287, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 574, "model": "group.rolehistory", "fields": {"person": 21226, "group": 287, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 575, "model": "group.rolehistory", "fields": {"person": 112773, "group": 288, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 576, "model": "group.rolehistory", "fields": {"person": 21072, "group": 288, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 577, "model": "group.rolehistory", "fields": {"person": 20580, "group": 288, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 578, "model": "group.rolehistory", "fields": {"person": 21226, "group": 288, "name": "chair", "email": "falk@bbn.com"}},
{"pk": 579, "model": "group.rolehistory", "fields": {"person": 112773, "group": 289, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 580, "model": "group.rolehistory", "fields": {"person": 21072, "group": 289, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 581, "model": "group.rolehistory", "fields": {"person": 20580, "group": 289, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 582, "model": "group.rolehistory", "fields": {"person": 112773, "group": 290, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 583, "model": "group.rolehistory", "fields": {"person": 21072, "group": 290, "name": "atlarge", "email": "jari.arkko@piuha.net"}},
{"pk": 584, "model": "group.rolehistory", "fields": {"person": 20580, "group": 290, "name": "atlarge", "email": "mallman@icir.org"}},
{"pk": 585, "model": "group.rolehistory", "fields": {"person": 107190, "group": 290, "name": "atlarge", "email": "spencer@wonderhamster.org"}},
{"pk": 586, "model": "group.rolehistory", "fields": {"person": 10083, "group": 291, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 587, "model": "group.rolehistory", "fields": {"person": 104278, "group": 291, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 588, "model": "group.rolehistory", "fields": {"person": 20209, "group": 292, "name": "chair", "email": "csp@csperkins.org"}},
{"pk": 589, "model": "group.rolehistory", "fields": {"person": 103877, "group": 292, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 590, "model": "group.rolehistory", "fields": {"person": 109800, "group": 295, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 591, "model": "group.rolehistory", "fields": {"person": 107737, "group": 295, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 592, "model": "group.rolehistory", "fields": {"person": 100754, "group": 296, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 593, "model": "group.rolehistory", "fields": {"person": 105873, "group": 296, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 594, "model": "group.rolehistory", "fields": {"person": 104294, "group": 296, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 595, "model": "group.rolehistory", "fields": {"person": 100754, "group": 297, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 596, "model": "group.rolehistory", "fields": {"person": 104294, "group": 297, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 597, "model": "group.rolehistory", "fields": {"person": 108368, "group": 298, "name": "chair", "email": "abegen@cisco.com"}},
{"pk": 598, "model": "group.rolehistory", "fields": {"person": 105873, "group": 298, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 599, "model": "group.rolehistory", "fields": {"person": 108368, "group": 299, "name": "chair", "email": "abegen@cisco.com"}},
{"pk": 600, "model": "group.rolehistory", "fields": {"person": 109800, "group": 300, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 601, "model": "group.rolehistory", "fields": {"person": 107737, "group": 300, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 602, "model": "group.rolehistory", "fields": {"person": 109800, "group": 301, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 603, "model": "group.rolehistory", "fields": {"person": 107737, "group": 301, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 604, "model": "group.rolehistory", "fields": {"person": 109800, "group": 302, "name": "chair", "email": "jouni.korhonen@nsn.com"}},
{"pk": 605, "model": "group.rolehistory", "fields": {"person": 107737, "group": 302, "name": "chair", "email": "lionel.morand@orange.com"}},
{"pk": 606, "model": "group.rolehistory", "fields": {"person": 109802, "group": 308, "name": "chair", "email": "alvaro.retana@hp.com"}},
{"pk": 607, "model": "group.rolehistory", "fields": {"person": 106742, "group": 308, "name": "chair", "email": "akatlas@gmail.com"}},
{"pk": 608, "model": "group.rolehistory", "fields": {"person": 106742, "group": 309, "name": "chair", "email": "akatlas@gmail.com"}},
{"pk": 609, "model": "group.rolehistory", "fields": {"person": 108081, "group": 311, "name": "secr", "email": "junbi@tsinghua.edu.cn"}},
{"pk": 610, "model": "group.rolehistory", "fields": {"person": 107482, "group": 311, "name": "techadv", "email": "jianping@cernet.edu.cn"}},
{"pk": 611, "model": "group.rolehistory", "fields": {"person": 108428, "group": 311, "name": "chair", "email": "jeanmichel.combes@gmail.com"}},
{"pk": 612, "model": "group.rolehistory", "fields": {"person": 108396, "group": 311, "name": "chair", "email": "christian.vogt@ericsson.com"}},
{"pk": 613, "model": "group.rolehistory", "fields": {"person": 103881, "group": 315, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 614, "model": "group.rolehistory", "fields": {"person": 19790, "group": 316, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 615, "model": "group.rolehistory", "fields": {"person": 6842, "group": 316, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 616, "model": "group.rolehistory", "fields": {"person": 105537, "group": 316, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 617, "model": "group.rolehistory", "fields": {"person": 105791, "group": 317, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 618, "model": "group.rolehistory", "fields": {"person": 11843, "group": 317, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 619, "model": "group.rolehistory", "fields": {"person": 100754, "group": 318, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 620, "model": "group.rolehistory", "fields": {"person": 105097, "group": 318, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 621, "model": "group.rolehistory", "fields": {"person": 105873, "group": 318, "name": "chair", "email": "even.roni@huawei.com"}},
{"pk": 622, "model": "group.rolehistory", "fields": {"person": 100754, "group": 319, "name": "secr", "email": "tom.taylor.stds@gmail.com"}},
{"pk": 623, "model": "group.rolehistory", "fields": {"person": 105097, "group": 319, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 624, "model": "group.rolehistory", "fields": {"person": 19790, "group": 322, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 625, "model": "group.rolehistory", "fields": {"person": 6842, "group": 322, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 626, "model": "group.rolehistory", "fields": {"person": 105537, "group": 322, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 627, "model": "group.rolehistory", "fields": {"person": 19790, "group": 326, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 628, "model": "group.rolehistory", "fields": {"person": 6842, "group": 326, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 629, "model": "group.rolehistory", "fields": {"person": 105537, "group": 326, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 630, "model": "group.rolehistory", "fields": {"person": 19790, "group": 327, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 631, "model": "group.rolehistory", "fields": {"person": 6842, "group": 327, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 632, "model": "group.rolehistory", "fields": {"person": 105537, "group": 327, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 633, "model": "group.rolehistory", "fields": {"person": 103881, "group": 328, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 634, "model": "group.rolehistory", "fields": {"person": 103881, "group": 329, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 635, "model": "group.rolehistory", "fields": {"person": 107729, "group": 330, "name": "liaiman", "email": "Eric.Gray@Ericsson.com"}},
{"pk": 636, "model": "group.rolehistory", "fields": {"person": 107599, "group": 330, "name": "auth", "email": "tony@jeffree.co.uk"}},
{"pk": 637, "model": "group.rolehistory", "fields": {"person": 106897, "group": 331, "name": "techadv", "email": "stewe@stewe.org"}},
{"pk": 638, "model": "group.rolehistory", "fields": {"person": 105791, "group": 331, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 639, "model": "group.rolehistory", "fields": {"person": 2250, "group": 331, "name": "chair", "email": "jdrosen@jdrosen.net"}},
{"pk": 640, "model": "group.rolehistory", "fields": {"person": 102154, "group": 332, "name": "techadv", "email": "alexey.melnikov@isode.com"}},
{"pk": 641, "model": "group.rolehistory", "fields": {"person": 109430, "group": 332, "name": "chair", "email": "haibin.song@huawei.com"}},
{"pk": 642, "model": "group.rolehistory", "fields": {"person": 2690, "group": 332, "name": "chair", "email": "Richard_Woundy@cable.comcast.com"}},
{"pk": 643, "model": "group.rolehistory", "fields": {"person": 2324, "group": 333, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 644, "model": "group.rolehistory", "fields": {"person": 104807, "group": 333, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 645, "model": "group.rolehistory", "fields": {"person": 101104, "group": 333, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 646, "model": "group.rolehistory", "fields": {"person": 19790, "group": 334, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 647, "model": "group.rolehistory", "fields": {"person": 6842, "group": 334, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 648, "model": "group.rolehistory", "fields": {"person": 105537, "group": 334, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 649, "model": "group.rolehistory", "fields": {"person": 19790, "group": 336, "name": "techadv", "email": "tim.polk@nist.gov"}},
{"pk": 650, "model": "group.rolehistory", "fields": {"person": 6842, "group": 336, "name": "chair", "email": "bertietf@bwijnen.net"}},
{"pk": 651, "model": "group.rolehistory", "fields": {"person": 105537, "group": 336, "name": "chair", "email": "mehmet.ersue@nsn.com"}},
{"pk": 652, "model": "group.rolehistory", "fields": {"person": 112773, "group": 338, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 653, "model": "group.rolehistory", "fields": {"person": 112330, "group": 338, "name": "chair", "email": "mirja.kuehlewind@ikr.uni-stuttgart.de"}},
{"pk": 654, "model": "group.rolehistory", "fields": {"person": 112773, "group": 339, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 655, "model": "group.rolehistory", "fields": {"person": 112330, "group": 339, "name": "chair", "email": "mirja.kuehlewind@ikr.uni-stuttgart.de"}},
{"pk": 656, "model": "group.rolehistory", "fields": {"person": 18321, "group": 340, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 657, "model": "group.rolehistory", "fields": {"person": 21684, "group": 340, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 658, "model": "group.rolehistory", "fields": {"person": 18321, "group": 341, "name": "chair", "email": "presnick@qualcomm.com"}},
{"pk": 659, "model": "group.rolehistory", "fields": {"person": 21684, "group": 341, "name": "chair", "email": "barryleiba@computer.org"}},
{"pk": 660, "model": "group.rolehistory", "fields": {"person": 18321, "group": 341, "name": "chair", "email": "presnick@qti.qualcomm.com"}},
{"pk": 661, "model": "group.rolehistory", "fields": {"person": 18321, "group": 342, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 662, "model": "group.rolehistory", "fields": {"person": 21684, "group": 342, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 663, "model": "group.rolehistory", "fields": {"person": 18321, "group": 343, "name": "pre-ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 664, "model": "group.rolehistory", "fields": {"person": 18321, "group": 343, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 665, "model": "group.rolehistory", "fields": {"person": 21684, "group": 343, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 666, "model": "group.rolehistory", "fields": {"person": 18321, "group": 344, "name": "pre-ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 667, "model": "group.rolehistory", "fields": {"person": 18321, "group": 344, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 668, "model": "group.rolehistory", "fields": {"person": 21684, "group": 344, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 669, "model": "group.rolehistory", "fields": {"person": 18321, "group": 345, "name": "ad", "email": "presnick@qti.qualcomm.com"}},
{"pk": 670, "model": "group.rolehistory", "fields": {"person": 18321, "group": 345, "name": "ad", "email": "presnick@qualcomm.com"}},
{"pk": 671, "model": "group.rolehistory", "fields": {"person": 21684, "group": 345, "name": "ad", "email": "barryleiba@computer.org"}},
{"pk": 672, "model": "group.rolehistory", "fields": {"person": 2324, "group": 346, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 673, "model": "group.rolehistory", "fields": {"person": 104807, "group": 346, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 674, "model": "group.rolehistory", "fields": {"person": 101104, "group": 346, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 675, "model": "group.rolehistory", "fields": {"person": 103881, "group": 347, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 676, "model": "group.rolehistory", "fields": {"person": 23057, "group": 349, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 677, "model": "group.rolehistory", "fields": {"person": 111584, "group": 354, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 678, "model": "group.rolehistory", "fields": {"person": 105992, "group": 356, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 679, "model": "group.rolehistory", "fields": {"person": 102154, "group": 358, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 680, "model": "group.rolehistory", "fields": {"person": 103881, "group": 358, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 681, "model": "group.rolehistory", "fields": {"person": 102154, "group": 359, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 682, "model": "group.rolehistory", "fields": {"person": 103881, "group": 359, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 683, "model": "group.rolehistory", "fields": {"person": 103881, "group": 360, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 684, "model": "group.rolehistory", "fields": {"person": 8698, "group": 362, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 685, "model": "group.rolehistory", "fields": {"person": 15448, "group": 365, "name": "chair", "email": "shanna@juniper.net"}},
{"pk": 686, "model": "group.rolehistory", "fields": {"person": 2399, "group": 366, "name": "techadv", "email": "dkatz@juniper.net"}},
{"pk": 687, "model": "group.rolehistory", "fields": {"person": 23057, "group": 366, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 688, "model": "group.rolehistory", "fields": {"person": 105046, "group": 366, "name": "chair", "email": "jhaas@pfrc.org"}},
{"pk": 689, "model": "group.rolehistory", "fields": {"person": 103881, "group": 367, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 690, "model": "group.rolehistory", "fields": {"person": 101214, "group": 368, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 691, "model": "group.rolehistory", "fields": {"person": 103283, "group": 368, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 692, "model": "group.rolehistory", "fields": {"person": 101214, "group": 369, "name": "chair", "email": "rkoodli@cisco.com"}},
{"pk": 693, "model": "group.rolehistory", "fields": {"person": 103283, "group": 369, "name": "chair", "email": "basavaraj.patil@nokia.com"}},
{"pk": 694, "model": "group.rolehistory", "fields": {"person": 103283, "group": 369, "name": "chair", "email": "bpatil1+ietf@gmail.com"}},
{"pk": 695, "model": "group.rolehistory", "fields": {"person": 103881, "group": 370, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 696, "model": "group.rolehistory", "fields": {"person": 102191, "group": 371, "name": "chair", "email": "tlyu@mit.edu"}},
{"pk": 697, "model": "group.rolehistory", "fields": {"person": 107956, "group": 371, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 698, "model": "group.rolehistory", "fields": {"person": 102154, "group": 371, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 699, "model": "group.rolehistory", "fields": {"person": 104978, "group": 372, "name": "chair", "email": "jhutz@cmu.edu"}},
{"pk": 700, "model": "group.rolehistory", "fields": {"person": 106376, "group": 372, "name": "chair", "email": "larry.zhu@microsoft.com"}},
{"pk": 701, "model": "group.rolehistory", "fields": {"person": 103048, "group": 372, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 702, "model": "group.rolehistory", "fields": {"person": 103881, "group": 373, "name": "chair", "email": "mnot@pobox.com"}},
{"pk": 703, "model": "group.rolehistory", "fields": {"person": 107729, "group": 374, "name": "liaiman", "email": "Eric.Gray@Ericsson.com"}},
{"pk": 704, "model": "group.rolehistory", "fields": {"person": 107599, "group": 374, "name": "auth", "email": "tony@jeffree.co.uk"}},
{"pk": 705, "model": "group.rolehistory", "fields": {"person": 114106, "group": 374, "name": "auth", "email": "r.b.marks@ieee.org"}},
{"pk": 706, "model": "group.rolehistory", "fields": {"person": 104851, "group": 375, "name": "chair", "email": "Kathleen.Moriarty@emc.com"}},
{"pk": 707, "model": "group.rolehistory", "fields": {"person": 113031, "group": 376, "name": "auth", "email": "gunilla.berndtsson@ericsson.com"}},
{"pk": 708, "model": "group.rolehistory", "fields": {"person": 113032, "group": 376, "name": "auth", "email": "catherine.quinquis@orange.com"}},
{"pk": 709, "model": "group.rolehistory", "fields": {"person": 113672, "group": 376, "name": "auth", "email": "sarah.scott@itu.int"}},
{"pk": 710, "model": "group.rolehistory", "fields": {"person": 111584, "group": 377, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 711, "model": "group.rolehistory", "fields": {"person": 106462, "group": 378, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 712, "model": "group.rolehistory", "fields": {"person": 107067, "group": 378, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 713, "model": "group.rolehistory", "fields": {"person": 105024, "group": 378, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 714, "model": "group.rolehistory", "fields": {"person": 107258, "group": 378, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 715, "model": "group.rolehistory", "fields": {"person": 106345, "group": 378, "name": "chair", "email": "Menachem.Dodge@ecitele.com"}},
{"pk": 716, "model": "group.rolehistory", "fields": {"person": 106462, "group": 379, "name": "editor", "email": "edward.beili@actelis.com"}},
{"pk": 717, "model": "group.rolehistory", "fields": {"person": 107067, "group": 379, "name": "editor", "email": "moti.Morgenstern@ecitele.com"}},
{"pk": 718, "model": "group.rolehistory", "fields": {"person": 105024, "group": 379, "name": "editor", "email": "scott.baillie@nec.com.au"}},
{"pk": 719, "model": "group.rolehistory", "fields": {"person": 107258, "group": 379, "name": "editor", "email": "umberto.bonollo@nec.com.au"}},
{"pk": 720, "model": "group.rolehistory", "fields": {"person": 106199, "group": 380, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 721, "model": "group.rolehistory", "fields": {"person": 108833, "group": 380, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 722, "model": "group.rolehistory", "fields": {"person": 108822, "group": 380, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 723, "model": "group.rolehistory", "fields": {"person": 3862, "group": 380, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 724, "model": "group.rolehistory", "fields": {"person": 106199, "group": 381, "name": "secr", "email": "Wassim.Haddad@ericsson.com"}},
{"pk": 725, "model": "group.rolehistory", "fields": {"person": 108833, "group": 381, "name": "secr", "email": "luigi@net.t-labs.tu-berlin.de"}},
{"pk": 726, "model": "group.rolehistory", "fields": {"person": 108822, "group": 381, "name": "chair", "email": "terry.manderson@icann.org"}},
{"pk": 727, "model": "group.rolehistory", "fields": {"person": 3862, "group": 381, "name": "chair", "email": "jmh@joelhalpern.com"}},
{"pk": 728, "model": "group.rolehistory", "fields": {"person": 108833, "group": 381, "name": "secr", "email": "ggx@gigix.net"}},
{"pk": 729, "model": "group.rolehistory", "fields": {"person": 2324, "group": 382, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 730, "model": "group.rolehistory", "fields": {"person": 104807, "group": 382, "name": "chair", "email": "christopher.liljenstolpe@bigswitch.com"}},
{"pk": 731, "model": "group.rolehistory", "fields": {"person": 101104, "group": 382, "name": "chair", "email": "melinda.shore@gmail.com"}},
{"pk": 732, "model": "group.rolehistory", "fields": {"person": 107956, "group": 384, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 733, "model": "group.rolehistory", "fields": {"person": 111163, "group": 384, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 734, "model": "group.rolehistory", "fields": {"person": 103048, "group": 384, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 735, "model": "group.rolehistory", "fields": {"person": 107956, "group": 385, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 736, "model": "group.rolehistory", "fields": {"person": 111163, "group": 385, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 737, "model": "group.rolehistory", "fields": {"person": 103048, "group": 385, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 738, "model": "group.rolehistory", "fields": {"person": 111086, "group": 386, "name": "chair", "email": "ldunbar@huawei.com"}},
{"pk": 739, "model": "group.rolehistory", "fields": {"person": 112438, "group": 386, "name": "chair", "email": "bensons@queuefull.net"}},
{"pk": 740, "model": "group.rolehistory", "fields": {"person": 105328, "group": 388, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 741, "model": "group.rolehistory", "fields": {"person": 15927, "group": 388, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 742, "model": "group.rolehistory", "fields": {"person": 105328, "group": 389, "name": "chair", "email": "adurand@juniper.net"}},
{"pk": 743, "model": "group.rolehistory", "fields": {"person": 15927, "group": 389, "name": "chair", "email": "dthaler@microsoft.com"}},
{"pk": 744, "model": "group.rolehistory", "fields": {"person": 104985, "group": 389, "name": "chair", "email": "repenno@cisco.com"}},
{"pk": 745, "model": "group.rolehistory", "fields": {"person": 106897, "group": 390, "name": "liaiman", "email": "stewe@stewe.org"}},
{"pk": 746, "model": "group.rolehistory", "fields": {"person": 112510, "group": 391, "name": "liaiman", "email": "nan@metroethernetforum.org"}},
{"pk": 747, "model": "group.rolehistory", "fields": {"person": 112511, "group": 391, "name": "liaiman", "email": "bill@metroethernetforum.net"}},
{"pk": 748, "model": "group.rolehistory", "fields": {"person": 112512, "group": 391, "name": "liaiman", "email": "rraghu@ciena.com"}},
{"pk": 749, "model": "group.rolehistory", "fields": {"person": 105907, "group": 392, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 750, "model": "group.rolehistory", "fields": {"person": 17681, "group": 394, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 751, "model": "group.rolehistory", "fields": {"person": 109800, "group": 394, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 752, "model": "group.rolehistory", "fields": {"person": 111434, "group": 394, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 753, "model": "group.rolehistory", "fields": {"person": 17681, "group": 395, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 754, "model": "group.rolehistory", "fields": {"person": 109800, "group": 395, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 755, "model": "group.rolehistory", "fields": {"person": 111434, "group": 395, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 756, "model": "group.rolehistory", "fields": {"person": 17681, "group": 396, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 757, "model": "group.rolehistory", "fields": {"person": 109800, "group": 396, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 758, "model": "group.rolehistory", "fields": {"person": 111434, "group": 396, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 759, "model": "group.rolehistory", "fields": {"person": 17681, "group": 397, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 760, "model": "group.rolehistory", "fields": {"person": 109800, "group": 397, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 761, "model": "group.rolehistory", "fields": {"person": 111434, "group": 397, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 762, "model": "group.rolehistory", "fields": {"person": 17681, "group": 398, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 763, "model": "group.rolehistory", "fields": {"person": 109800, "group": 398, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 764, "model": "group.rolehistory", "fields": {"person": 111434, "group": 398, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 765, "model": "group.rolehistory", "fields": {"person": 104196, "group": 399, "name": "chair", "email": "eburger@standardstrack.com"}},
{"pk": 766, "model": "group.rolehistory", "fields": {"person": 773, "group": 399, "name": "chair", "email": "oran@cisco.com"}},
{"pk": 767, "model": "group.rolehistory", "fields": {"person": 2324, "group": 400, "name": "chair", "email": "sob@harvard.edu"}},
{"pk": 768, "model": "group.rolehistory", "fields": {"person": 107131, "group": 400, "name": "chair", "email": "martin.thomson@gmail.com"}},
{"pk": 769, "model": "group.rolehistory", "fields": {"person": 108717, "group": 401, "name": "chair", "email": "simon.perreault@viagenie.ca"}},
{"pk": 770, "model": "group.rolehistory", "fields": {"person": 21684, "group": 402, "name": "secr", "email": "barryleiba@computer.org"}},
{"pk": 771, "model": "group.rolehistory", "fields": {"person": 101054, "group": 402, "name": "chair", "email": "cyrus@daboo.name"}},
{"pk": 772, "model": "group.rolehistory", "fields": {"person": 110093, "group": 402, "name": "chair", "email": "aaron@serendipity.cx"}},
{"pk": 773, "model": "group.rolehistory", "fields": {"person": 104331, "group": 403, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 774, "model": "group.rolehistory", "fields": {"person": 104267, "group": 403, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 775, "model": "group.rolehistory", "fields": {"person": 110070, "group": 403, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 776, "model": "group.rolehistory", "fields": {"person": 104331, "group": 404, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 777, "model": "group.rolehistory", "fields": {"person": 104267, "group": 404, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 778, "model": "group.rolehistory", "fields": {"person": 19483, "group": 405, "name": "techadv", "email": "turners@ieca.com"}},
{"pk": 779, "model": "group.rolehistory", "fields": {"person": 106405, "group": 405, "name": "chair", "email": "tobias.gondrom@gondrom.org"}},
{"pk": 780, "model": "group.rolehistory", "fields": {"person": 102154, "group": 405, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 781, "model": "group.rolehistory", "fields": {"person": 106745, "group": 405, "name": "chair", "email": "ynir@checkpoint.com"}},
{"pk": 782, "model": "group.rolehistory", "fields": {"person": 23057, "group": 406, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 783, "model": "group.rolehistory", "fields": {"person": 103539, "group": 406, "name": "chair", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 784, "model": "group.rolehistory", "fields": {"person": 109727, "group": 407, "name": "chair", "email": "muraris@microsoft.com"}},
{"pk": 785, "model": "group.rolehistory", "fields": {"person": 103877, "group": 407, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 786, "model": "group.rolehistory", "fields": {"person": 103877, "group": 408, "name": "chair", "email": "michawe@ifi.uio.no"}},
{"pk": 787, "model": "group.rolehistory", "fields": {"person": 12620, "group": 411, "name": "chair", "email": "iab-chair@ietf.org"}},
{"pk": 788, "model": "group.rolehistory", "fields": {"person": 102830, "group": 411, "name": "execdir", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 789, "model": "group.rolehistory", "fields": {"person": 102830, "group": 411, "name": "delegate", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 790, "model": "group.rolehistory", "fields": {"person": 101818, "group": 412, "name": "chair", "email": "matt@internet2.edu"}},
{"pk": 791, "model": "group.rolehistory", "fields": {"person": 100603, "group": 412, "name": "chair", "email": "henk@uijterwaal.nl"}},
{"pk": 792, "model": "group.rolehistory", "fields": {"person": 100603, "group": 413, "name": "chair", "email": "henk@uijterwaal.nl"}},
{"pk": 793, "model": "group.rolehistory", "fields": {"person": 113573, "group": 413, "name": "chair", "email": "bill@wjcerveny.com"}},
{"pk": 794, "model": "group.rolehistory", "fields": {"person": 101818, "group": 413, "name": "chair", "email": "matt@internet2.edu"}},
{"pk": 795, "model": "group.rolehistory", "fields": {"person": 109354, "group": 413, "name": "chair", "email": "trammell@tik.ee.ethz.ch"}},
{"pk": 796, "model": "group.rolehistory", "fields": {"person": 101742, "group": 414, "name": "chair", "email": "tphelan@sonusnet.com"}},
{"pk": 797, "model": "group.rolehistory", "fields": {"person": 109321, "group": 414, "name": "chair", "email": "pasi.sarolahti@iki.fi"}},
{"pk": 798, "model": "group.rolehistory", "fields": {"person": 8209, "group": 415, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 799, "model": "group.rolehistory", "fields": {"person": 103156, "group": 415, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 800, "model": "group.rolehistory", "fields": {"person": 103156, "group": 416, "name": "chair", "email": "david.black@emc.com"}},
{"pk": 801, "model": "group.rolehistory", "fields": {"person": 8209, "group": 416, "name": "chair", "email": "ttalpey@microsoft.com"}},
{"pk": 802, "model": "group.rolehistory", "fields": {"person": 103156, "group": 416, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 803, "model": "group.rolehistory", "fields": {"person": 104331, "group": 417, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 804, "model": "group.rolehistory", "fields": {"person": 104267, "group": 417, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 805, "model": "group.rolehistory", "fields": {"person": 103156, "group": 417, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 806, "model": "group.rolehistory", "fields": {"person": 104331, "group": 418, "name": "chair", "email": "gorry@erg.abdn.ac.uk"}},
{"pk": 807, "model": "group.rolehistory", "fields": {"person": 103156, "group": 418, "name": "chair", "email": "david.black@emc.com"}},
{"pk": 808, "model": "group.rolehistory", "fields": {"person": 104267, "group": 418, "name": "chair", "email": "jmpolk@cisco.com"}},
{"pk": 809, "model": "group.rolehistory", "fields": {"person": 103156, "group": 418, "name": "chair", "email": "black_david@emc.com"}},
{"pk": 810, "model": "group.rolehistory", "fields": {"person": 10083, "group": 419, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 811, "model": "group.rolehistory", "fields": {"person": 104278, "group": 419, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 812, "model": "group.rolehistory", "fields": {"person": 17681, "group": 420, "name": "techadv", "email": "paul.congdon@hp.com"}},
{"pk": 813, "model": "group.rolehistory", "fields": {"person": 109800, "group": 420, "name": "chair", "email": "jouni.nospam@gmail.com"}},
{"pk": 814, "model": "group.rolehistory", "fields": {"person": 111434, "group": 420, "name": "chair", "email": "mauricio.sanchez@hp.com"}},
{"pk": 815, "model": "group.rolehistory", "fields": {"person": 102391, "group": 421, "name": "chair", "email": "d3e3e3@gmail.com"}},
{"pk": 816, "model": "group.rolehistory", "fields": {"person": 8243, "group": 421, "name": "chair", "email": "nordmark@acm.org"}},
{"pk": 817, "model": "group.rolehistory", "fields": {"person": 10083, "group": 422, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 818, "model": "group.rolehistory", "fields": {"person": 104278, "group": 422, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 819, "model": "group.rolehistory", "fields": {"person": 10083, "group": 423, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 820, "model": "group.rolehistory", "fields": {"person": 104278, "group": 423, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 821, "model": "group.rolehistory", "fields": {"person": 105519, "group": 424, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 822, "model": "group.rolehistory", "fields": {"person": 19869, "group": 424, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 823, "model": "group.rolehistory", "fields": {"person": 2329, "group": 424, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 824, "model": "group.rolehistory", "fields": {"person": 2853, "group": 424, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 825, "model": "group.rolehistory", "fields": {"person": 112160, "group": 424, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 826, "model": "group.rolehistory", "fields": {"person": 112837, "group": 425, "name": "auth", "email": "christophe.alter@orange-ftgroup.com"}},
{"pk": 827, "model": "group.rolehistory", "fields": {"person": 109476, "group": 425, "name": "liaiman", "email": "david.sinicrope@ericsson.com"}},
{"pk": 828, "model": "group.rolehistory", "fields": {"person": 10083, "group": 426, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 829, "model": "group.rolehistory", "fields": {"person": 104278, "group": 426, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 830, "model": "group.rolehistory", "fields": {"person": 106284, "group": 427, "name": "auth", "email": "dstanley@arubanetworks.com"}},
{"pk": 831, "model": "group.rolehistory", "fields": {"person": 110070, "group": 428, "name": "chair", "email": "rolf.winter@neclab.eu"}},
{"pk": 832, "model": "group.rolehistory", "fields": {"person": 109727, "group": 428, "name": "chair", "email": "muraris@microsoft.com"}},
{"pk": 833, "model": "group.rolehistory", "fields": {"person": 106224, "group": 429, "name": "auth", "email": "mmorrow@cisco.com"}},
{"pk": 834, "model": "group.rolehistory", "fields": {"person": 10083, "group": 434, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 835, "model": "group.rolehistory", "fields": {"person": 104278, "group": 434, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 836, "model": "group.rolehistory", "fields": {"person": 10083, "group": 435, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 837, "model": "group.rolehistory", "fields": {"person": 104278, "group": 435, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 838, "model": "group.rolehistory", "fields": {"person": 105519, "group": 436, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 839, "model": "group.rolehistory", "fields": {"person": 19869, "group": 436, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 840, "model": "group.rolehistory", "fields": {"person": 2329, "group": 436, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 841, "model": "group.rolehistory", "fields": {"person": 2853, "group": 436, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 842, "model": "group.rolehistory", "fields": {"person": 112160, "group": 436, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 843, "model": "group.rolehistory", "fields": {"person": 105519, "group": 437, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 844, "model": "group.rolehistory", "fields": {"person": 19869, "group": 437, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 845, "model": "group.rolehistory", "fields": {"person": 2329, "group": 437, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 846, "model": "group.rolehistory", "fields": {"person": 2853, "group": 437, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 847, "model": "group.rolehistory", "fields": {"person": 112160, "group": 437, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 848, "model": "group.rolehistory", "fields": {"person": 105519, "group": 438, "name": "techadv", "email": "martin.stiemerling@neclab.eu"}},
{"pk": 849, "model": "group.rolehistory", "fields": {"person": 19869, "group": 438, "name": "chair", "email": "Marc.Blanchet@viagenie.ca"}},
{"pk": 850, "model": "group.rolehistory", "fields": {"person": 2329, "group": 438, "name": "techadv", "email": "stbryant@cisco.com"}},
{"pk": 851, "model": "group.rolehistory", "fields": {"person": 2853, "group": 438, "name": "techadv", "email": "fred@cisco.com"}},
{"pk": 852, "model": "group.rolehistory", "fields": {"person": 112160, "group": 438, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 853, "model": "group.rolehistory", "fields": {"person": 15448, "group": 439, "name": "chair", "email": "shanna@juniper.net"}},
{"pk": 854, "model": "group.rolehistory", "fields": {"person": 110367, "group": 439, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 855, "model": "group.rolehistory", "fields": {"person": 110367, "group": 440, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 856, "model": "group.rolehistory", "fields": {"person": 112837, "group": 441, "name": "auth", "email": "christophe.alter@orange-ftgroup.com"}},
{"pk": 857, "model": "group.rolehistory", "fields": {"person": 109476, "group": 441, "name": "liaiman", "email": "david.sinicrope@ericsson.com"}},
{"pk": 858, "model": "group.rolehistory", "fields": {"person": 114696, "group": 441, "name": "auth", "email": "KEN.KO@adtran.com"}},
{"pk": 859, "model": "group.rolehistory", "fields": {"person": 114099, "group": 442, "name": "chair", "email": "andrewmcgr@gmail.com"}},
{"pk": 860, "model": "group.rolehistory", "fields": {"person": 11843, "group": 442, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 861, "model": "group.rolehistory", "fields": {"person": 114099, "group": 443, "name": "chair", "email": "andrewmcgr@gmail.com"}},
{"pk": 862, "model": "group.rolehistory", "fields": {"person": 11843, "group": 443, "name": "chair", "email": "cabo@tzi.org"}},
{"pk": 863, "model": "group.rolehistory", "fields": {"person": 114099, "group": 443, "name": "chair", "email": "andrewmcgr@google.com"}},
{"pk": 864, "model": "group.rolehistory", "fields": {"person": 10083, "group": 447, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 865, "model": "group.rolehistory", "fields": {"person": 104278, "group": 447, "name": "chair", "email": "yaronf.ietf@gmail.com"}},
{"pk": 866, "model": "group.rolehistory", "fields": {"person": 105097, "group": 448, "name": "chair", "email": "keith.drage@alcatel-lucent.com"}},
{"pk": 867, "model": "group.rolehistory", "fields": {"person": 104294, "group": 448, "name": "chair", "email": "magnus.westerlund@ericsson.com"}},
{"pk": 868, "model": "group.rolehistory", "fields": {"person": 107031, "group": 449, "name": "chair", "email": "fandreas@cisco.com"}},
{"pk": 869, "model": "group.rolehistory", "fields": {"person": 102848, "group": 449, "name": "chair", "email": "miguel.a.garcia@ericsson.com"}},
{"pk": 870, "model": "group.rolehistory", "fields": {"person": 106897, "group": 450, "name": "techadv", "email": "stewe@stewe.org"}},
{"pk": 871, "model": "group.rolehistory", "fields": {"person": 2250, "group": 450, "name": "chair", "email": "jdrosen@jdrosen.net"}},
{"pk": 872, "model": "group.rolehistory", "fields": {"person": 105791, "group": 450, "name": "chair", "email": "fluffy@iii.ca"}},
{"pk": 873, "model": "group.rolehistory", "fields": {"person": 112724, "group": 450, "name": "chair", "email": "tterriberry@mozilla.com"}},
{"pk": 874, "model": "group.rolehistory", "fields": {"person": 103708, "group": 451, "name": "chair", "email": "dmm@1-4-5.net"}},
{"pk": 875, "model": "group.rolehistory", "fields": {"person": 103708, "group": 452, "name": "chair", "email": "dmm@1-4-5.net"}},
{"pk": 876, "model": "group.rolehistory", "fields": {"person": 110367, "group": 453, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 877, "model": "group.rolehistory", "fields": {"person": 112547, "group": 456, "name": "chair", "email": "chris@lookout.net"}},
{"pk": 878, "model": "group.rolehistory", "fields": {"person": 105907, "group": 456, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 879, "model": "group.rolehistory", "fields": {"person": 107956, "group": 457, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 880, "model": "group.rolehistory", "fields": {"person": 111163, "group": 457, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 881, "model": "group.rolehistory", "fields": {"person": 103048, "group": 457, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 882, "model": "group.rolehistory", "fields": {"person": 104569, "group": 457, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 883, "model": "group.rolehistory", "fields": {"person": 107956, "group": 459, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 884, "model": "group.rolehistory", "fields": {"person": 111163, "group": 459, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 885, "model": "group.rolehistory", "fields": {"person": 103048, "group": 459, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 886, "model": "group.rolehistory", "fields": {"person": 104569, "group": 459, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 887, "model": "group.rolehistory", "fields": {"person": 107956, "group": 460, "name": "chair", "email": "shawn.emery@oracle.com"}},
{"pk": 888, "model": "group.rolehistory", "fields": {"person": 111163, "group": 460, "name": "chair", "email": "josh.howlett@ja.net"}},
{"pk": 889, "model": "group.rolehistory", "fields": {"person": 103048, "group": 460, "name": "chair", "email": "hartmans-ietf@mit.edu"}},
{"pk": 890, "model": "group.rolehistory", "fields": {"person": 104569, "group": 460, "name": "secr", "email": "simon@josefsson.org"}},
{"pk": 891, "model": "group.rolehistory", "fields": {"person": 106742, "group": 463, "name": "chair", "email": "akatlas@juniper.net"}},
{"pk": 892, "model": "group.rolehistory", "fields": {"person": 104147, "group": 463, "name": "chair", "email": "edc@google.com"}},
{"pk": 893, "model": "group.rolehistory", "fields": {"person": 106742, "group": 464, "name": "chair", "email": "akatlas@juniper.net"}},
{"pk": 894, "model": "group.rolehistory", "fields": {"person": 104147, "group": 464, "name": "chair", "email": "edc@google.com"}},
{"pk": 895, "model": "group.rolehistory", "fields": {"person": 5376, "group": 465, "name": "ad", "email": "housley@vigilsec.com"}},
{"pk": 896, "model": "group.rolehistory", "fields": {"person": 2348, "group": 466, "name": "ad", "email": "rdroms.ietf@gmail.com"}},
{"pk": 897, "model": "group.rolehistory", "fields": {"person": 100664, "group": 466, "name": "ad", "email": "brian@innovationslab.net"}},
{"pk": 898, "model": "group.rolehistory", "fields": {"person": 101568, "group": 467, "name": "ad", "email": "rbonica@juniper.net"}},
{"pk": 899, "model": "group.rolehistory", "fields": {"person": 105682, "group": 467, "name": "ad", "email": "bclaise@cisco.com"}},
{"pk": 900, "model": "group.rolehistory", "fields": {"person": 103539, "group": 468, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 901, "model": "group.rolehistory", "fields": {"person": 103961, "group": 468, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 902, "model": "group.rolehistory", "fields": {"person": 102154, "group": 469, "name": "chair", "email": "alexey.melnikov@isode.com"}},
{"pk": 903, "model": "group.rolehistory", "fields": {"person": 4397, "group": 469, "name": "chair", "email": "ned.freed@mrochek.com"}},
{"pk": 904, "model": "group.rolehistory", "fields": {"person": 110367, "group": 470, "name": "chair", "email": "tim.moses@entrust.com"}},
{"pk": 905, "model": "group.rolehistory", "fields": {"person": 106745, "group": 472, "name": "chair", "email": "ynir@checkpoint.com"}},
{"pk": 906, "model": "group.rolehistory", "fields": {"person": 8698, "group": 472, "name": "chair", "email": "derek@ihtfp.com"}},
{"pk": 907, "model": "group.rolehistory", "fields": {"person": 2723, "group": 477, "name": "chair", "email": "rcallon@juniper.net"}},
{"pk": 908, "model": "group.rolehistory", "fields": {"person": 107256, "group": 478, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 909, "model": "group.rolehistory", "fields": {"person": 11928, "group": 478, "name": "chair", "email": "johnl@taugh.com"}},
{"pk": 910, "model": "group.rolehistory", "fields": {"person": 10083, "group": 479, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 911, "model": "group.rolehistory", "fields": {"person": 108722, "group": 480, "name": "chair", "email": "spromano@unina.it"}},
{"pk": 912, "model": "group.rolehistory", "fields": {"person": 106987, "group": 480, "name": "chair", "email": "br@brianrosen.net"}},
{"pk": 913, "model": "group.rolehistory", "fields": {"person": 110721, "group": 481, "name": "chair", "email": "ted.ietf@gmail.com"}},
{"pk": 914, "model": "group.rolehistory", "fields": {"person": 113697, "group": 481, "name": "chair", "email": "plale@cs.indiana.edu"}},
{"pk": 915, "model": "group.rolehistory", "fields": {"person": 105992, "group": 482, "name": "chair", "email": "sarikaya@ieee.org"}},
{"pk": 916, "model": "group.rolehistory", "fields": {"person": 109878, "group": 482, "name": "chair", "email": "dirk.von-hugo@telekom.de"}},
{"pk": 917, "model": "group.rolehistory", "fields": {"person": 107190, "group": 484, "name": "chair", "email": "spencer@wonderhamster.org"}},
{"pk": 918, "model": "group.rolehistory", "fields": {"person": 106812, "group": 484, "name": "chair", "email": "vkg@bell-labs.com"}},
{"pk": 919, "model": "group.rolehistory", "fields": {"person": 23057, "group": 485, "name": "chair", "email": "dward@cisco.com"}},
{"pk": 920, "model": "group.rolehistory", "fields": {"person": 2723, "group": 485, "name": "chair", "email": "rcallon@juniper.net"}},
{"pk": 921, "model": "group.rolehistory", "fields": {"person": 111584, "group": 486, "name": "chair", "email": "kerlyn@ieee.org"}},
{"pk": 922, "model": "group.rolehistory", "fields": {"person": 106461, "group": 486, "name": "chair", "email": "tjc@ecs.soton.ac.uk"}},
{"pk": 923, "model": "group.rolehistory", "fields": {"person": 106315, "group": 487, "name": "chair", "email": "gjshep@gmail.com"}},
{"pk": 924, "model": "group.rolehistory", "fields": {"person": 107256, "group": 487, "name": "chair", "email": "marshall.eubanks@gmail.com"}},
{"pk": 925, "model": "group.rolehistory", "fields": {"person": 113431, "group": 488, "name": "chair", "email": "hlflanagan@gmail.com"}},
{"pk": 926, "model": "group.rolehistory", "fields": {"person": 10083, "group": 489, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 927, "model": "group.rolehistory", "fields": {"person": 10064, "group": 490, "name": "chair", "email": "lberger@labn.net"}},
{"pk": 928, "model": "group.rolehistory", "fields": {"person": 112160, "group": 490, "name": "chair", "email": "wesley.george@twcable.com"}},
{"pk": 929, "model": "group.rolehistory", "fields": {"person": 105907, "group": 491, "name": "chair", "email": "stpeter@stpeter.im"}},
{"pk": 930, "model": "group.rolehistory", "fields": {"person": 102830, "group": 491, "name": "chair", "email": "mary.ietf.barnes@gmail.com"}},
{"pk": 931, "model": "group.rolehistory", "fields": {"person": 10083, "group": 492, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 932, "model": "group.rolehistory", "fields": {"person": 108049, "group": 492, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 933, "model": "group.rolehistory", "fields": {"person": 103539, "group": 493, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 934, "model": "group.rolehistory", "fields": {"person": 103961, "group": 493, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 935, "model": "group.rolehistory", "fields": {"person": 108049, "group": 493, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 936, "model": "group.rolehistory", "fields": {"person": 103539, "group": 494, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 937, "model": "group.rolehistory", "fields": {"person": 103961, "group": 494, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 938, "model": "group.rolehistory", "fields": {"person": 108049, "group": 494, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 939, "model": "group.rolehistory", "fields": {"person": 108049, "group": 494, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 940, "model": "group.rolehistory", "fields": {"person": 103539, "group": 495, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 941, "model": "group.rolehistory", "fields": {"person": 103961, "group": 495, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 942, "model": "group.rolehistory", "fields": {"person": 108049, "group": 495, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 943, "model": "group.rolehistory", "fields": {"person": 108049, "group": 495, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 944, "model": "group.rolehistory", "fields": {"person": 103539, "group": 496, "name": "ad", "email": "gonzalo.camarillo@ericsson.com"}},
{"pk": 945, "model": "group.rolehistory", "fields": {"person": 103961, "group": 496, "name": "ad", "email": "rjsparks@nostrum.com"}},
{"pk": 946, "model": "group.rolehistory", "fields": {"person": 108049, "group": 496, "name": "pre-ad", "email": "rbarnes@bbn.com"}},
{"pk": 947, "model": "group.rolehistory", "fields": {"person": 108049, "group": 496, "name": "pre-ad", "email": "rlb@ipv.sx"}},
{"pk": 948, "model": "group.rolehistory", "fields": {"person": 103961, "group": 497, "name": "delegate", "email": "rjsparks@nostrum.com"}},
{"pk": 949, "model": "group.rolehistory", "fields": {"person": 22971, "group": 497, "name": "techadv", "email": "lisa.dusseault@gmail.com"}},
{"pk": 950, "model": "group.rolehistory", "fields": {"person": 110077, "group": 497, "name": "chair", "email": "acooper@cdt.org"}},
{"pk": 951, "model": "group.rolehistory", "fields": {"person": 108049, "group": 497, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 952, "model": "group.rolehistory", "fields": {"person": 103961, "group": 498, "name": "delegate", "email": "rjsparks@nostrum.com"}},
{"pk": 953, "model": "group.rolehistory", "fields": {"person": 22971, "group": 498, "name": "techadv", "email": "lisa.dusseault@gmail.com"}},
{"pk": 954, "model": "group.rolehistory", "fields": {"person": 110077, "group": 498, "name": "chair", "email": "acooper@cdt.org"}},
{"pk": 955, "model": "group.rolehistory", "fields": {"person": 106289, "group": 499, "name": "chair", "email": "alan.b.johnston@gmail.com"}},
{"pk": 956, "model": "group.rolehistory", "fields": {"person": 108049, "group": 499, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 957, "model": "group.rolehistory", "fields": {"person": 106289, "group": 500, "name": "chair", "email": "alan.b.johnston@gmail.com"}},
{"pk": 958, "model": "group.rolehistory", "fields": {"person": 10083, "group": 501, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 959, "model": "group.rolehistory", "fields": {"person": 108049, "group": 501, "name": "chair", "email": "rbarnes@bbn.com"}},
{"pk": 960, "model": "group.rolehistory", "fields": {"person": 10083, "group": 502, "name": "chair", "email": "paul.hoffman@vpnc.org"}},
{"pk": 961, "model": "group.rolehistory", "fields": {"person": 108049, "group": 503, "name": "liaiman", "email": "rbarnes@bbn.com"}}
]

View file

@ -0,0 +1,12 @@
[
{"pk": 1, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": null, "parent": null, "list_email": "", "acronym": "ietf", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "IETF"}},
{"pk": 2, "model": "group.group", "fields": {"charter": "charter-ietf-iesg", "unused_states": [], "ad": 5376, "parent": 1, "list_email": "iesg@ietf.org", "acronym": "iesg", "comments": "", "list_subscribe": "", "state": "active", "time": "2011-12-09 12:00:00", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "Internet Engineering Steering Group"}},
{"pk": 3, "model": "group.group", "fields": {"charter": null, "unused_states": [81, 82, 83, 84, 85, 86, 87, 88, 1, 2, 3, 4, 5, 6, 16, 13, 21, 14, 15, 19, 20, 12, 18, 9, 10, 17, 7, 22, 23, 11, 8, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 80, 77, 78], "ad": null, "parent": null, "list_email": "", "acronym": "irtf", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": ["app-min", "errata", "iesg-com", "missref", "need-sh", "ref", "rfc-rev", "via-rfc", "w-dep", "need-ed", "point", "w-expert", "ad-f-up", "w-extern", "w-part", "extpty", "w-merge", "w-review", "need-aut", "sh-f-up", "need-rev", "w-refdoc", "w-refing", "rev-wglc", "rev-ad", "rev-iesg", "sheph-u", "other"], "list_archive": "", "type": "irtf", "name": "IRTF"}},
{"pk": 4, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": null, "parent": null, "list_email": "", "acronym": "secretariat", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "IETF Secretariat"}},
{"pk": 5, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": null, "parent": null, "list_email": "", "acronym": "ise", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "Independent Submission Editor"}},
{"pk": 6, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": null, "parent": null, "list_email": "", "acronym": "rsoc", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "RFC Series Oversight Committee"}},
{"pk": 7, "model": "group.group", "fields": {"charter": "charter-ietf-iab", "unused_states": [], "ad": 5376, "parent": 1, "list_email": "iab@iab.org", "acronym": "iab", "comments": "1st meeting at 35th IETF - Los Angeles, CA - March 1996", "list_subscribe": "", "state": "active", "time": "2011-12-09 12:00:00", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "Internet Architecture Board"}},
{"pk": 9, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": null, "parent": null, "list_email": "", "acronym": "iepg", "comments": "", "list_subscribe": "", "state": "active", "time": "2012-02-26 00:21:36", "unused_tags": [], "list_archive": "", "type": "ietf", "name": "IEPG"}},
{"pk": 1027, "model": "group.group", "fields": {"charter": null, "unused_states": [], "ad": 5376, "parent": 1008, "list_email": "", "acronym": "none", "comments": "This is here so that 'none' can be entered in, for example, idform.", "list_subscribe": "", "state": "active", "time": "2011-12-09 12:00:00", "unused_tags": [], "list_archive": "", "type": "individ", "name": "Individual Submissions"}}
]

View file

@ -0,0 +1,10 @@
[
{"pk": 314, "model": "group.role", "fields": {"person": 5376, "group": 2, "name": "chair", "email": "housley@vigilsec.com"}},
{"pk": 75, "model": "group.role", "fields": {"person": 5376, "group": 1, "name": "chair", "email": "chair@ietf.org"}},
{"pk": 76, "model": "group.role", "fields": {"person": 12620, "group": 7, "name": "chair", "email": "Bernard_Aboba@hotmail.com"}},
{"pk": 78, "model": "group.role", "fields": {"person": 112773, "group": 3, "name": "chair", "email": "lars@netapp.com"}},
{"pk": 79, "model": "group.role", "fields": {"person": 14966, "group": 1, "name": "admdir", "email": "iad@ietf.org"}},
{"pk": 80, "model": "group.role", "fields": {"person": 2853, "group": 6, "name": "chair", "email": "rsoc-chair@iab.org"}},
{"pk": 81, "model": "group.role", "fields": {"person": 6766, "group": 5, "name": "chair", "email": "rfc-ise@rfc-editor.org"}},
{"pk": 1614, "model": "group.role", "fields": {"person": 108757, "group": 4, "name": "secr", "email": "wlo@amsl.com"}}
]

File diff suppressed because it is too large Load diff

View file

@ -1,13 +1,17 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from urlparse import urljoin
from django.db import models
from django.db.models import Q
from ietf.name.models import *
from ietf.person.models import Email, Person
from ietf.group.colors import fg_group_colors, bg_group_colors
import datetime
import debug
class GroupInfo(models.Model):
time = models.DateTimeField(default=datetime.datetime.now)
name = models.CharField(max_length=80)
@ -74,6 +78,39 @@ class Group(GroupInfo):
members = self.role_set.filter(name__slug__in=["chair", "member", "advisor", "liaison"])
return members
# these are copied to Group because it is still proxied.
@property
def upcase_acronym(self):
return self.acronym.upper()
@property
def fg_color(self):
return fg_group_colors[self.upcase_acronym]
@property
def bg_color(self):
return bg_group_colors[self.upcase_acronym]
def json_url(self):
return "/group/%s.json" % (self.acronym,)
def json_dict(self, host_scheme):
group1= dict()
group1['href'] = urljoin(host_scheme, self.json_url())
group1['acronym'] = self.acronym
group1['name'] = self.name
group1['state'] = self.state.slug
group1['type'] = self.type.slug
group1['parent_href'] = urljoin(host_scheme, self.parent.json_url())
# uncomment when people URL handle is created
#if self.ad is not None:
# group1['ad_href'] = urljoin(host_scheme, self.ad.url())
group1['list_email'] = self.list_email
group1['list_subscribe'] = self.list_subscribe
group1['list_archive'] = self.list_archive
group1['comments'] = self.comments
return group1
class GroupHistory(GroupInfo):
group = models.ForeignKey(Group, related_name='history_set')
acronym = models.CharField(max_length=40)

View file

@ -0,0 +1,13 @@
# Copyright The IETF Trust 2012, All Rights Reserved
"""
The test cases are split into multiple files.
"""
import sys
from ietf.utils import TestCase
from datetime import datetime
# actual tests are distributed among a set of files in subdir tests/
from ietf.group.tests.workinggroups import WorkingGroupTestCase

View file

@ -0,0 +1,19 @@
import sys
from ietf.utils import TestCase
from ietf.group.models import Group
class WorkingGroupTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
fixtures = [ 'workinggroups', ]
perma_fixtures = []
def test_FindOneWg(self):
one = Group.objects.filter(acronym = 'roll')
self.assertIsNotNone(one)
def test_ActiveWgGroupList(self):
groups = Group.objects.active_wgs()
self.assertEqual(groups.count(), 151)

11
ietf/group/urls.py Normal file
View file

@ -0,0 +1,11 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf.urls.defaults import patterns, url, include
from django.views.generic.simple import redirect_to
from ietf.group import ajax
urlpatterns = patterns('',
(r'^(?P<groupname>[a-z0-9]+).json$', ajax.group_json),
)

View file

@ -5,7 +5,7 @@ unittest). These will both pass when you run "manage.py test".
Replace these with more appropriate tests for your application.
"""
from django.test import TestCase
from ietf.utils import TestCase
class SimpleTest(TestCase):
def test_basic_addition(self):

View file

@ -25,7 +25,6 @@ def index(request):
def state(request, doc, type=None):
slug = "%s-%s" % (doc,type) if type else doc
debug.show('slug')
statetype = get_object_or_404(StateType, slug=slug)
states = State.objects.filter(used=True, type=statetype).order_by('order')
return render_to_response('help/states.html', {"doc": doc, "type": statetype, "states":states},

View file

@ -1,16 +1,17 @@
import datetime, shutil
import django.test
from django.core.urlresolvers import reverse as urlreverse
from ietf.utils.test_data import make_test_data
from ietf.utils import TestCase
from ietf.doc.models import *
from ietf.idindex.index import *
class IndexTestCase(django.test.TestCase):
fixtures = ['names']
class IndexTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def setUp(self):
self.id_dir = os.path.abspath("tmp-id-dir")

View file

@ -11,6 +11,7 @@ from ietf.utils import FKAsOneToOne
from ietf.utils.broken_foreign_key import BrokenForeignKey
from ietf.utils.cached_lookup_field import CachedLookupField
from ietf.utils.admin import admin_link
from ietf.group.colors import fg_group_colors, bg_group_colors
class Acronym(models.Model):
INDIVIDUAL_SUBMITTER = 1027
@ -101,6 +102,17 @@ class Area(models.Model):
def active_areas():
return Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
active_areas = staticmethod(active_areas)
# these are copied to Group because it is still proxied.
def upcase_acronym(self):
return self.area_acronym.upper()
def fg_color(self):
return fg_group_colors[self.upcase_area_acronym]
def bg_color(self):
return bg_group_colors[self.upcase_area_acronym]
class Meta:
db_table = 'areas'
verbose_name="area"

View file

@ -1,7 +1,6 @@
from datetime import timedelta
import os, shutil
import django.test
from django.core.urlresolvers import reverse as urlreverse
from django.conf import settings
@ -9,11 +8,12 @@ from pyquery import PyQuery
from ietf.idtracker.models import *
from ietf.iesg.models import *
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest, canonicalize_feed, login_testing_unauthorized
from ietf.utils.test_utils import TestCase, SimpleUrlTestCase, RealDatabaseTest, canonicalize_feed, login_testing_unauthorized
from ietf.ietfworkflows.models import Stream
class RescheduleOnAgendaTestCase(django.test.TestCase):
fixtures = ['base', 'draft']
class RescheduleOnAgendaTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['base', 'draft']
def test_reschedule(self):
draft = InternetDraft.objects.get(filename="draft-ietf-mipshop-pfmipv6")
@ -54,8 +54,8 @@ class RescheduleOnAgendaTestCase(django.test.TestCase):
self.assertEquals(draft.idinternal.comments().count(), comments_before + 1)
self.assertTrue("Telechat" in draft.idinternal.comments()[0].comment_text)
class RescheduleOnAgendaTestCaseREDESIGN(django.test.TestCase):
fixtures = ['names']
class RescheduleOnAgendaTestCaseREDESIGN(TestCase):
perma_fixtures = ['names']
def test_reschedule(self):
from ietf.utils.test_data import make_test_data
@ -111,8 +111,8 @@ class RescheduleOnAgendaTestCaseREDESIGN(django.test.TestCase):
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
RescheduleOnAgendaTestCase = RescheduleOnAgendaTestCaseREDESIGN
class ManageTelechatDatesTestCase(django.test.TestCase):
fixtures = ['base', 'draft']
class ManageTelechatDatesTestCase(TestCase):
perma_fixtures = ['base', 'draft']
def test_set_dates(self):
dates = TelechatDates.objects.all()[0]
@ -152,8 +152,8 @@ class ManageTelechatDatesTestCase(django.test.TestCase):
self.assertTrue(dates.date4 == new_date)
self.assertTrue(dates.date1 == old_date2)
# class ManageTelechatDatesTestCaseREDESIGN(django.test.TestCase):
# fixtures = ['names']
# class ManageTelechatDatesTestCaseREDESIGN(TestCase):
# perma_fixtures = ['names']
# def test_set_dates(self):
# from ietf.utils.test_data import make_test_data
@ -203,8 +203,8 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
#ManageTelechatDatesTestCase = ManageTelechatDatesTestCaseREDESIGN
del ManageTelechatDatesTestCase
class WorkingGroupActionsTestCase(django.test.TestCase):
fixtures = ['base', 'wgactions']
class WorkingGroupActionsTestCase(TestCase):
perma_fixtures = ['base', 'wgactions']
def setUp(self):
super(self.__class__, self).setUp()
@ -313,8 +313,8 @@ class WorkingGroupActionsTestCase(django.test.TestCase):
self.assertTrue('(sieve)' not in r.content)
class WorkingGroupActionsTestCaseREDESIGN(django.test.TestCase):
fixtures = ['names']
class WorkingGroupActionsTestCaseREDESIGN(TestCase):
perma_fixtures = ['names']
def setUp(self):
super(self.__class__, self).setUp()
@ -473,9 +473,9 @@ class IesgUrlTestCase(SimpleUrlTestCase):
from ietf.doc.models import Document,TelechatDocEvent,State
from ietf.group.models import Person
class DeferUndeferTestCase(django.test.TestCase):
class DeferUndeferTestCase(TestCase):
fixtures=['names']
perma_fixtures = ['names']
def helper_test_defer(self,name):

View file

@ -48,6 +48,7 @@ def has_role(user, role_names, *args, **kwargs):
"RFC Editor": Q(person=person, name="auth", group__acronym="rfceditor"),
"IAD": Q(person=person, name="admdir", group__acronym="ietf"),
"IETF Chair": Q(person=person, name="chair", group__acronym="ietf"),
"IRTF Chair": Q(person=person, name="chair", group__acronym="irtf"),
"IAB Chair": Q(person=person, name="chair", group__acronym="iab"),
"WG Chair": Q(person=person,name="chair", group__type="wg", group__state="active"),
"WG Secretary": Q(person=person,name="secr", group__type="wg", group__state="active"),

View file

@ -3,13 +3,13 @@ import datetime, os, shutil
from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse as urlreverse
import django.test
from StringIO import StringIO
from pyquery import PyQuery
from ietf.utils.test_utils import login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.utils import TestCase
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
from ietf.person.models import Person, Email
@ -18,8 +18,9 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
from ietf.doc.utils import *
from ietf.name.models import DocTagName
class EditStreamInfoTestCase(django.test.TestCase):
fixtures = ['names']
class EditStreamInfoTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def test_adopt_document(self):
draft = make_test_data()

View file

@ -3,13 +3,13 @@ import datetime, os, shutil
from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse as urlreverse
import django.test
from StringIO import StringIO
from pyquery import PyQuery
from ietf.utils.test_utils import SimpleUrlTestCase, canonicalize_feed, canonicalize_sitemap, login_testing_unauthorized
from ietf.utils.test_data import make_test_data
from ietf.utils.mail import outbox
from ietf.utils import TestCase
class LiaisonsUrlTestCase(SimpleUrlTestCase):
def testUrls(self):
@ -91,12 +91,19 @@ def make_liaison_models():
return l
class LiaisonManagementTestCase(django.test.TestCase):
fixtures = ['names']
class LiaisonManagementTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
def setUp(self):
self.liaison_dir = os.path.abspath("tmp-liaison-dir")
os.mkdir(self.liaison_dir)
try:
os.mkdir(self.liaison_dir)
except OSError, e:
if "File exists" in str(e):
pass
else:
raise
settings.LIAISON_ATTACH_PATH = self.liaison_dir

View file

@ -27,7 +27,7 @@ admin.site.register(Meeting, MeetingAdmin)
class TimeSlotAdmin(admin.ModelAdmin):
list_display = ["meeting", "type", "name", "time", "duration", "location", "session_desc"]
list_filter = ["meeting", ]
raw_id_fields = ["location", "session"]
raw_id_fields = ["location"]
ordering = ["-time"]
def session_desc(self, instance):

487
ietf/meeting/ajax.py Normal file
View file

@ -0,0 +1,487 @@
from urlparse import urljoin
from django.utils import simplejson as json
from dajaxice.core import dajaxice_functions
from dajaxice.decorators import dajaxice_register
from django.views.decorators.cache import cache_page
from django.core import serializers
from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404
from ietf.ietfauth.decorators import group_required, has_role
from ietf.name.models import TimeSlotTypeName
from django.http import HttpResponseRedirect, HttpResponse, Http404, QueryDict
from ietf.meeting.helpers import get_meeting, get_schedule, get_schedule_by_id, agenda_permissions
from ietf.meeting.views import edit_timeslots, edit_agenda
# New models
from ietf.meeting.models import Meeting, TimeSlot, Session
from ietf.meeting.models import Schedule, ScheduledSession, Room
from ietf.group.models import Group
import datetime
import logging
import sys
from ietf.settings import LOG_DIR
log = logging.getLogger(__name__)
@dajaxice_register
def readonly(request, meeting_num, schedule_id):
meeting = get_meeting(meeting_num)
schedule = get_schedule_by_id(meeting, schedule_id)
secretariat = False
write_perm = False
cansee,canedit = agenda_permissions(meeting, schedule, request.user)
read_only = not canedit
user = request.user
if has_role(user, "Secretariat"):
secretariat = True
write_perm = True
if has_role(user, "Area Director"):
write_perm = True
try:
person = user.get_profile()
if person is not None and schedule.owner == user.person:
read_only = False
except:
# specific error if user has no profile...
pass
return json.dumps(
{'secretariat': secretariat,
'write_perm': write_perm,
'owner_href': request.build_absolute_uri(schedule.owner.json_url()),
'read_only': read_only})
@group_required('Area Director','Secretariat')
@dajaxice_register
def update_timeslot(request, schedule_id, session_id, scheduledsession_id=None, extended_from_id=None, duplicate=False):
schedule = get_object_or_404(Schedule, pk = int(schedule_id))
meeting = schedule.meeting
ss_id = 0
ess_id = 0
ess = None
ss = None
#print "duplicate: %s schedule.owner: %s user: %s" % (duplicate, schedule.owner, request.user.get_profile())
cansee,canedit = agenda_permissions(meeting, schedule, request.user)
if not canedit:
#raise Exception("Not permitted")
return json.dumps({'error':'no permission'})
session_id = int(session_id)
session = get_object_or_404(meeting.session_set, pk=session_id)
if scheduledsession_id is not None:
ss_id = int(scheduledsession_id)
if extended_from_id is not None:
ess_id = int(extended_from_id)
if ss_id != 0:
ss = get_object_or_404(schedule.scheduledsession_set, pk=ss_id)
# this cleans up up two sessions in one slot situation, the
# ... extra scheduledsessions need to be cleaned up.
if ess_id == 0:
# if this is None, then we must be moving.
for ssO in schedule.scheduledsession_set.filter(session = session):
#print "sched(%s): removing session %s from slot %u" % ( schedule, session, ssO.pk )
#if ssO.extendedfrom is not None:
# ssO.extendedfrom.session = None
# ssO.extendedfrom.save()
ssO.session = None
ssO.extendedfrom = None
ssO.save()
else:
ess = get_object_or_404(schedule.scheduledsession_set, pk = ess_id)
ss.extendedfrom = ess
try:
# find the scheduledsession, assign the Session to it.
if ss:
#print "ss.session: %s session:%s duplicate=%s"%(ss, session, duplicate)
ss.session = session
if(duplicate):
ss.id = None
ss.save()
except Exception as e:
return json.dumps({'error':'invalid scheduledsession'})
return json.dumps({'message':'valid'})
@group_required('Secretariat')
@dajaxice_register
def update_timeslot_purpose(request, timeslot_id=None, purpose=None):
ts_id = int(timeslot_id)
try:
timeslot = TimeSlot.objects.get(pk=ts_id)
except:
return json.dumps({'error':'invalid timeslot'})
try:
timeslottypename = TimeSlotTypeName.objects.get(pk = purpose)
except:
return json.dumps({'error':'invalid timeslot type',
'extra': purpose})
timeslot.type = timeslottypename
timeslot.save()
return json.dumps(timeslot.json_dict(request.build_absolute_uri('/')))
#############################################################################
## ROOM API
#############################################################################
from django.forms.models import modelform_factory
AddRoomForm = modelform_factory(Room, exclude=('meeting',))
# no authorization required
def timeslot_roomlist(request, mtg):
rooms = mtg.room_set.all()
json_array=[]
for room in rooms:
json_array.append(room.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
@group_required('Secretariat')
def timeslot_addroom(request, meeting):
# authorization was enforced by the @group_require decorator above.
newroomform = AddRoomForm(request.POST)
if not newroomform.is_valid():
return HttpResponse(status=404)
newroom = newroomform.save(commit=False)
newroom.meeting = meeting
newroom.save()
newroom.create_timeslots()
if "HTTP_ACCEPT" in request.META and "application/json" in request.META['HTTP_ACCEPT']:
url = reverse(timeslot_roomurl, args=[meeting.number, newroom.pk])
#log.debug("Returning timeslot_roomurl: %s " % (url))
return HttpResponseRedirect(url)
else:
return HttpResponseRedirect(
reverse(edit_timeslots, args=[meeting.number]))
@group_required('Secretariat')
def timeslot_delroom(request, meeting, roomid):
# authorization was enforced by the @group_require decorator above.
room = get_object_or_404(meeting.room_set, pk=roomid)
room.delete_timeslots()
room.delete()
return HttpResponse('{"error":"none"}', status = 200)
def timeslot_roomsurl(request, num=None):
meeting = get_meeting(num)
if request.method == 'GET':
return timeslot_roomlist(request, meeting)
elif request.method == 'POST':
return timeslot_addroom(request, meeting)
# unacceptable reply
return HttpResponse(status=406)
def timeslot_roomurl(request, num=None, roomid=None):
meeting = get_meeting(num)
if request.method == 'GET':
room = get_object_or_404(meeting.room_set, pk=roomid)
return HttpResponse(json.dumps(room.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
return timeslot_updroom(request, meeting)
elif request.method == 'DELETE':
return timeslot_delroom(request, meeting, roomid)
#############################################################################
## DAY/SLOT API
#############################################################################
AddSlotForm = modelform_factory(TimeSlot, exclude=('meeting','name','location','sessions', 'modified'))
# no authorization required to list.
def timeslot_slotlist(request, mtg):
slots = mtg.timeslot_set.all()
json_array=[]
for slot in slots:
json_array.append(slot.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
@group_required('Secretariat')
def timeslot_addslot(request, meeting):
# authorization was enforced by the @group_require decorator above.
addslotform = AddSlotForm(request.POST)
#log.debug("newslot: %u" % ( addslotform.is_valid() ))
if not addslotform.is_valid():
return HttpResponse(status=404)
newslot = addslotform.save(commit=False)
newslot.meeting = meeting
newslot.save()
newslot.create_concurrent_timeslots()
if "HTTP_ACCEPT" in request.META and "application/json" in request.META['HTTP_ACCEPT']:
return HttpResponseRedirect(
reverse(timeslot_dayurl, args=[meeting.number, newroom.pk]))
else:
return HttpResponseRedirect(
reverse(edit_timeslots, args=[meeting.number]))
@group_required('Secretariat')
def timeslot_delslot(request, meeting, slotid):
# authorization was enforced by the @group_require decorator above.
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
# this will delete self as well.
slot.delete_concurrent_timeslots()
return HttpResponse('{"error":"none"}', status = 200)
def timeslot_slotsurl(request, num=None):
meeting = get_meeting(num)
if request.method == 'GET':
return timeslot_slotlist(request, meeting)
elif request.method == 'POST':
return timeslot_addslot(request, meeting)
# unacceptable reply
return HttpResponse(status=406)
def timeslot_sloturl(request, num=None, slotid=None):
meeting = get_meeting(num)
if request.method == 'GET':
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
return HttpResponse(json.dumps(slot.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
# not yet implemented!
#return timeslot_updslot(request, meeting)
return HttpResponse(status=406)
elif request.method == 'DELETE':
return timeslot_delslot(request, meeting, slotid)
#############################################################################
## Agenda List API
#############################################################################
AgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner'))
EditAgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner', 'name'))
@group_required('Area Director','Secretariat')
def agenda_list(request, mtg):
agendas = mtg.schedule_set.all()
json_array=[]
for agenda in agendas:
json_array.append(agenda.json_dict(request.build_absolute_uri('/')))
return HttpResponse(json.dumps(json_array),
mimetype="application/json")
# duplicates save-as functionality below.
@group_required('Area Director','Secretariat')
def agenda_add(request, meeting):
# authorization was enforced by the @group_require decorator above.
newagendaform = AgendaEntryForm(request.POST)
if not newagendaform.is_valid():
return HttpResponse(status=404)
newagenda = newagendaform.save(commit=False)
newagenda.meeting = meeting
newagenda.owner = request.user.get_profile()
newagenda.save()
if "HTTP_ACCEPT" in request.META and "application/json" in request.META['HTTP_ACCEPT']:
url = reverse(agenda_infourl, args=[meeting.number, newagenda.name])
#log.debug("Returning agenda_infourl: %s " % (url))
return HttpResponseRedirect(url)
else:
return HttpResponseRedirect(
reverse(edit_agenda, args=[meeting.number, newagenda.name]))
@group_required('Area Director','Secretariat')
def agenda_update(request, meeting, schedule):
# authorization was enforced by the @group_require decorator above.
# forms are completely useless for update actions that want to
# accept a subset of values.
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
#log.debug("99 meeting.agenda: %s / %s / %s" %
# (schedule, update_dict, request.raw_post_data))
user = request.user
if has_role(user, "Secretariat"):
if "public" in update_dict:
value1 = True
value = update_dict["public"]
if value == "0" or value == 0 or value=="false":
value1 = False
log.debug("setting public for %s to %s" % (schedule, value1))
schedule.public = value1
if "visible" in update_dict:
value1 = True
value = update_dict["visible"]
if value == "0" or value == 0 or value=="false":
value1 = False
log.debug("setting visible for %s to %s" % (schedule, value1))
schedule.visible = value1
if "name" in update_dict:
value = update_dict["name"]
log.debug("setting name for %s to %s" % (schedule, value))
schedule.name = value
schedule.save()
# enforce that a non-public schedule can not be the public one.
if meeting.agenda == schedule and not schedule.public:
meeting.agenda = None
meeting.save()
if "HTTP_ACCEPT" in request.META and "application/json" in request.META['HTTP_ACCEPT']:
return HttpResponse(json.dumps(schedule.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
else:
return HttpResponseRedirect(
reverse(edit_agenda, args=[meeting.number, schedule.name]))
@group_required('Secretariat')
def agenda_del(request, meeting, schedule):
schedule.delete_scheduledsessions()
#log.debug("deleting meeting: %s agenda: %s" % (meeting, meeting.agenda))
if meeting.agenda == schedule:
meeting.agenda = None
meeting.save()
schedule.delete()
return HttpResponse('{"error":"none"}', status = 200)
def agenda_infosurl(request, num=None):
meeting = get_meeting(num)
if request.method == 'GET':
return agenda_list(request, meeting)
elif request.method == 'POST':
return agenda_add(request, meeting)
# unacceptable action
return HttpResponse(status=406)
def agenda_infourl(request, num=None, schedule_name=None):
meeting = get_meeting(num)
#log.debug("agenda: %s / %s" % (meeting, schedule_name))
schedule = get_schedule(meeting, schedule_name)
#log.debug("results in agenda: %u / %s" % (schedule.id, request.method))
if request.method == 'GET':
return HttpResponse(json.dumps(schedule.json_dict(request.build_absolute_uri('/'))),
mimetype="application/json")
elif request.method == 'PUT':
return agenda_update(request, meeting, schedule)
elif request.method == 'DELETE':
return agenda_del(request, meeting, schedule)
else:
return HttpResponse(status=406)
#############################################################################
## Meeting API (very limited)
#############################################################################
def meeting_get(request, meeting):
return HttpResponse(json.dumps(meeting.json_dict(request.build_absolute_uri('/')),
sort_keys=True, indent=2),
mimetype="application/json")
@group_required('Secretariat')
def meeting_update(request, meeting):
# authorization was enforced by the @group_require decorator above.
# at present, only the official agenda can be updated from this interface.
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
#log.debug("1 meeting.agenda: %s / %s / %s" % (meeting.agenda, update_dict, request.raw_post_data))
if "agenda" in update_dict:
value = update_dict["agenda"]
#log.debug("4 meeting.agenda: %s" % (value))
if value is None or value == "None":
meeting.agenda = None
else:
schedule = get_schedule(meeting, value)
if not schedule.public:
return HttpResponse(status = 406)
#log.debug("3 meeting.agenda: %s" % (schedule))
meeting.agenda = schedule
#log.debug("2 meeting.agenda: %s" % (meeting.agenda))
meeting.save()
return meeting_get(request, meeting)
def meeting_json(request, meeting_num):
meeting = get_meeting(meeting_num)
if request.method == 'GET':
return meeting_get(request, meeting)
elif request.method == 'PUT':
return meeting_update(request, meeting)
elif request.method == 'POST':
return meeting_update(request, meeting)
else:
return HttpResponse(status=406)
#############################################################################
## Agenda Editing API functions
#############################################################################
def session_json(request, num, sessionid):
meeting = get_meeting(num)
try:
session = meeting.session_set.get(pk=int(sessionid))
except Session.DoesNotExist:
return json.dumps({'error':"no such session %s" % sessionid})
sess1 = session.json_dict(request.build_absolute_uri('/'))
return HttpResponse(json.dumps(sess1, sort_keys=True, indent=2),
mimetype="application/json")
# Would like to cache for 1 day, but there are invalidation issues.
#@cache_page(86400)
def session_constraints(request, num, sessionid):
meeting = get_meeting(num)
#print "Getting meeting=%s session contraints for %s" % (num, sessionid)
try:
session = meeting.session_set.get(pk=int(sessionid))
except Session.DoesNotExist:
return json.dumps({"error":"no such session"})
constraint_list = session.constraints_dict(request.build_absolute_uri('/'))
json_str = json.dumps(constraint_list,
sort_keys=True, indent=2),
#print " gives: %s" % (json_str)
return HttpResponse(json_str, mimetype="application/json")

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,523 @@
[
{"pk": 83, "model": "meeting.meeting",
"fields":
{"city": "Paris",
"venue_name": "",
"country": "FR",
"time_zone": "Europe/Paris",
"reg_area": "Hall Maillot A",
"number": "83",
"break_area": "Hall Maillot A",
"date": "2012-03-25",
"type": "ietf",
"venue_addr": "",
"agenda": 24
}
},
{"pk": 24, "model": "meeting.schedule", "fields": {"owner": 108757, "visible": true, "name": "mtg:83", "public": true, "meeting": 83}},
{"pk": 25, "model": "meeting.schedule", "fields": {"owner": 108757, "visible": false, "name": "inv_83", "public": true, "meeting": 83}},
{"pk": 26, "model": "meeting.schedule", "fields": {"owner": 108757, "visible": true, "name": "priv_83", "public": false, "meeting": 83}},
{"pk": 27, "model": "meeting.schedule", "fields": {"owner": 5376, "visible": false, "name": "russ_83_inv", "public": false, "meeting": 83}},
{"pk": 28, "model": "meeting.schedule", "fields": {"owner": 5376, "visible": true, "name": "russ_83_visible", "public": false, "meeting": 83}},
{"pk": 29, "model": "meeting.schedule", "fields": {"owner": 19177, "visible": false, "name": "sf_83_invisible", "public": false, "meeting": 83}},
{"pk": 30, "model": "meeting.schedule", "fields": {"owner": 19177, "visible": true, "name": "sf_83_visible", "public": false, "meeting": 83}},
{"pk": 2371, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2157, "timeslot": 2371}},
{"pk": 2372, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2158, "timeslot": 2372}},
{"pk": 2373, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2159, "timeslot": 2373}},
{"pk": 2374, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2160, "timeslot": 2374}},
{"pk": 2375, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2161, "timeslot": 2375}},
{"pk": 2376, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2162, "timeslot": 2376}},
{"pk": 2377, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12162, "timeslot": 2377}},
{"pk": 2378, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2163, "timeslot": 2378}},
{"pk": 2379, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2164, "timeslot": 2379}},
{"pk": 2380, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2165, "timeslot": 2380}},
{"pk": 2381, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2166, "timeslot": 2381}},
{"pk": 2382, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2167, "timeslot": 2382}},
{"pk": 2383, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2168, "timeslot": 2383}},
{"pk": 2384, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2169, "timeslot": 2384}},
{"pk": 2385, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2170, "timeslot": 2385}},
{"pk": 2386, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2171, "timeslot": 2386}},
{"pk": 2387, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2172, "timeslot": 2387}},
{"pk": 2388, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2173, "timeslot": 2388}},
{"pk": 2389, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2174, "timeslot": 2389}},
{"pk": 2390, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12174, "timeslot": 2390}},
{"pk": 2391, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2175, "timeslot": 2391}},
{"pk": 2392, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12175, "timeslot": 2392}},
{"pk": 2393, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22084, "timeslot": 2393}},
{"pk": 2394, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2177, "timeslot": 2394}},
{"pk": 2395, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2178, "timeslot": 2395}},
{"pk": 2396, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2179, "timeslot": 2396}},
{"pk": 2397, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2180, "timeslot": 2397}},
{"pk": 2398, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2182, "timeslot": 2398}},
{"pk": 2399, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2206, "timeslot": 2399}},
{"pk": 2400, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2184, "timeslot": 2400}},
{"pk": 2401, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2185, "timeslot": 2401}},
{"pk": 2402, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2186, "timeslot": 2402}},
{"pk": 2403, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2187, "timeslot": 2403}},
{"pk": 2404, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2188, "timeslot": 2404}},
{"pk": 2405, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12188, "timeslot": 2405}},
{"pk": 2406, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2189, "timeslot": 2406}},
{"pk": 2407, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2190, "timeslot": 2407}},
{"pk": 2408, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2191, "timeslot": 2408}},
{"pk": 2409, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2192, "timeslot": 2409}},
{"pk": 2410, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12192, "timeslot": 2410}},
{"pk": 2411, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2193, "timeslot": 2411}},
{"pk": 2412, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12193, "timeslot": 2412}},
{"pk": 2413, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2194, "timeslot": 2413}},
{"pk": 2414, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12194, "timeslot": 2414}},
{"pk": 2415, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2195, "timeslot": 2415}},
{"pk": 2416, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12195, "timeslot": 2416}},
{"pk": 2417, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2196, "timeslot": 2417}},
{"pk": 2418, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12196, "timeslot": 2418}},
{"pk": 2419, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2197, "timeslot": 2419}},
{"pk": 2420, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2198, "timeslot": 2420}},
{"pk": 2421, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2199, "timeslot": 2421}},
{"pk": 2422, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2200, "timeslot": 2422}},
{"pk": 2423, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2201, "timeslot": 2423}},
{"pk": 2424, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2202, "timeslot": 2424}},
{"pk": 2425, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2203, "timeslot": 2425}},
{"pk": 2426, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2204, "timeslot": 2426}},
{"pk": 2427, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2205, "timeslot": 2427}},
{"pk": 2428, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2183, "timeslot": 2428}},
{"pk": 2429, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2207, "timeslot": 2429}},
{"pk": 2430, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2208, "timeslot": 2430}},
{"pk": 2431, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2209, "timeslot": 2431}},
{"pk": 2432, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2210, "timeslot": 2432}},
{"pk": 2433, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2211, "timeslot": 2433}},
{"pk": 2434, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2212, "timeslot": 2434}},
{"pk": 2435, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2213, "timeslot": 2435}},
{"pk": 2436, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2214, "timeslot": 2436}},
{"pk": 2437, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2215, "timeslot": 2437}},
{"pk": 2438, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2216, "timeslot": 2438}},
{"pk": 2439, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2216, "timeslot": 2439, "extendedfrom":2438}},
{"pk": 2440, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2217, "timeslot": 2440}},
{"pk": 2441, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2218, "timeslot": 2441}},
{"pk": 2442, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2219, "timeslot": 2442}},
{"pk": 2443, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2220, "timeslot": 2443}},
{"pk": 2444, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2221, "timeslot": 2444}},
{"pk": 2445, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2222, "timeslot": 2445}},
{"pk": 2446, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2223, "timeslot": 2446}},
{"pk": 2447, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2223, "timeslot": 2447}},
{"pk": 2448, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2224, "timeslot": 2448}},
{"pk": 2449, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2225, "timeslot": 2449}},
{"pk": 2450, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2227, "timeslot": 2450}},
{"pk": 2451, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2228, "timeslot": 2451}},
{"pk": 2452, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2229, "timeslot": 2452}},
{"pk": 2453, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2230, "timeslot": 2453}},
{"pk": 2454, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2231, "timeslot": 2454}},
{"pk": 2455, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2232, "timeslot": 2455}},
{"pk": 2456, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2232, "timeslot": 2456}},
{"pk": 2457, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2233, "timeslot": 2457}},
{"pk": 2458, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2234, "timeslot": 2458}},
{"pk": 2459, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2235, "timeslot": 2459}},
{"pk": 2460, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2236, "timeslot": 2460}},
{"pk": 2461, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2237, "timeslot": 2461}},
{"pk": 2462, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2238, "timeslot": 2462}},
{"pk": 2463, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12238, "timeslot": 2463}},
{"pk": 2464, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2239, "timeslot": 2464}},
{"pk": 2465, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2240, "timeslot": 2465}},
{"pk": 2466, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2241, "timeslot": 2466}},
{"pk": 2467, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2242, "timeslot": 2467}},
{"pk": 2468, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2243, "timeslot": 2468}},
{"pk": 2469, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2244, "timeslot": 2469}},
{"pk": 2470, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2245, "timeslot": 2470}},
{"pk": 2471, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2246, "timeslot": 2471}},
{"pk": 2472, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2247, "timeslot": 2472}},
{"pk": 2473, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2248, "timeslot": 2473}},
{"pk": 2474, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2249, "timeslot": 2474}},
{"pk": 2475, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2250, "timeslot": 2475}},
{"pk": 2476, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2251, "timeslot": 2476}},
{"pk": 2477, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2252, "timeslot": 2477}},
{"pk": 2478, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2253, "timeslot": 2478}},
{"pk": 2479, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2254, "timeslot": 2479}},
{"pk": 2480, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2255, "timeslot": 2480}},
{"pk": 2481, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2256, "timeslot": 2481}},
{"pk": 2482, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2257, "timeslot": 2482}},
{"pk": 2483, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2258, "timeslot": 2483}},
{"pk": 2484, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2259, "timeslot": 2484}},
{"pk": 2485, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2260, "timeslot": 2485}},
{"pk": 2486, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 12260, "timeslot": 2486}},
{"pk": 2487, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2261, "timeslot": 2487}},
{"pk": 2488, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2262, "timeslot": 2488}},
{"pk": 2489, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2281, "timeslot": 2489}},
{"pk": 2490, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2265, "timeslot": 2490}},
{"pk": 2491, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2266, "timeslot": 2491}},
{"pk": 2492, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2267, "timeslot": 2492}},
{"pk": 2493, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2268, "timeslot": 2493}},
{"pk": 2494, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2270, "timeslot": 2494}},
{"pk": 2495, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2270, "timeslot": 2495}},
{"pk": 2496, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2271, "timeslot": 2496}},
{"pk": 2497, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2272, "timeslot": 2497}},
{"pk": 2498, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2273, "timeslot": 2498}},
{"pk": 2499, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2274, "timeslot": 2499}},
{"pk": 2500, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2275, "timeslot": 2500}},
{"pk": 2501, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2276, "timeslot": 2501}},
{"pk": 2502, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2277, "timeslot": 2502}},
{"pk": 2503, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2278, "timeslot": 2503}},
{"pk": 2504, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2279, "timeslot": 2504}},
{"pk": 2505, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2280, "timeslot": 2505}},
{"pk": 2506, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22087, "timeslot": 2506}},
{"pk": 2507, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2282, "timeslot": 2507}},
{"pk": 2508, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2283, "timeslot": 2508}},
{"pk": 2509, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2284, "timeslot": 2509}},
{"pk": 2510, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2285, "timeslot": 2510}},
{"pk": 2511, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2286, "timeslot": 2511}},
{"pk": 2512, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2287, "timeslot": 2512}},
{"pk": 2513, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2287, "timeslot": 2513}},
{"pk": 2514, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2288, "timeslot": 2514}},
{"pk": 2515, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22081, "timeslot": 2920}},
{"pk": 2516, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22083, "timeslot": 2923}},
{"pk": 2517, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22085, "timeslot": 2924}},
{"pk": 2518, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 2263, "timeslot": 2925}},
{"pk": 2519, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "Auto created", "session": 22089, "timeslot": 2926}},
{"pk": 92520, "model": "meeting.scheduledsession", "fields": {"schedule": 24, "notes": "manually created", "timeslot": 2933}},
{"pk": 206, "model": "meeting.room", "fields": {"meeting": 83, "name": "212/213", "capacity": 60}},
{"pk": 207, "model": "meeting.room", "fields": {"meeting": 83, "name": "243", "capacity": 100}},
{"pk": 208, "model": "meeting.room", "fields": {"meeting": 83, "name": "253", "capacity": 100}},
{"pk": 209, "model": "meeting.room", "fields": {"meeting": 83, "name": "252A", "capacity": 100}},
{"pk": 210, "model": "meeting.room", "fields": {"meeting": 83, "name": "241", "capacity": 200}},
{"pk": 211, "model": "meeting.room", "fields": {"meeting": 83, "name": "252B", "capacity": 200}},
{"pk": 212, "model": "meeting.room", "fields": {"meeting": 83, "name": "242AB", "capacity": 260}},
{"pk": 213, "model": "meeting.room", "fields": {"meeting": 83, "name": "Maillot", "capacity": 380}},
{"pk": 214, "model": "meeting.room", "fields": {"meeting": 83, "name": "Amphitheatre Bleu", "capacity": 826}},
{"pk": 215, "model": "meeting.room", "fields": {"meeting": 83, "name": "Hall Maillot A", "capacity": 1000}},
{"pk": 216, "model": "meeting.room", "fields": {"meeting": 83, "name": "Salon Etoile d'Or (Concorde Hotel)", "capacity": 1000}},
{"pk": 2371, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2372, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2373, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2374, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2375, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2376, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2377, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2378, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2379, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2380, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2381, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2382, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2383, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2384, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2385, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2386, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2387, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2388, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2389, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2390, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2391, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2392, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2393, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-03-05 13:56:51", "location": 210, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2394, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2395, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2396, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2397, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2398, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2399, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-03-01 08:29:17", "location": 213, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2400, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2401, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2402, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2403, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2404, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2405, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2406, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2407, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2408, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2409, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2410, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2411, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2412, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2413, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2414, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2415, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2416, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2417, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-24 00:00:00", "location": 213, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2418, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-24 00:00:00", "location": 211, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2419, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2420, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2421, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2422, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2423, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2424, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2425, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2426, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2427, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2428, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-03-01 08:28:55", "location": 212, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2429, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2430, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2431, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2432, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2433, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2434, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2435, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2436, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2437, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2438, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2439, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2440, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2441, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2442, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-29 17:40:00", "duration": 7200, "type": "session"}},
{"pk": 2443, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2444, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2445, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2446, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2447, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2448, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2449, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2450, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2451, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2452, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2453, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2454, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2455, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2456, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2457, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2458, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2459, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2460, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2461, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2462, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2463, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2464, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2465, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2466, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2467, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2468, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2469, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session III", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2470, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2471, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2472, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2473, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2474, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2475, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2476, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2477, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2478, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-27 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2479, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2480, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-29 15:20:00", "duration": 7200, "type": "session"}},
{"pk": 2481, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2482, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-26 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2483, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2484, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2485, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2486, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2487, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-28 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2488, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-29 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2489, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-03-24 03:15:31", "location": 209, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2490, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2491, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2492, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 212, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2493, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-30 09:00:00", "duration": 7200, "type": "session"}},
{"pk": 2494, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2495, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 206, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2496, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 208, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2497, "model": "meeting.timeslot", "fields": {"name": "IETF Operations and Administration Plenary", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 214, "show_location": true, "time": "2012-03-28 16:30:00", "duration": 10800, "type": "plenary"}},
{"pk": 2498, "model": "meeting.timeslot", "fields": {"name": "Technical Plenary", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 214, "show_location": true, "time": "2012-03-26 16:30:00", "duration": 10800, "type": "plenary"}},
{"pk": 2499, "model": "meeting.timeslot", "fields": {"name": "Tools for Creating Internet-Drafts Tutorial", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-25 13:00:00", "duration": 6600, "type": "other"}},
{"pk": 2500, "model": "meeting.timeslot", "fields": {"name": "Newcomers' Orientation", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-25 13:00:00", "duration": 6600, "type": "other"}},
{"pk": 2501, "model": "meeting.timeslot", "fields": {"name": "Operations, Administration, and Maintenance Tutorial", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-25 15:00:00", "duration": 6600, "type": "other"}},
{"pk": 2502, "model": "meeting.timeslot", "fields": {"name": "Newcomers' Orientation (French)", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 211, "show_location": true, "time": "2012-03-25 15:00:00", "duration": 6600, "type": "other"}},
{"pk": 2503, "model": "meeting.timeslot", "fields": {"name": "Meetecho Tutorial for Participants and WG Chairs", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-25 13:00:00", "duration": 6600, "type": "other"}},
{"pk": 2504, "model": "meeting.timeslot", "fields": {"name": "Welcome Reception", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 215, "show_location": true, "time": "2012-03-25 17:00:00", "duration": 7200, "type": "other"}},
{"pk": 2505, "model": "meeting.timeslot", "fields": {"name": "Newcomers' Meet and Greet (open to Newcomers and WG chairs only)", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 216, "show_location": true, "time": "2012-03-25 16:00:00", "duration": 3600, "type": "other"}},
{"pk": 2506, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-03-24 03:16:22", "location": 210, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2507, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 210, "show_location": true, "time": "2012-03-26 15:10:00", "duration": 3600, "type": "session"}},
{"pk": 2508, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-27 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2509, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-27 15:20:00", "duration": 6000, "type": "session"}},
{"pk": 2510, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 213, "show_location": true, "time": "2012-03-28 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2511, "model": "meeting.timeslot", "fields": {"name": "Morning Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 209, "show_location": true, "time": "2012-03-29 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2512, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-30 11:20:00", "duration": 3600, "type": "session"}},
{"pk": 2513, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session II", "meeting": 83, "modified": "2012-02-23 00:00:00", "location": 207, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2514, "model": "meeting.timeslot", "fields": {"name": "IEPG Meeting", "meeting": 83, "modified": "2012-02-24 00:00:00", "location": 210, "show_location": true, "time": "2012-03-25 10:00:00", "duration": 7200, "type": "other"}},
{"pk": 2898, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-25 11:00:00", "duration": 28800, "type": "reg"}},
{"pk": 2899, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-26 08:00:00", "duration": 36000, "type": "reg"}},
{"pk": 2900, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-27 08:00:00", "duration": 36000, "type": "reg"}},
{"pk": 2901, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-28 08:00:00", "duration": 32400, "type": "reg"}},
{"pk": 2902, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-29 08:00:00", "duration": 32400, "type": "reg"}},
{"pk": 2903, "model": "meeting.timeslot", "fields": {"name": "IETF Registration", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-30 08:00:00", "duration": 10800, "type": "reg"}},
{"pk": 2904, "model": "meeting.timeslot", "fields": {"name": "Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-25 11:30:00", "duration": 5400, "type": "break"}},
{"pk": 2905, "model": "meeting.timeslot", "fields": {"name": "Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-26 11:30:00", "duration": 5400, "type": "break"}},
{"pk": 2906, "model": "meeting.timeslot", "fields": {"name": "Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-27 11:30:00", "duration": 5400, "type": "break"}},
{"pk": 2907, "model": "meeting.timeslot", "fields": {"name": "Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "break"}},
{"pk": 2908, "model": "meeting.timeslot", "fields": {"name": "Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-29 11:30:00", "duration": 5400, "type": "break"}},
{"pk": 2909, "model": "meeting.timeslot", "fields": {"name": "Beverages", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-26 08:00:00", "duration": 3600, "type": "break"}},
{"pk": 2910, "model": "meeting.timeslot", "fields": {"name": "Beverages", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-27 08:00:00", "duration": 3600, "type": "break"}},
{"pk": 2911, "model": "meeting.timeslot", "fields": {"name": "Beverages", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-28 08:00:00", "duration": 3600, "type": "break"}},
{"pk": 2912, "model": "meeting.timeslot", "fields": {"name": "Beverages", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-29 08:00:00", "duration": 3600, "type": "break"}},
{"pk": 2913, "model": "meeting.timeslot", "fields": {"name": "Beverages", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-30 08:00:00", "duration": 3600, "type": "break"}},
{"pk": 2914, "model": "meeting.timeslot", "fields": {"name": "Beverage and Snack Break I", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-26 16:10:00", "duration": 1200, "type": "break"}},
{"pk": 2915, "model": "meeting.timeslot", "fields": {"name": "Beverage and Snack Break I", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-27 15:00:00", "duration": 1200, "type": "break"}},
{"pk": 2916, "model": "meeting.timeslot", "fields": {"name": "Beverage and Snack Break I", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-28 16:10:00", "duration": 1200, "type": "break"}},
{"pk": 2917, "model": "meeting.timeslot", "fields": {"name": "Beverage and Snack Break I", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-30 11:00:00", "duration": 1200, "type": "break"}},
{"pk": 2918, "model": "meeting.timeslot", "fields": {"name": "Beverage and Snack Break II", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-29 17:20:00", "duration": 1200, "type": "break"}},
{"pk": 2919, "model": "meeting.timeslot", "fields": {"name": "Beverage Break", "meeting": 83, "modified": "2012-02-26 00:36:50", "location": null, "show_location": true, "time": "2012-03-29 15:00:00", "duration": 1200, "type": "break"}},
{"pk": 2920, "model": "meeting.timeslot", "fields": {"name": "", "meeting": 83, "modified": "2012-02-27 19:16:01", "location": 213, "show_location": true, "time": "2012-03-27 17:10:00", "duration": 3600, "type": "session"}},
{"pk": 2921, "model": "meeting.timeslot", "fields": {"name": "", "meeting": 83, "modified": "2012-02-27 19:21:15", "location": 213, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2923, "model": "meeting.timeslot", "fields": {"name": "Code Sprint", "meeting": 83, "modified": "2012-03-05 11:15:18", "location": 215, "show_location": true, "time": "2012-03-24 09:30:00", "duration": 30600, "type": "other"}},
{"pk": 2924, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-03-10 13:38:37", "location": 208, "show_location": true, "time": "2012-03-28 09:00:00", "duration": 9000, "type": "session"}},
{"pk": 2925, "model": "meeting.timeslot", "fields": {"name": "Afternoon Session I", "meeting": 83, "modified": "2012-03-24 03:24:15", "location": 206, "show_location": true, "time": "2012-03-26 13:00:00", "duration": 7200, "type": "session"}},
{"pk": 2926, "model": "meeting.timeslot", "fields": {"name": "Working Group Chairs' Lunch Tutorial", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 211, "show_location": false, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "other"}},
{"pk": 2927, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 206, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2928, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 207, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2929, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 209, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2930, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 210, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2931, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 212, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2932, "model": "meeting.timeslot", "fields": {"name": "Lunch BOF session", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 216, "show_location": true, "time": "2012-03-28 11:30:00", "duration": 5400, "type": "session"}},
{"pk": 2933, "model": "meeting.timeslot", "fields": {"name": "Afternoon session II", "meeting": 83, "modified": "2012-03-28 09:52:00", "location": 209, "show_location": true, "time": "2012-03-30 12:30:00", "duration": 3600, "type": "session"}},
{"pk": 2157, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 45, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "please, no evening sessions.", "requested_by": 630, "scheduled": "2012-02-23 00:00:00", "group": 1223, "meeting": 83, "requested_duration": 7200}},
{"pk": 2158, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109802, "scheduled": "2012-02-23 00:00:00", "group": 1619, "meeting": 83, "requested_duration": 5400}},
{"pk": 2159, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102154, "scheduled": "2012-02-23 00:00:00", "group": 1802, "meeting": 83, "requested_duration": 7200}},
{"pk": 2160, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with APPAREA", "modified": "2012-02-23 00:00:00", "comments": "Please list this on the schedule as shared with the AppsArea meeting (Monday morning). (other conflicts: All Apps and Sec Area BoFs)", "requested_by": 102154, "scheduled": "2012-02-23 00:00:00", "group": 1805, "meeting": 83, "requested_duration": 9000}},
{"pk": 2161, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "we would prefer meeting on Mon/Tue", "requested_by": 105992, "scheduled": "2012-02-23 00:00:00", "group": 1747, "meeting": 83, "requested_duration": 9000}},
{"pk": 2162, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF RRG, RTG BOFs, VNRG, SDN)", "requested_by": 10064, "scheduled": "2012-02-23 00:00:00", "group": 1524, "meeting": 83, "requested_duration": 9000}},
{"pk": 12162, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF RRG, RTG BOFs, VNRG, SDN)", "requested_by": 10064, "scheduled": "2012-02-23 00:00:00", "group": 1524, "meeting": 83, "requested_duration": 7200}},
{"pk": 2163, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "French Ice Cream for ADs (other conflicts: IRTF RRG, RTG BOFs)", "requested_by": 106471, "scheduled": "2012-02-23 00:00:00", "group": 1404, "meeting": 83, "requested_duration": 7200}},
{"pk": 2164, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108822, "scheduled": "2012-02-23 00:00:00", "group": 1751, "meeting": 83, "requested_duration": 5400}},
{"pk": 2165, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "none", "requested_by": 6766, "scheduled": "2012-02-23 00:00:00", "group": 1546, "meeting": 83, "requested_duration": 7200}},
{"pk": 2166, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102848, "scheduled": "2012-02-23 00:00:00", "group": 1138, "meeting": 83, "requested_duration": 9000}},
{"pk": 2167, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108213, "scheduled": "2012-02-23 00:00:00", "group": 1630, "meeting": 83, "requested_duration": 7200}},
{"pk": 2168, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "NETCONF is very much related to NETMOD. If possible please schedule NETCONF and NETMOD sessions on subsequent days. (other conflicts: nmrg)", "requested_by": 21106, "scheduled": "2012-02-23 00:00:00", "group": 1638, "meeting": 83, "requested_duration": 7200}},
{"pk": 2169, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 45, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: nmrg ncrg)", "requested_by": 109354, "scheduled": "2012-02-23 00:00:00", "group": 1831, "meeting": 83, "requested_duration": 3600}},
{"pk": 2170, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 90, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "would like to have meetecho available", "requested_by": 6771, "scheduled": "2012-02-23 00:00:00", "group": 1830, "meeting": 83, "requested_duration": 5400}},
{"pk": 2171, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We also wish to avoid the following sessions:\r\n\r\nmext\r\nsoftwire\r\ndnsext\r\nbehave\r\nv6ops\r\nhomenet\r\n\r\nDue to travel scheduling we would prefer a Thursday session if possible.", "requested_by": 107618, "scheduled": "2012-02-23 00:00:00", "group": 988, "meeting": 83, "requested_duration": 9000}},
{"pk": 2172, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 10784, "scheduled": "2012-02-23 00:00:00", "group": 1188, "meeting": 83, "requested_duration": 7200}},
{"pk": 2173, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-21 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: rrg, kidns, armd, nbs, plasma)", "requested_by": 21395, "scheduled": "2012-02-23 00:00:00", "group": 1737, "meeting": 83, "requested_duration": 7200}},
{"pk": 2174, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-29 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule early in the week.\r\nThanks.", "requested_by": 102391, "scheduled": "2012-02-23 00:00:00", "group": 1650, "meeting": 83, "requested_duration": 7200}},
{"pk": 12174, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-29 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule early in the week.\r\nThanks.", "requested_by": 102391, "scheduled": "2012-02-23 00:00:00", "group": 1650, "meeting": 83, "requested_duration": 3600}},
{"pk": 2175, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-31 00:00:00", "short": "", "attendees": 300, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 20959, "scheduled": "2012-02-23 00:00:00", "group": 1578, "meeting": 83, "requested_duration": 9000}},
{"pk": 12175, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-31 00:00:00", "short": "", "attendees": 300, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 20959, "scheduled": "2012-02-23 00:00:00", "group": 1578, "meeting": 83, "requested_duration": 7200}},
{"pk": 2176, "model": "meeting.session", "fields": {"status": "schedw", "requested": "2012-01-02 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-03-05 13:55:42", "comments": "", "requested_by": 109800, "scheduled": "2012-02-23 00:00:00", "group": 1720, "meeting": 83, "requested_duration": 9000}},
{"pk": 2177, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-03 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule Tuesday if possible. It's been on Tuesday lately which has been perfect. (other conflicts: multrans)", "requested_by": 106173, "scheduled": "2012-02-23 00:00:00", "group": 1397, "meeting": 83, "requested_duration": 7200}},
{"pk": 2178, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106269, "scheduled": "2012-02-23 00:00:00", "group": 1730, "meeting": 83, "requested_duration": 7200}},
{"pk": 2179, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109800, "scheduled": "2012-02-23 00:00:00", "group": 1682, "meeting": 83, "requested_duration": 7200}},
{"pk": 2180, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please try to schedule a session early in the week as we used to have always in the past. Thanks, Patrick", "requested_by": 19925, "scheduled": "2012-02-23 00:00:00", "group": 1518, "meeting": 83, "requested_duration": 3600}},
{"pk": 2182, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-05 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "NETCONF is related to NETMOD. If possible please schedule NETCONF and NETMOD sessions on subsequent days at the beginning of the week, e.g. NETCONF on Monday and NETMOD on Tuesday. Thank you. (other conflicts: nmrg dc IoT)", "requested_by": 105537, "scheduled": "2012-02-23 00:00:00", "group": 1575, "meeting": 83, "requested_duration": 3600}},
{"pk": 2183, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-03-01 08:28:55", "comments": "", "requested_by": 109059, "scheduled": "2012-02-23 00:00:00", "group": 1803, "meeting": 83, "requested_duration": 9000}},
{"pk": 2184, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with OPSAWG", "modified": "2012-03-07 09:02:17", "comments": "List this session as both the O&M Area Open meeting and the OPSAWG meeting", "requested_by": 101568, "scheduled": "2012-02-23 00:00:00", "group": 1399, "meeting": 83, "requested_duration": 9000}},
{"pk": 2185, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Would prefer a mtg on Tues/Wed/Thurs", "requested_by": 104329, "scheduled": "2012-02-23 00:00:00", "group": 1118, "meeting": 83, "requested_duration": 9000}},
{"pk": 2186, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Several of the key WG member cannot participate Friday. So please restrict times to other days.", "requested_by": 18331, "scheduled": "2012-02-23 00:00:00", "group": 1132, "meeting": 83, "requested_duration": 7200}},
{"pk": 2187, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-08 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Friday is not preferred (other conflicts: p2prg, vnrg)", "requested_by": 109919, "scheduled": "2012-02-23 00:00:00", "group": 1771, "meeting": 83, "requested_duration": 9000}},
{"pk": 2188, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (mainly for mpls-tp related sessions as many actors of mpls-tp design are not necessarily able to travel) (other conflicts: rrg)", "requested_by": 108279, "scheduled": "2012-02-23 00:00:00", "group": 1140, "meeting": 83, "requested_duration": 9000}},
{"pk": 12188, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (mainly for mpls-tp related sessions as many actors of mpls-tp design are not necessarily able to travel) (other conflicts: rrg)", "requested_by": 108279, "scheduled": "2012-02-23 00:00:00", "group": 1140, "meeting": 83, "requested_duration": 7200}},
{"pk": 2189, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 111091, "scheduled": "2012-02-23 00:00:00", "group": 1788, "meeting": 83, "requested_duration": 7200}},
{"pk": 2190, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1763, "meeting": 83, "requested_duration": 7200}},
{"pk": 2191, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "CANCELED", "modified": "2012-03-16 11:54:56", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1765, "meeting": 83, "requested_duration": 3600}},
{"pk": 2192, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1820, "meeting": 83, "requested_duration": 9000}},
{"pk": 12192, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1820, "meeting": 83, "requested_duration": 9000}},
{"pk": 2193, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1789, "meeting": 83, "requested_duration": 7200}},
{"pk": 12193, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "scheduled": "2012-02-23 00:00:00", "group": 1789, "meeting": 83, "requested_duration": 7200}},
{"pk": 2194, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102830, "scheduled": "2012-02-23 00:00:00", "group": 1816, "meeting": 83, "requested_duration": 9000}},
{"pk": 12194, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102830, "scheduled": "2012-02-23 00:00:00", "group": 1816, "meeting": 83, "requested_duration": 7200}},
{"pk": 2195, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105328, "scheduled": "2012-02-23 00:00:00", "group": 1678, "meeting": 83, "requested_duration": 3600}},
{"pk": 12195, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105328, "scheduled": "2012-02-23 00:00:00", "group": 1678, "meeting": 83, "requested_duration": 7200}},
{"pk": 2196, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 105328, "scheduled": "2012-02-24 00:00:00", "group": 1800, "meeting": 83, "requested_duration": 3600}},
{"pk": 12196, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 105328, "scheduled": "2012-02-24 00:00:00", "group": 1800, "meeting": 83, "requested_duration": 7200}},
{"pk": 2197, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule for afternoon. A number of key participants will be participating remotely, from the U.S.\r\n\r\nThanks!\r\n\r\n/d", "requested_by": 100927, "scheduled": "2012-02-23 00:00:00", "group": 1827, "meeting": 83, "requested_duration": 5400}},
{"pk": 2198, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-12 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "An early in the week slot would be preferred.", "requested_by": 12671, "scheduled": "2012-02-23 00:00:00", "group": 1437, "meeting": 83, "requested_duration": 3600}},
{"pk": 2199, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-12 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105046, "scheduled": "2012-02-23 00:00:00", "group": 1628, "meeting": 83, "requested_duration": 3600}},
{"pk": 2200, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106812, "scheduled": "2012-02-23 00:00:00", "group": 1796, "meeting": 83, "requested_duration": 3600}},
{"pk": 2201, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: p2prg)", "requested_by": 106812, "scheduled": "2012-02-23 00:00:00", "group": 1744, "meeting": 83, "requested_duration": 7200}},
{"pk": 2202, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 110, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 4836, "scheduled": "2012-02-23 00:00:00", "group": 1041, "meeting": 83, "requested_duration": 9000}},
{"pk": 2203, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 13219, "scheduled": "2012-02-23 00:00:00", "group": 1680, "meeting": 83, "requested_duration": 9000}},
{"pk": 2204, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-15 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: sdnp)", "requested_by": 109430, "scheduled": "2012-02-23 00:00:00", "group": 1780, "meeting": 83, "requested_duration": 7200}},
{"pk": 2205, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108624, "scheduled": "2012-02-23 00:00:00", "group": 1674, "meeting": 83, "requested_duration": 7200}},
{"pk": 2206, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-03-01 08:29:17", "comments": "Please avoid any IAOC meetings,", "requested_by": 100664, "scheduled": "2012-02-23 00:00:00", "group": 1723, "meeting": 83, "requested_duration": 9000}},
{"pk": 2207, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: P2PRG)", "requested_by": 107491, "scheduled": "2012-02-23 00:00:00", "group": 1791, "meeting": 83, "requested_duration": 3600}},
{"pk": 2208, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107520, "scheduled": "2012-02-23 00:00:00", "group": 1815, "meeting": 83, "requested_duration": 7200}},
{"pk": 2209, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109884, "scheduled": "2012-02-23 00:00:00", "group": 1755, "meeting": 83, "requested_duration": 7200}},
{"pk": 2210, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 103769, "scheduled": "2012-02-23 00:00:00", "group": 1762, "meeting": 83, "requested_duration": 3600}},
{"pk": 2211, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 103283, "scheduled": "2012-02-23 00:00:00", "group": 1756, "meeting": 83, "requested_duration": 7200}},
{"pk": 2212, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please consider placing this in a consecutive sequence with AVTCORE, such that we can run as a single session with a change of chairs. This may be dependent also on the needs of XRBLOCK to meet or not meet.", "requested_by": 105097, "scheduled": "2012-02-23 00:00:00", "group": 1813, "meeting": 83, "requested_duration": 3600}},
{"pk": 2213, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105097, "scheduled": "2012-02-23 00:00:00", "group": 1832, "meeting": 83, "requested_duration": 3600}},
{"pk": 2214, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please no Friday,", "requested_by": 3760, "scheduled": "2012-02-23 00:00:00", "group": 1479, "meeting": 83, "requested_duration": 3600}},
{"pk": 2215, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We can live with 2 slots of one hour if that facilitates the scheduling (other conflicts: ICCRG, Complexity RG)", "requested_by": 105255, "scheduled": "2012-02-23 00:00:00", "group": 1775, "meeting": 83, "requested_duration": 7200}},
{"pk": 2216, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105873, "scheduled": "2012-02-23 00:00:00", "group": 1812, "meeting": 83, "requested_duration": 9000}},
{"pk": 2217, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108049, "scheduled": "2012-02-23 00:00:00", "group": 1543, "meeting": 83, "requested_duration": 5400}},
{"pk": 2218, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "not on Friday, please", "requested_by": 108049, "scheduled": "2012-02-23 00:00:00", "group": 1643, "meeting": 83, "requested_duration": 7200}},
{"pk": 2219, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Can we have the last session on Thursday? We used to do it right after lunch, last time we moved it one slot later in the day, but this time we'd like to have the last 2hr slot of Thursday. Thanks!", "requested_by": 19483, "scheduled": "2012-02-23 00:00:00", "group": 1187, "meeting": 83, "requested_duration": 7200}},
{"pk": 2220, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107406, "scheduled": "2012-02-23 00:00:00", "group": 1739, "meeting": 83, "requested_duration": 5400}},
{"pk": 2221, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: ICCRG, rmcat BoF (RTP congestion control))", "requested_by": 110636, "scheduled": "2012-02-23 00:00:00", "group": 1620, "meeting": 83, "requested_duration": 7200}},
{"pk": 2222, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: nmrg)", "requested_by": 13775, "scheduled": "2012-02-23 00:00:00", "group": 47, "meeting": 83, "requested_duration": 9000}},
{"pk": 2223, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday-Wednesday preferred (other conflicts: any TSV BOFs, e.g. there has been talk about doing a BOF on RTP congestion control, that would collide)", "requested_by": 103877, "scheduled": "2012-02-23 00:00:00", "group": 42, "meeting": 83, "requested_duration": 9000}},
{"pk": 2224, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107363, "scheduled": "2012-02-23 00:00:00", "group": 1452, "meeting": 83, "requested_duration": 3600}},
{"pk": 2225, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 21097, "scheduled": "2012-02-23 00:00:00", "group": 1152, "meeting": 83, "requested_duration": 9000}},
{"pk": 2227, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-19 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please avoid conflict with any App or Sec area BoFs.", "requested_by": 106842, "scheduled": "2012-02-23 00:00:00", "group": 1783, "meeting": 83, "requested_duration": 3600}},
{"pk": 2228, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-19 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 111434, "scheduled": "2012-02-23 00:00:00", "group": 1612, "meeting": 83, "requested_duration": 5400}},
{"pk": 2229, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-20 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "we have been on the Friday 4 times in a row now, would be nice to be on another day for a change, but no big deal if not. (other conflicts: in general any Security Area WG or BOFs)", "requested_by": 109496, "scheduled": "2012-02-23 00:00:00", "group": 1804, "meeting": 83, "requested_duration": 5400}},
{"pk": 2230, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-20 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Could also be 1.5 hours. Can *not* be on Friday because one chair (Paul Hoffman) will be hosting a BoF on Friday.", "requested_by": 10083, "scheduled": "2012-02-23 00:00:00", "group": 1740, "meeting": 83, "requested_duration": 3600}},
{"pk": 2231, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-22 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule Mon-Wed (co-chair needs to be in Orlando at IEEE Global Internet Symposium on Friday and hence leave on Thursday morning) (other conflicts: ICN, Internet-of-Things)", "requested_by": 11842, "scheduled": "2012-02-23 00:00:00", "group": 32, "meeting": 83, "requested_duration": 9000}},
{"pk": 2232, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107998, "scheduled": "2012-02-23 00:00:00", "group": 1764, "meeting": 83, "requested_duration": 7200}},
{"pk": 2233, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 104935, "scheduled": "2012-02-23 00:00:00", "group": 1593, "meeting": 83, "requested_duration": 7200}},
{"pk": 2234, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: WEIRDS)", "requested_by": 106296, "scheduled": "2012-02-23 00:00:00", "group": 1792, "meeting": 83, "requested_duration": 3600}},
{"pk": 2235, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105786, "scheduled": "2012-02-23 00:00:00", "group": 1538, "meeting": 83, "requested_duration": 9000}},
{"pk": 2236, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105786, "scheduled": "2012-02-23 00:00:00", "group": 1693, "meeting": 83, "requested_duration": 5400}},
{"pk": 2237, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (we always have remote attendees).", "requested_by": 111529, "scheduled": "2012-02-23 00:00:00", "group": 1801, "meeting": 83, "requested_duration": 7200}},
{"pk": 2238, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday and Tuesday preferable. 2.5 hour slot(s) are fine too.", "requested_by": 103881, "scheduled": "2012-02-23 00:00:00", "group": 1718, "meeting": 83, "requested_duration": 7200}},
{"pk": 12238, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday and Tuesday preferable. 2.5 hour slot(s) are fine too.", "requested_by": 103881, "scheduled": "2012-02-23 00:00:00", "group": 1718, "meeting": 83, "requested_duration": 7200}},
{"pk": 2239, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107131, "scheduled": "2012-02-23 00:00:00", "group": 1760, "meeting": 83, "requested_duration": 3600}},
{"pk": 2240, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: rrg cloud dcops sdnp sdn)", "requested_by": 112438, "scheduled": "2012-02-23 00:00:00", "group": 1807, "meeting": 83, "requested_duration": 3600}},
{"pk": 2241, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "not Friday", "requested_by": 107041, "scheduled": "2012-02-23 00:00:00", "group": 1798, "meeting": 83, "requested_duration": 7200}},
{"pk": 2242, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please avoid all other TSV area sessions, including tsvarea. (other conflicts: iccrg, tmrg \r\nand, if possible, all BoFs in TSV or RAI)", "requested_by": 104331, "scheduled": "2012-02-23 00:00:00", "group": 1463, "meeting": 83, "requested_duration": 9000}},
{"pk": 2243, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-25 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102900, "scheduled": "2012-02-23 00:00:00", "group": 945, "meeting": 83, "requested_duration": 7200}},
{"pk": 2244, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-25 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 22933, "scheduled": "2012-02-23 00:00:00", "group": 1102, "meeting": 83, "requested_duration": 3600}},
{"pk": 2245, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "No request per se for WebEx as yet, could be handy to have available if requested later.", "requested_by": 106461, "scheduled": "2012-02-23 00:00:00", "group": 1824, "meeting": 83, "requested_duration": 5400}},
{"pk": 2246, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please do not schedule the NEA WG meeting on Friday. Chair cannot attend on that day.", "requested_by": 15448, "scheduled": "2012-02-23 00:00:00", "group": 1688, "meeting": 83, "requested_duration": 7200}},
{"pk": 2247, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108304, "scheduled": "2012-02-23 00:00:00", "group": 1599, "meeting": 83, "requested_duration": 3600}},
{"pk": 2248, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 100603, "scheduled": "2012-02-23 00:00:00", "group": 1089, "meeting": 83, "requested_duration": 7200}},
{"pk": 2249, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108123, "scheduled": "2012-02-23 00:00:00", "group": 1819, "meeting": 83, "requested_duration": 9000}},
{"pk": 2250, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "Combined with KITTEN", "modified": "2012-02-23 00:00:00", "comments": "This will be a combined session for krb-wg and kitten. Please be sure to consider any requests made by other WGs to avoid conflicts with either krb-wg or kitten.\r\n\r\nWe're still working out how to handle the agendas; we may end up publishing a combined agenda or separate agendas for each group.\r\n\r\nExtra microphones (at least 2) to pass around the room. Wireless mics are nice, but wired ones will also work.", "requested_by": 104978, "scheduled": "2012-02-23 00:00:00", "group": 1496, "meeting": 83, "requested_duration": 7200}},
{"pk": 2251, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 15, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF open meeting, P2PRG, multrans BoF)", "requested_by": 106348, "scheduled": "2012-02-23 00:00:00", "group": 41, "meeting": 83, "requested_duration": 5400}},
{"pk": 2252, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 104140, "scheduled": "2012-02-23 00:00:00", "group": 1761, "meeting": 83, "requested_duration": 3600}},
{"pk": 2253, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-28 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "Combined with KRB-WG", "modified": "2012-02-23 00:00:00", "comments": "This will be a combined session for krb-wg and kitten. Please be sure to consider any requests made by other WGs to avoid conflicts with either krb-wg or kitten. We're still working out how to handle the agendas; we may end up publishing a combined agenda or separate agendas for each group. Extra microphones (at least 2) to pass around the room. Wireless mics are nice, but wired ones will also work.", "requested_by": 107956, "scheduled": "2012-02-23 00:00:00", "group": 1634, "meeting": 83, "requested_duration": 7200}},
{"pk": 2254, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-29 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101208, "scheduled": "2012-02-23 00:00:00", "group": 1326, "meeting": 83, "requested_duration": 3600}},
{"pk": 2255, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 110531, "scheduled": "2012-02-23 00:00:00", "group": 1817, "meeting": 83, "requested_duration": 7200}},
{"pk": 2256, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107491, "scheduled": "2012-02-23 00:00:00", "group": 1777, "meeting": 83, "requested_duration": 7200}},
{"pk": 2257, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 35, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 4857, "scheduled": "2012-02-23 00:00:00", "group": 1709, "meeting": 83, "requested_duration": 7200}},
{"pk": 2258, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: P2PRG as First Priority)", "requested_by": 106438, "scheduled": "2012-02-23 00:00:00", "group": 1705, "meeting": 83, "requested_duration": 3600}},
{"pk": 2259, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: Please avoid conflict with any App or Sec area BoFs.)", "requested_by": 21684, "scheduled": "2012-02-23 00:00:00", "group": 1748, "meeting": 83, "requested_duration": 7200}},
{"pk": 2260, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101685, "scheduled": "2012-02-23 00:00:00", "group": 1822, "meeting": 83, "requested_duration": 5400}},
{"pk": 12260, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101685, "scheduled": "2012-02-23 00:00:00", "group": 1822, "meeting": 83, "requested_duration": 5400}},
{"pk": 2261, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106638, "scheduled": "2012-02-23 00:00:00", "group": 1701, "meeting": 83, "requested_duration": 5400}},
{"pk": 2262, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106412, "scheduled": "2012-02-23 00:00:00", "group": 1665, "meeting": 83, "requested_duration": 7200}},
{"pk": 2263, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "Room Changed From 252A", "modified": "2012-03-24 03:24:15", "comments": "", "requested_by": 106412, "scheduled": "2012-02-23 00:00:00", "group": 37, "meeting": 83, "requested_duration": 7200}},
{"pk": 2265, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "CANCELED", "modified": "2012-03-16 11:08:40", "comments": "additional 2nd priority conflict to avoid: all other APP area WGs and BOFs\r\n\r\nthanks (other conflicts: WEIRD (if became BOF), and all other BOFs in app-area)", "requested_by": 111335, "scheduled": "2012-02-23 00:00:00", "group": 1686, "meeting": 83, "requested_duration": 7200}},
{"pk": 2266, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We will require remote participation for most of the editors and the WG chair. Since editors and WG chairs are in the US and Japan it will be tough to find a good time. \r\n\r\nRequesting the earliest session either 8am or 9am, or the afternoon at 3pm.", "requested_by": 112547, "scheduled": "2012-02-23 00:00:00", "group": 1778, "meeting": 83, "requested_duration": 3600}},
{"pk": 2267, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-01 00:00:00", "short": "", "attendees": 90, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "scheduled": "2012-02-23 00:00:00", "group": 1584, "meeting": 83, "requested_duration": 5400}},
{"pk": 2268, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-03 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "scheduled": "2012-02-23 00:00:00", "group": 1836, "meeting": 83, "requested_duration": 7200}},
{"pk": 2270, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-09 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "scheduled": "2012-02-23 00:00:00", "group": 31, "meeting": 83, "requested_duration": 7200}},
{"pk": 2271, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-10 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "scheduled": "2012-02-23 00:00:00", "group": 1823, "meeting": 83, "requested_duration": 5400}},
{"pk": 2272, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "IETF Operations and Administration Plenary", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 2, "meeting": 83, "requested_duration": 0}},
{"pk": 2273, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Technical Plenary", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 7, "meeting": 83, "requested_duration": 0}},
{"pk": 2274, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Tools for Creating Internet-Drafts Tutorial", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2275, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Orientation", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2276, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Operations, Administration, and Maintenance Tutorial", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2277, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Orientation (French)", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2278, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Meetecho Tutorial for Participants and WG Chairs", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2279, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Welcome Reception", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2280, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Meet and Greet (open to Newcomers and WG chairs only)", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2281, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "Room Changed From 241", "modified": "2012-03-24 03:15:56", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1841, "meeting": 83, "requested_duration": 3600}},
{"pk": 2282, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1839, "meeting": 83, "requested_duration": 0}},
{"pk": 2283, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1844, "meeting": 83, "requested_duration": 0}},
{"pk": 2284, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1834, "meeting": 83, "requested_duration": 0}},
{"pk": 2285, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1840, "meeting": 83, "requested_duration": 0}},
{"pk": 2286, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1842, "meeting": 83, "requested_duration": 0}},
{"pk": 2287, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-23 00:00:00", "group": 1843, "meeting": 83, "requested_duration": 0}},
{"pk": 2288, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-24 00:00:00", "short": "", "attendees": null, "name": "IEPG Meeting", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 0, "scheduled": "2012-02-24 00:00:00", "group": 9, "meeting": 83, "requested_duration": 0}},
{"pk": 22038, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "scheduled": null, "group": 1799, "meeting": 83, "requested_duration": 0}},
{"pk": 22039, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "scheduled": null, "group": 1642, "meeting": 83, "requested_duration": 0}},
{"pk": 22040, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "scheduled": null, "group": 1814, "meeting": 83, "requested_duration": 0}},
{"pk": 22041, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "scheduled": null, "group": 1829, "meeting": 83, "requested_duration": 0}},
{"pk": 22042, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "scheduled": null, "group": 1527, "meeting": 83, "requested_duration": 0}},
{"pk": 22081, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-27 14:36:39", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-27 19:16:01", "comments": "", "requested_by": 108757, "scheduled": null, "group": 1845, "meeting": 83, "requested_duration": 3600}},
{"pk": 22083, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-05 11:15:18", "short": "", "attendees": null, "name": "Code Sprint", "agenda_note": "", "modified": "2012-03-05 11:15:18", "comments": "", "requested_by": 0, "scheduled": null, "group": 1712, "meeting": 83, "requested_duration": 0}},
{"pk": 22084, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-05 13:54:42", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-03-05 13:56:51", "comments": "", "requested_by": 108757, "scheduled": null, "group": 1847, "meeting": 83, "requested_duration": 9000}},
{"pk": 22085, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-07 09:01:03", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with OPSAREA", "modified": "2012-03-12 13:25:11", "comments": "", "requested_by": 108757, "scheduled": null, "group": 1714, "meeting": 83, "requested_duration": 9000}},
{"pk": 22087, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-24 02:51:38", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-03-24 03:16:22", "comments": "", "requested_by": 108757, "scheduled": null, "group": 1680, "meeting": 83, "requested_duration": 7200}},
{"pk": 22089, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-28 09:52:00", "short": "", "attendees": null, "name": "Working Group Chairs' Training", "agenda_note": "", "modified": "2012-03-28 09:52:00", "comments": "", "requested_by": 0, "scheduled": null, "group": 1591, "meeting": 83, "requested_duration": 0}}
]

View file

@ -0,0 +1,152 @@
[
{"pk": 2157, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 45, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "please, no evening sessions.", "requested_by": 630, "materials": ["agenda-83-pkix", "minutes-83-pkix", "slides-83-pkix-0", "slides-83-pkix-1", "slides-83-pkix-10", "slides-83-pkix-2", "slides-83-pkix-3", "slides-83-pkix-4", "slides-83-pkix-5", "slides-83-pkix-6", "slides-83-pkix-7", "slides-83-pkix-8", "slides-83-pkix-9"], "scheduled": "2012-02-23 00:00:00", "group": 1223, "meeting": 83, "requested_duration": 7200}},
{"pk": 2158, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109802, "materials": ["agenda-83-rtgwg", "minutes-83-rtgwg", "slides-83-rtgwg-0", "slides-83-rtgwg-1", "slides-83-rtgwg-10", "slides-83-rtgwg-11", "slides-83-rtgwg-2", "slides-83-rtgwg-3", "slides-83-rtgwg-4", "slides-83-rtgwg-5", "slides-83-rtgwg-6", "slides-83-rtgwg-7", "slides-83-rtgwg-8", "slides-83-rtgwg-9"], "scheduled": "2012-02-23 00:00:00", "group": 1619, "meeting": 83, "requested_duration": 5400}},
{"pk": 2159, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102154, "materials": ["agenda-83-websec", "minutes-83-websec", "slides-83-websec-0", "slides-83-websec-1", "slides-83-websec-2", "slides-83-websec-3", "slides-83-websec-4", "slides-83-websec-5"], "scheduled": "2012-02-23 00:00:00", "group": 1802, "meeting": 83, "requested_duration": 7200}},
{"pk": 2160, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with APPAREA", "modified": "2012-02-23 00:00:00", "comments": "Please list this on the schedule as shared with the AppsArea meeting (Monday morning). (other conflicts: All Apps and Sec Area BoFs)", "requested_by": 102154, "materials": ["agenda-83-appsawg", "minutes-83-appsawg", "slides-83-appsawg-0", "slides-83-appsawg-1", "slides-83-appsawg-2", "slides-83-appsawg-3", "slides-83-appsawg-4"], "scheduled": "2012-02-23 00:00:00", "group": 1805, "meeting": 83, "requested_duration": 9000}},
{"pk": 2161, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "we would prefer meeting on Mon/Tue", "requested_by": 105992, "materials": ["agenda-83-multimob", "minutes-83-multimob", "slides-83-multimob-0", "slides-83-multimob-1", "slides-83-multimob-2", "slides-83-multimob-3", "slides-83-multimob-4", "slides-83-multimob-5", "slides-83-multimob-6", "slides-83-multimob-7"], "scheduled": "2012-02-23 00:00:00", "group": 1747, "meeting": 83, "requested_duration": 9000}},
{"pk": 2162, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF RRG, RTG BOFs, VNRG, SDN)", "requested_by": 10064, "materials": ["agenda-83-ccamp", "minutes-83-ccamp", "slides-83-ccamp-0", "slides-83-ccamp-1", "slides-83-ccamp-10", "slides-83-ccamp-11", "slides-83-ccamp-12", "slides-83-ccamp-13", "slides-83-ccamp-14", "slides-83-ccamp-15", "slides-83-ccamp-16", "slides-83-ccamp-17", "slides-83-ccamp-18", "slides-83-ccamp-19", "slides-83-ccamp-2", "slides-83-ccamp-20", "slides-83-ccamp-21", "slides-83-ccamp-22", "slides-83-ccamp-23", "slides-83-ccamp-24", "slides-83-ccamp-25", "slides-83-ccamp-26", "slides-83-ccamp-27", "slides-83-ccamp-28", "slides-83-ccamp-29", "slides-83-ccamp-3", "slides-83-ccamp-30", "slides-83-ccamp-4", "slides-83-ccamp-5", "slides-83-ccamp-6", "slides-83-ccamp-7", "slides-83-ccamp-8", "slides-83-ccamp-9"], "scheduled": "2012-02-23 00:00:00", "group": 1524, "meeting": 83, "requested_duration": 9000}},
{"pk": 12162, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF RRG, RTG BOFs, VNRG, SDN)", "requested_by": 10064, "materials": ["agenda-83-ccamp", "minutes-83-ccamp", "slides-83-ccamp-0", "slides-83-ccamp-1", "slides-83-ccamp-10", "slides-83-ccamp-11", "slides-83-ccamp-12", "slides-83-ccamp-13", "slides-83-ccamp-14", "slides-83-ccamp-15", "slides-83-ccamp-16", "slides-83-ccamp-17", "slides-83-ccamp-18", "slides-83-ccamp-19", "slides-83-ccamp-2", "slides-83-ccamp-20", "slides-83-ccamp-21", "slides-83-ccamp-22", "slides-83-ccamp-23", "slides-83-ccamp-24", "slides-83-ccamp-25", "slides-83-ccamp-26", "slides-83-ccamp-27", "slides-83-ccamp-28", "slides-83-ccamp-29", "slides-83-ccamp-3", "slides-83-ccamp-30", "slides-83-ccamp-4", "slides-83-ccamp-5", "slides-83-ccamp-6", "slides-83-ccamp-7", "slides-83-ccamp-8", "slides-83-ccamp-9"], "scheduled": "2012-02-23 00:00:00", "group": 1524, "meeting": 83, "requested_duration": 7200}},
{"pk": 2163, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "French Ice Cream for ADs (other conflicts: IRTF RRG, RTG BOFs)", "requested_by": 106471, "materials": ["agenda-83-rtgarea", "minutes-83-rtgarea", "slides-83-rtgarea-0", "slides-83-rtgarea-1", "slides-83-rtgarea-2", "slides-83-rtgarea-3", "slides-83-rtgarea-4", "slides-83-rtgarea-5", "slides-83-rtgarea-6", "slides-83-rtgarea-7"], "scheduled": "2012-02-23 00:00:00", "group": 1404, "meeting": 83, "requested_duration": 7200}},
{"pk": 2164, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108822, "materials": ["agenda-83-lisp", "minutes-83-lisp", "slides-83-lisp-0", "slides-83-lisp-1", "slides-83-lisp-10", "slides-83-lisp-2", "slides-83-lisp-3", "slides-83-lisp-4", "slides-83-lisp-5", "slides-83-lisp-6", "slides-83-lisp-7", "slides-83-lisp-8", "slides-83-lisp-9"], "scheduled": "2012-02-23 00:00:00", "group": 1751, "meeting": 83, "requested_duration": 5400}},
{"pk": 2165, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "none", "requested_by": 6766, "materials": ["agenda-83-ipfix", "minutes-83-ipfix", "slides-83-ipfix-0", "slides-83-ipfix-1", "slides-83-ipfix-10", "slides-83-ipfix-11", "slides-83-ipfix-12", "slides-83-ipfix-13", "slides-83-ipfix-2", "slides-83-ipfix-3", "slides-83-ipfix-4", "slides-83-ipfix-5", "slides-83-ipfix-6", "slides-83-ipfix-7", "slides-83-ipfix-8", "slides-83-ipfix-9"], "scheduled": "2012-02-23 00:00:00", "group": 1546, "meeting": 83, "requested_duration": 7200}},
{"pk": 2166, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-19 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102848, "materials": ["agenda-83-mmusic", "minutes-83-mmusic", "slides-83-mmusic-0", "slides-83-mmusic-1", "slides-83-mmusic-10", "slides-83-mmusic-2", "slides-83-mmusic-3", "slides-83-mmusic-4", "slides-83-mmusic-5", "slides-83-mmusic-6", "slides-83-mmusic-7", "slides-83-mmusic-8", "slides-83-mmusic-9"], "scheduled": "2012-02-23 00:00:00", "group": 1138, "meeting": 83, "requested_duration": 9000}},
{"pk": 2167, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108213, "materials": ["agenda-83-pce", "minutes-83-pce", "slides-83-pce-0", "slides-83-pce-1", "slides-83-pce-10", "slides-83-pce-11", "slides-83-pce-12", "slides-83-pce-2", "slides-83-pce-3", "slides-83-pce-4", "slides-83-pce-5", "slides-83-pce-6", "slides-83-pce-7", "slides-83-pce-8", "slides-83-pce-9"], "scheduled": "2012-02-23 00:00:00", "group": 1630, "meeting": 83, "requested_duration": 7200}},
{"pk": 2168, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "NETCONF is very much related to NETMOD. If possible please schedule NETCONF and NETMOD sessions on subsequent days. (other conflicts: nmrg)", "requested_by": 21106, "materials": ["agenda-83-netmod", "minutes-83-netmod", "slides-83-netmod-0", "slides-83-netmod-1", "slides-83-netmod-2", "slides-83-netmod-3", "slides-83-netmod-4"], "scheduled": "2012-02-23 00:00:00", "group": 1638, "meeting": 83, "requested_duration": 7200}},
{"pk": 2169, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 45, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: nmrg ncrg)", "requested_by": 109354, "materials": ["agenda-83-mile", "minutes-83-mile", "slides-83-mile-0", "slides-83-mile-1", "slides-83-mile-2", "slides-83-mile-3", "slides-83-mile-4"], "scheduled": "2012-02-23 00:00:00", "group": 1831, "meeting": 83, "requested_duration": 3600}},
{"pk": 2170, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 90, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "would like to have meetecho available", "requested_by": 6771, "materials": ["agenda-83-jose", "minutes-83-jose", "slides-83-jose-0", "slides-83-jose-1", "slides-83-jose-2", "slides-83-jose-3", "slides-83-jose-4", "slides-83-jose-5", "slides-83-jose-6", "slides-83-jose-7", "slides-83-jose-8"], "scheduled": "2012-02-23 00:00:00", "group": 1830, "meeting": 83, "requested_duration": 5400}},
{"pk": 2171, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We also wish to avoid the following sessions:\r\n\r\nmext\r\nsoftwire\r\ndnsext\r\nbehave\r\nv6ops\r\nhomenet\r\n\r\nDue to travel scheduling we would prefer a Thursday session if possible.", "requested_by": 107618, "materials": ["agenda-83-dhc", "minutes-83-dhc", "slides-83-dhc-0", "slides-83-dhc-1", "slides-83-dhc-10", "slides-83-dhc-11", "slides-83-dhc-12", "slides-83-dhc-13", "slides-83-dhc-14", "slides-83-dhc-15", "slides-83-dhc-2", "slides-83-dhc-3", "slides-83-dhc-4", "slides-83-dhc-5", "slides-83-dhc-6", "slides-83-dhc-7", "slides-83-dhc-8", "slides-83-dhc-9"], "scheduled": "2012-02-23 00:00:00", "group": 988, "meeting": 83, "requested_duration": 9000}},
{"pk": 2172, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-20 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 10784, "materials": ["agenda-83-ospf", "minutes-83-ospf", "slides-83-ospf-0", "slides-83-ospf-1", "slides-83-ospf-2", "slides-83-ospf-3", "slides-83-ospf-4"], "scheduled": "2012-02-23 00:00:00", "group": 1188, "meeting": 83, "requested_duration": 7200}},
{"pk": 2173, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-21 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: rrg, kidns, armd, nbs, plasma)", "requested_by": 21395, "materials": ["agenda-83-karp", "minutes-83-karp", "slides-83-karp-0", "slides-83-karp-1", "slides-83-karp-2", "slides-83-karp-3", "slides-83-karp-4", "slides-83-karp-5", "slides-83-karp-6", "slides-83-karp-7"], "scheduled": "2012-02-23 00:00:00", "group": 1737, "meeting": 83, "requested_duration": 7200}},
{"pk": 2174, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-29 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule early in the week.\r\nThanks.", "requested_by": 102391, "materials": ["agenda-83-trill", "minutes-83-trill", "slides-83-trill-0", "slides-83-trill-1", "slides-83-trill-10", "slides-83-trill-11", "slides-83-trill-12", "slides-83-trill-13", "slides-83-trill-14", "slides-83-trill-15", "slides-83-trill-2", "slides-83-trill-3", "slides-83-trill-4", "slides-83-trill-5", "slides-83-trill-6", "slides-83-trill-7", "slides-83-trill-8", "slides-83-trill-9"], "scheduled": "2012-02-23 00:00:00", "group": 1650, "meeting": 83, "requested_duration": 7200}},
{"pk": 12174, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-29 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule early in the week.\r\nThanks.", "requested_by": 102391, "materials": ["agenda-83-trill", "minutes-83-trill", "slides-83-trill-0", "slides-83-trill-1", "slides-83-trill-10", "slides-83-trill-11", "slides-83-trill-12", "slides-83-trill-13", "slides-83-trill-14", "slides-83-trill-15", "slides-83-trill-2", "slides-83-trill-3", "slides-83-trill-4", "slides-83-trill-5", "slides-83-trill-6", "slides-83-trill-7", "slides-83-trill-8", "slides-83-trill-9"], "scheduled": "2012-02-23 00:00:00", "group": 1650, "meeting": 83, "requested_duration": 3600}},
{"pk": 2175, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-31 00:00:00", "short": "", "attendees": 300, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 20959, "materials": ["agenda-83-v6ops", "minutes-83-v6ops", "slides-83-v6ops-0", "slides-83-v6ops-1", "slides-83-v6ops-10", "slides-83-v6ops-11", "slides-83-v6ops-12", "slides-83-v6ops-13", "slides-83-v6ops-2", "slides-83-v6ops-3", "slides-83-v6ops-4", "slides-83-v6ops-5", "slides-83-v6ops-6", "slides-83-v6ops-7", "slides-83-v6ops-8", "slides-83-v6ops-9"], "scheduled": "2012-02-23 00:00:00", "group": 1578, "meeting": 83, "requested_duration": 9000}},
{"pk": 12175, "model": "meeting.session", "fields": {"status": "sched", "requested": "2011-12-31 00:00:00", "short": "", "attendees": 300, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 20959, "materials": ["agenda-83-v6ops", "minutes-83-v6ops", "slides-83-v6ops-0", "slides-83-v6ops-1", "slides-83-v6ops-10", "slides-83-v6ops-11", "slides-83-v6ops-12", "slides-83-v6ops-13", "slides-83-v6ops-2", "slides-83-v6ops-3", "slides-83-v6ops-4", "slides-83-v6ops-5", "slides-83-v6ops-6", "slides-83-v6ops-7", "slides-83-v6ops-8", "slides-83-v6ops-9"], "scheduled": "2012-02-23 00:00:00", "group": 1578, "meeting": 83, "requested_duration": 7200}},
{"pk": 2176, "model": "meeting.session", "fields": {"status": "schedw", "requested": "2012-01-02 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-03-05 13:55:42", "comments": "", "requested_by": 109800, "materials": [], "scheduled": "2012-02-23 00:00:00", "group": 1720, "meeting": 83, "requested_duration": 9000}},
{"pk": 2177, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-03 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule Tuesday if possible. It's been on Tuesday lately which has been perfect. (other conflicts: multrans)", "requested_by": 106173, "materials": ["agenda-83-pim", "minutes-83-pim", "slides-83-pim-0", "slides-83-pim-1", "slides-83-pim-2", "slides-83-pim-3", "slides-83-pim-4", "slides-83-pim-5", "slides-83-pim-6"], "scheduled": "2012-02-23 00:00:00", "group": 1397, "meeting": 83, "requested_duration": 7200}},
{"pk": 2178, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106269, "materials": ["agenda-83-roll", "minutes-83-roll", "slides-83-roll-0", "slides-83-roll-1", "slides-83-roll-2", "slides-83-roll-3", "slides-83-roll-4", "slides-83-roll-5", "slides-83-roll-6"], "scheduled": "2012-02-23 00:00:00", "group": 1730, "meeting": 83, "requested_duration": 7200}},
{"pk": 2179, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109800, "materials": ["agenda-83-dime", "minutes-83-dime", "slides-83-dime-0", "slides-83-dime-1", "slides-83-dime-2", "slides-83-dime-3", "slides-83-dime-4"], "scheduled": "2012-02-23 00:00:00", "group": 1682, "meeting": 83, "requested_duration": 7200}},
{"pk": 2180, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-04 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please try to schedule a session early in the week as we used to have always in the past. Thanks, Patrick", "requested_by": 19925, "materials": ["agenda-83-forces", "minutes-83-forces", "slides-83-forces-0", "slides-83-forces-1", "slides-83-forces-2", "slides-83-forces-3", "slides-83-forces-4", "slides-83-forces-5"], "scheduled": "2012-02-23 00:00:00", "group": 1518, "meeting": 83, "requested_duration": 3600}},
{"pk": 2182, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-05 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "NETCONF is related to NETMOD. If possible please schedule NETCONF and NETMOD sessions on subsequent days at the beginning of the week, e.g. NETCONF on Monday and NETMOD on Tuesday. Thank you. (other conflicts: nmrg dc IoT)", "requested_by": 105537, "materials": ["agenda-83-netconf", "minutes-83-netconf", "slides-83-netconf-0", "slides-83-netconf-1", "slides-83-netconf-2", "slides-83-netconf-3"], "scheduled": "2012-02-23 00:00:00", "group": 1575, "meeting": 83, "requested_duration": 3600}},
{"pk": 2183, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-03-01 08:28:55", "comments": "", "requested_by": 109059, "materials": ["agenda-83-homenet", "minutes-83-homenet", "slides-83-homenet-0", "slides-83-homenet-1", "slides-83-homenet-2", "slides-83-homenet-3", "slides-83-homenet-4", "slides-83-homenet-5", "slides-83-homenet-6", "slides-83-homenet-7"], "scheduled": "2012-02-23 00:00:00", "group": 1803, "meeting": 83, "requested_duration": 9000}},
{"pk": 2184, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with OPSAWG", "modified": "2012-03-07 09:02:17", "comments": "List this session as both the O&M Area Open meeting and the OPSAWG meeting", "requested_by": 101568, "materials": ["agenda-83-opsarea", "slides-83-opsarea-0"], "scheduled": "2012-02-23 00:00:00", "group": 1399, "meeting": 83, "requested_duration": 9000}},
{"pk": 2185, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Would prefer a mtg on Tues/Wed/Thurs", "requested_by": 104329, "materials": ["agenda-83-mboned", "minutes-83-mboned", "slides-83-mboned-0", "slides-83-mboned-1", "slides-83-mboned-10", "slides-83-mboned-2", "slides-83-mboned-3", "slides-83-mboned-4", "slides-83-mboned-5", "slides-83-mboned-6", "slides-83-mboned-7", "slides-83-mboned-8", "slides-83-mboned-9"], "scheduled": "2012-02-23 00:00:00", "group": 1118, "meeting": 83, "requested_duration": 9000}},
{"pk": 2186, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-06 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Several of the key WG member cannot participate Friday. So please restrict times to other days.", "requested_by": 18331, "materials": ["agenda-83-manet", "minutes-83-manet", "slides-83-manet-0", "slides-83-manet-1", "slides-83-manet-2", "slides-83-manet-3", "slides-83-manet-4", "slides-83-manet-5", "slides-83-manet-6", "slides-83-manet-7", "slides-83-manet-8", "slides-83-manet-9"], "scheduled": "2012-02-23 00:00:00", "group": 1132, "meeting": 83, "requested_duration": 7200}},
{"pk": 2187, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-08 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Friday is not preferred (other conflicts: p2prg, vnrg)", "requested_by": 109919, "materials": ["agenda-83-ppsp", "minutes-83-ppsp", "slides-83-ppsp-0", "slides-83-ppsp-1", "slides-83-ppsp-2", "slides-83-ppsp-3", "slides-83-ppsp-4"], "scheduled": "2012-02-23 00:00:00", "group": 1771, "meeting": 83, "requested_duration": 9000}},
{"pk": 2188, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (mainly for mpls-tp related sessions as many actors of mpls-tp design are not necessarily able to travel) (other conflicts: rrg)", "requested_by": 108279, "materials": ["agenda-83-mpls", "minutes-83-mpls", "slides-83-mpls-0", "slides-83-mpls-1", "slides-83-mpls-10", "slides-83-mpls-11", "slides-83-mpls-12", "slides-83-mpls-13", "slides-83-mpls-14", "slides-83-mpls-15", "slides-83-mpls-16", "slides-83-mpls-17", "slides-83-mpls-18", "slides-83-mpls-19", "slides-83-mpls-2", "slides-83-mpls-20", "slides-83-mpls-21", "slides-83-mpls-22", "slides-83-mpls-23", "slides-83-mpls-24", "slides-83-mpls-25", "slides-83-mpls-26", "slides-83-mpls-27", "slides-83-mpls-3", "slides-83-mpls-4", "slides-83-mpls-5", "slides-83-mpls-6", "slides-83-mpls-7", "slides-83-mpls-8", "slides-83-mpls-9"], "scheduled": "2012-02-23 00:00:00", "group": 1140, "meeting": 83, "requested_duration": 9000}},
{"pk": 12188, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (mainly for mpls-tp related sessions as many actors of mpls-tp design are not necessarily able to travel) (other conflicts: rrg)", "requested_by": 108279, "materials": ["agenda-83-mpls", "minutes-83-mpls", "slides-83-mpls-0", "slides-83-mpls-1", "slides-83-mpls-10", "slides-83-mpls-11", "slides-83-mpls-12", "slides-83-mpls-13", "slides-83-mpls-14", "slides-83-mpls-15", "slides-83-mpls-16", "slides-83-mpls-17", "slides-83-mpls-18", "slides-83-mpls-19", "slides-83-mpls-2", "slides-83-mpls-20", "slides-83-mpls-21", "slides-83-mpls-22", "slides-83-mpls-23", "slides-83-mpls-24", "slides-83-mpls-25", "slides-83-mpls-26", "slides-83-mpls-27", "slides-83-mpls-3", "slides-83-mpls-4", "slides-83-mpls-5", "slides-83-mpls-6", "slides-83-mpls-7", "slides-83-mpls-8", "slides-83-mpls-9"], "scheduled": "2012-02-23 00:00:00", "group": 1140, "meeting": 83, "requested_duration": 7200}},
{"pk": 2189, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 111091, "materials": ["agenda-83-siprec", "minutes-83-siprec", "slides-83-siprec-0", "slides-83-siprec-1", "slides-83-siprec-2", "slides-83-siprec-3", "slides-83-siprec-4"], "scheduled": "2012-02-23 00:00:00", "group": 1788, "meeting": 83, "requested_duration": 7200}},
{"pk": 2190, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "materials": ["agenda-83-dispatch", "minutes-83-dispatch", "slides-83-dispatch-0", "slides-83-dispatch-1", "slides-83-dispatch-2", "slides-83-dispatch-3"], "scheduled": "2012-02-23 00:00:00", "group": 1763, "meeting": 83, "requested_duration": 7200}},
{"pk": 2191, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "CANCELED", "modified": "2012-03-16 11:54:56", "comments": "", "requested_by": 105791, "materials": ["agenda-83-codec", "minutes-83-codec", "slides-83-codec-0"], "scheduled": "2012-02-23 00:00:00", "group": 1765, "meeting": 83, "requested_duration": 3600}},
{"pk": 2192, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "materials": ["agenda-83-rtcweb", "minutes-83-rtcweb", "slides-83-rtcweb-0", "slides-83-rtcweb-1", "slides-83-rtcweb-2", "slides-83-rtcweb-3", "slides-83-rtcweb-4", "slides-83-rtcweb-5", "slides-83-rtcweb-6", "slides-83-rtcweb-7", "slides-83-rtcweb-8"], "scheduled": "2012-02-23 00:00:00", "group": 1820, "meeting": 83, "requested_duration": 9000}},
{"pk": 12192, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "materials": ["agenda-83-rtcweb", "minutes-83-rtcweb", "slides-83-rtcweb-0", "slides-83-rtcweb-1", "slides-83-rtcweb-2", "slides-83-rtcweb-3", "slides-83-rtcweb-4", "slides-83-rtcweb-5", "slides-83-rtcweb-6", "slides-83-rtcweb-7", "slides-83-rtcweb-8"], "scheduled": "2012-02-23 00:00:00", "group": 1820, "meeting": 83, "requested_duration": 9000}},
{"pk": 2193, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "materials": ["agenda-83-core", "minutes-83-core", "slides-83-core-0"], "scheduled": "2012-02-23 00:00:00", "group": 1789, "meeting": 83, "requested_duration": 7200}},
{"pk": 12193, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105791, "materials": ["agenda-83-core", "minutes-83-core", "slides-83-core-0"], "scheduled": "2012-02-23 00:00:00", "group": 1789, "meeting": 83, "requested_duration": 7200}},
{"pk": 2194, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102830, "materials": ["agenda-83-clue", "minutes-83-clue", "slides-83-clue-0", "slides-83-clue-1", "slides-83-clue-10", "slides-83-clue-11", "slides-83-clue-2", "slides-83-clue-3", "slides-83-clue-4", "slides-83-clue-5", "slides-83-clue-6", "slides-83-clue-7", "slides-83-clue-8", "slides-83-clue-9"], "scheduled": "2012-02-23 00:00:00", "group": 1816, "meeting": 83, "requested_duration": 9000}},
{"pk": 12194, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-09 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102830, "materials": ["agenda-83-clue", "minutes-83-clue", "slides-83-clue-0", "slides-83-clue-1", "slides-83-clue-10", "slides-83-clue-11", "slides-83-clue-2", "slides-83-clue-3", "slides-83-clue-4", "slides-83-clue-5", "slides-83-clue-6", "slides-83-clue-7", "slides-83-clue-8", "slides-83-clue-9"], "scheduled": "2012-02-23 00:00:00", "group": 1816, "meeting": 83, "requested_duration": 7200}},
{"pk": 2195, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105328, "materials": ["agenda-83-softwire", "minutes-83-softwire", "slides-83-softwire-0", "slides-83-softwire-1", "slides-83-softwire-10", "slides-83-softwire-11", "slides-83-softwire-12", "slides-83-softwire-13", "slides-83-softwire-14", "slides-83-softwire-2", "slides-83-softwire-3", "slides-83-softwire-4", "slides-83-softwire-5", "slides-83-softwire-6", "slides-83-softwire-7", "slides-83-softwire-8", "slides-83-softwire-9"], "scheduled": "2012-02-23 00:00:00", "group": 1678, "meeting": 83, "requested_duration": 3600}},
{"pk": 12195, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105328, "materials": ["agenda-83-softwire", "minutes-83-softwire", "slides-83-softwire-0", "slides-83-softwire-1", "slides-83-softwire-10", "slides-83-softwire-11", "slides-83-softwire-12", "slides-83-softwire-13", "slides-83-softwire-14", "slides-83-softwire-2", "slides-83-softwire-3", "slides-83-softwire-4", "slides-83-softwire-5", "slides-83-softwire-6", "slides-83-softwire-7", "slides-83-softwire-8", "slides-83-softwire-9"], "scheduled": "2012-02-23 00:00:00", "group": 1678, "meeting": 83, "requested_duration": 7200}},
{"pk": 2196, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 105328, "materials": ["agenda-83-pcp", "minutes-83-pcp", "slides-83-pcp-0", "slides-83-pcp-1", "slides-83-pcp-10", "slides-83-pcp-11", "slides-83-pcp-12", "slides-83-pcp-13", "slides-83-pcp-14", "slides-83-pcp-2", "slides-83-pcp-3", "slides-83-pcp-4", "slides-83-pcp-5", "slides-83-pcp-6", "slides-83-pcp-7", "slides-83-pcp-8", "slides-83-pcp-9"], "scheduled": "2012-02-24 00:00:00", "group": 1800, "meeting": 83, "requested_duration": 3600}},
{"pk": 12196, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 105328, "materials": ["agenda-83-pcp", "minutes-83-pcp", "slides-83-pcp-0", "slides-83-pcp-1", "slides-83-pcp-10", "slides-83-pcp-11", "slides-83-pcp-12", "slides-83-pcp-13", "slides-83-pcp-14", "slides-83-pcp-2", "slides-83-pcp-3", "slides-83-pcp-4", "slides-83-pcp-5", "slides-83-pcp-6", "slides-83-pcp-7", "slides-83-pcp-8", "slides-83-pcp-9"], "scheduled": "2012-02-24 00:00:00", "group": 1800, "meeting": 83, "requested_duration": 7200}},
{"pk": 2197, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-11 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule for afternoon. A number of key participants will be participating remotely, from the U.S.\r\n\r\nThanks!\r\n\r\n/d", "requested_by": 100927, "materials": ["agenda-83-repute", "minutes-83-repute"], "scheduled": "2012-02-23 00:00:00", "group": 1827, "meeting": 83, "requested_duration": 5400}},
{"pk": 2198, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-12 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "An early in the week slot would be preferred.", "requested_by": 12671, "materials": ["agenda-83-rmt", "minutes-83-rmt", "slides-83-rmt-0", "slides-83-rmt-1", "slides-83-rmt-2", "slides-83-rmt-3"], "scheduled": "2012-02-23 00:00:00", "group": 1437, "meeting": 83, "requested_duration": 3600}},
{"pk": 2199, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-12 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105046, "materials": ["agenda-83-bfd", "minutes-83-bfd", "slides-83-bfd-0", "slides-83-bfd-1", "slides-83-bfd-2", "slides-83-bfd-3"], "scheduled": "2012-02-23 00:00:00", "group": 1628, "meeting": 83, "requested_duration": 3600}},
{"pk": 2200, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106812, "materials": ["agenda-83-cuss", "minutes-83-cuss", "slides-83-cuss-0", "slides-83-cuss-1", "slides-83-cuss-2", "slides-83-cuss-3"], "scheduled": "2012-02-23 00:00:00", "group": 1796, "meeting": 83, "requested_duration": 3600}},
{"pk": 2201, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: p2prg)", "requested_by": 106812, "materials": ["agenda-83-alto", "minutes-83-alto", "slides-83-alto-0", "slides-83-alto-1", "slides-83-alto-2", "slides-83-alto-3", "slides-83-alto-4", "slides-83-alto-5", "slides-83-alto-6", "slides-83-alto-7", "slides-83-alto-8"], "scheduled": "2012-02-23 00:00:00", "group": 1744, "meeting": 83, "requested_duration": 7200}},
{"pk": 2202, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 110, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 4836, "materials": ["agenda-83-idr", "minutes-83-idr", "slides-83-idr-0", "slides-83-idr-1", "slides-83-idr-10", "slides-83-idr-11", "slides-83-idr-12", "slides-83-idr-13", "slides-83-idr-14", "slides-83-idr-2", "slides-83-idr-3", "slides-83-idr-4", "slides-83-idr-5", "slides-83-idr-6", "slides-83-idr-7", "slides-83-idr-8", "slides-83-idr-9"], "scheduled": "2012-02-23 00:00:00", "group": 1041, "meeting": 83, "requested_duration": 9000}},
{"pk": 2203, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-13 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 13219, "materials": ["agenda-83-sidr", "minutes-83-sidr", "slides-83-sidr-0", "slides-83-sidr-1", "slides-83-sidr-10", "slides-83-sidr-11", "slides-83-sidr-12", "slides-83-sidr-13", "slides-83-sidr-14", "slides-83-sidr-15", "slides-83-sidr-16", "slides-83-sidr-17", "slides-83-sidr-2", "slides-83-sidr-3", "slides-83-sidr-4", "slides-83-sidr-5", "slides-83-sidr-6", "slides-83-sidr-7", "slides-83-sidr-8", "slides-83-sidr-9"], "scheduled": "2012-02-23 00:00:00", "group": 1680, "meeting": 83, "requested_duration": 9000}},
{"pk": 2204, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-15 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: sdnp)", "requested_by": 109430, "materials": ["agenda-83-decade", "minutes-83-decade", "slides-83-decade-0", "slides-83-decade-1", "slides-83-decade-2", "slides-83-decade-3", "slides-83-decade-4", "slides-83-decade-5"], "scheduled": "2012-02-23 00:00:00", "group": 1780, "meeting": 83, "requested_duration": 7200}},
{"pk": 2205, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108624, "materials": ["agenda-83-emu", "minutes-83-emu", "slides-83-emu-0", "slides-83-emu-1", "slides-83-emu-2", "slides-83-emu-3", "slides-83-emu-4", "slides-83-emu-5", "slides-83-emu-6", "slides-83-emu-7"], "scheduled": "2012-02-23 00:00:00", "group": 1674, "meeting": 83, "requested_duration": 7200}},
{"pk": 2206, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-03-01 08:29:17", "comments": "Please avoid any IAOC meetings,", "requested_by": 100664, "materials": ["agenda-83-6man", "minutes-83-6man", "slides-83-6man-0", "slides-83-6man-1", "slides-83-6man-10", "slides-83-6man-11", "slides-83-6man-12", "slides-83-6man-2", "slides-83-6man-3", "slides-83-6man-4", "slides-83-6man-5", "slides-83-6man-6", "slides-83-6man-7", "slides-83-6man-8", "slides-83-6man-9"], "scheduled": "2012-02-23 00:00:00", "group": 1723, "meeting": 83, "requested_duration": 9000}},
{"pk": 2207, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-16 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: P2PRG)", "requested_by": 107491, "materials": ["agenda-83-soc", "minutes-83-soc", "slides-83-soc-0", "slides-83-soc-1", "slides-83-soc-2", "slides-83-soc-3"], "scheduled": "2012-02-23 00:00:00", "group": 1791, "meeting": 83, "requested_duration": 3600}},
{"pk": 2208, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107520, "materials": ["agenda-83-xrblock", "minutes-83-xrblock", "slides-83-xrblock-0", "slides-83-xrblock-1", "slides-83-xrblock-2", "slides-83-xrblock-3", "slides-83-xrblock-4", "slides-83-xrblock-5", "slides-83-xrblock-6", "slides-83-xrblock-7", "slides-83-xrblock-8", "slides-83-xrblock-9"], "scheduled": "2012-02-23 00:00:00", "group": 1815, "meeting": 83, "requested_duration": 7200}},
{"pk": 2209, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 109884, "materials": ["agenda-83-mif", "minutes-83-mif", "slides-83-mif-0", "slides-83-mif-1", "slides-83-mif-10", "slides-83-mif-11", "slides-83-mif-2", "slides-83-mif-3", "slides-83-mif-4", "slides-83-mif-5", "slides-83-mif-6", "slides-83-mif-7", "slides-83-mif-8", "slides-83-mif-9"], "scheduled": "2012-02-23 00:00:00", "group": 1755, "meeting": 83, "requested_duration": 7200}},
{"pk": 2210, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 103769, "materials": ["agenda-83-sipcore", "minutes-83-sipcore", "slides-83-sipcore-0", "slides-83-sipcore-1", "slides-83-sipcore-2"], "scheduled": "2012-02-23 00:00:00", "group": 1762, "meeting": 83, "requested_duration": 3600}},
{"pk": 2211, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 103283, "materials": ["agenda-83-netext", "minutes-83-netext", "slides-83-netext-0", "slides-83-netext-1", "slides-83-netext-2", "slides-83-netext-3", "slides-83-netext-4", "slides-83-netext-5", "slides-83-netext-6", "slides-83-netext-7", "slides-83-netext-8"], "scheduled": "2012-02-23 00:00:00", "group": 1756, "meeting": 83, "requested_duration": 7200}},
{"pk": 2212, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please consider placing this in a consecutive sequence with AVTCORE, such that we can run as a single session with a change of chairs. This may be dependent also on the needs of XRBLOCK to meet or not meet.", "requested_by": 105097, "materials": ["agenda-83-avtext", "minutes-83-avtext", "slides-83-avtext-0", "slides-83-avtext-1", "slides-83-avtext-2", "slides-83-avtext-3", "slides-83-avtext-4", "slides-83-avtext-5", "slides-83-avtext-6", "slides-83-avtext-7"], "scheduled": "2012-02-23 00:00:00", "group": 1813, "meeting": 83, "requested_duration": 3600}},
{"pk": 2213, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105097, "materials": ["agenda-83-bfcpbis", "minutes-83-bfcpbis", "slides-83-bfcpbis-0", "slides-83-bfcpbis-1"], "scheduled": "2012-02-23 00:00:00", "group": 1832, "meeting": 83, "requested_duration": 3600}},
{"pk": 2214, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please no Friday,", "requested_by": 3760, "materials": ["agenda-83-dnsext", "minutes-83-dnsext", "slides-83-dnsext-0", "slides-83-dnsext-1", "slides-83-dnsext-2", "slides-83-dnsext-3", "slides-83-dnsext-4", "slides-83-dnsext-5", "slides-83-dnsext-6", "slides-83-dnsext-7"], "scheduled": "2012-02-23 00:00:00", "group": 1479, "meeting": 83, "requested_duration": 3600}},
{"pk": 2215, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 200, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We can live with 2 slots of one hour if that facilitates the scheduling (other conflicts: ICCRG, Complexity RG)", "requested_by": 105255, "materials": ["agenda-83-conex", "minutes-83-conex", "slides-83-conex-0", "slides-83-conex-1", "slides-83-conex-2", "slides-83-conex-3", "slides-83-conex-4", "slides-83-conex-5"], "scheduled": "2012-02-23 00:00:00", "group": 1775, "meeting": 83, "requested_duration": 7200}},
{"pk": 2216, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105873, "materials": ["agenda-83-avtcore", "minutes-83-avtcore", "slides-83-avtcore-0", "slides-83-avtcore-1", "slides-83-avtcore-2", "slides-83-avtcore-3", "slides-83-avtcore-4", "slides-83-avtcore-5", "slides-83-avtcore-6", "slides-83-avtcore-7", "slides-83-avtcore-8", "slides-83-avtcore-9"], "scheduled": "2012-02-23 00:00:00", "group": 1812, "meeting": 83, "requested_duration": 9000}},
{"pk": 2217, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108049, "materials": ["agenda-83-geopriv", "minutes-83-geopriv", "slides-83-geopriv-0", "slides-83-geopriv-1"], "scheduled": "2012-02-23 00:00:00", "group": 1543, "meeting": 83, "requested_duration": 5400}},
{"pk": 2218, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 80, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "not on Friday, please", "requested_by": 108049, "materials": ["agenda-83-ecrit", "minutes-83-ecrit", "slides-83-ecrit-0", "slides-83-ecrit-1", "slides-83-ecrit-2", "slides-83-ecrit-3", "slides-83-ecrit-4", "slides-83-ecrit-5", "slides-83-ecrit-6"], "scheduled": "2012-02-23 00:00:00", "group": 1643, "meeting": 83, "requested_duration": 7200}},
{"pk": 2219, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Can we have the last session on Thursday? We used to do it right after lunch, last time we moved it one slot later in the day, but this time we'd like to have the last 2hr slot of Thursday. Thanks!", "requested_by": 19483, "materials": ["agenda-83-saag", "minutes-83-saag", "slides-83-saag-0", "slides-83-saag-1", "slides-83-saag-2", "slides-83-saag-3"], "scheduled": "2012-02-23 00:00:00", "group": 1187, "meeting": 83, "requested_duration": 7200}},
{"pk": 2220, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-17 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107406, "materials": ["agenda-83-drinks", "minutes-83-drinks", "slides-83-drinks-0", "slides-83-drinks-1", "slides-83-drinks-2", "slides-83-drinks-3", "slides-83-drinks-4", "slides-83-drinks-5", "slides-83-drinks-6", "slides-83-drinks-7"], "scheduled": "2012-02-23 00:00:00", "group": 1739, "meeting": 83, "requested_duration": 5400}},
{"pk": 2221, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: ICCRG, rmcat BoF (RTP congestion control))", "requested_by": 110636, "materials": ["agenda-83-tcpm", "minutes-83-tcpm", "slides-83-tcpm-0", "slides-83-tcpm-1", "slides-83-tcpm-2", "slides-83-tcpm-3", "slides-83-tcpm-4", "slides-83-tcpm-5", "slides-83-tcpm-6", "slides-83-tcpm-7", "slides-83-tcpm-8"], "scheduled": "2012-02-23 00:00:00", "group": 1620, "meeting": 83, "requested_duration": 7200}},
{"pk": 2222, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: nmrg)", "requested_by": 13775, "materials": ["agenda-83-ncrg", "minutes-83-ncrg", "slides-83-ncrg-0", "slides-83-ncrg-1", "slides-83-ncrg-2", "slides-83-ncrg-3"], "scheduled": "2012-02-23 00:00:00", "group": 47, "meeting": 83, "requested_duration": 9000}},
{"pk": 2223, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday-Wednesday preferred (other conflicts: any TSV BOFs, e.g. there has been talk about doing a BOF on RTP congestion control, that would collide)", "requested_by": 103877, "materials": ["agenda-83-iccrg", "minutes-83-iccrg", "slides-83-iccrg-0", "slides-83-iccrg-1", "slides-83-iccrg-2", "slides-83-iccrg-3", "slides-83-iccrg-4", "slides-83-iccrg-5", "slides-83-iccrg-6", "slides-83-iccrg-7", "slides-83-iccrg-8", "slides-83-iccrg-9"], "scheduled": "2012-02-23 00:00:00", "group": 42, "meeting": 83, "requested_duration": 9000}},
{"pk": 2224, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107363, "materials": ["agenda-83-dnsop", "minutes-83-dnsop", "slides-83-dnsop-0", "slides-83-dnsop-1", "slides-83-dnsop-2", "slides-83-dnsop-3", "slides-83-dnsop-4", "slides-83-dnsop-5"], "scheduled": "2012-02-23 00:00:00", "group": 1452, "meeting": 83, "requested_duration": 3600}},
{"pk": 2225, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-18 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 21097, "materials": ["agenda-83-nfsv4", "minutes-83-nfsv4", "slides-83-nfsv4-0", "slides-83-nfsv4-1", "slides-83-nfsv4-2", "slides-83-nfsv4-3", "slides-83-nfsv4-4", "slides-83-nfsv4-5"], "scheduled": "2012-02-23 00:00:00", "group": 1152, "meeting": 83, "requested_duration": 9000}},
{"pk": 2227, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-19 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please avoid conflict with any App or Sec area BoFs.", "requested_by": 106842, "materials": ["agenda-83-marf", "minutes-83-marf", "slides-83-marf-0"], "scheduled": "2012-02-23 00:00:00", "group": 1783, "meeting": 83, "requested_duration": 3600}},
{"pk": 2228, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-19 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 111434, "materials": ["agenda-83-radext", "minutes-83-radext", "slides-83-radext-0", "slides-83-radext-1", "slides-83-radext-2", "slides-83-radext-3"], "scheduled": "2012-02-23 00:00:00", "group": 1612, "meeting": 83, "requested_duration": 5400}},
{"pk": 2229, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-20 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "we have been on the Friday 4 times in a row now, would be nice to be on another day for a change, but no big deal if not. (other conflicts: in general any Security Area WG or BOFs)", "requested_by": 109496, "materials": ["agenda-83-abfab", "minutes-83-abfab", "slides-83-abfab-0", "slides-83-abfab-1", "slides-83-abfab-2", "slides-83-abfab-3", "slides-83-abfab-4"], "scheduled": "2012-02-23 00:00:00", "group": 1804, "meeting": 83, "requested_duration": 5400}},
{"pk": 2230, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-20 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Could also be 1.5 hours. Can *not* be on Friday because one chair (Paul Hoffman) will be hosting a BoF on Friday.", "requested_by": 10083, "materials": ["agenda-83-ipsecme", "minutes-83-ipsecme", "slides-83-ipsecme-0", "slides-83-ipsecme-1", "slides-83-ipsecme-2", "slides-83-ipsecme-3", "slides-83-ipsecme-4", "slides-83-ipsecme-5"], "scheduled": "2012-02-23 00:00:00", "group": 1740, "meeting": 83, "requested_duration": 3600}},
{"pk": 2231, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-22 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please schedule Mon-Wed (co-chair needs to be in Orlando at IEEE Global Internet Symposium on Friday and hence leave on Thursday morning) (other conflicts: ICN, Internet-of-Things)", "requested_by": 11842, "materials": ["agenda-83-dtnrg", "minutes-83-dtnrg", "slides-83-dtnrg-0", "slides-83-dtnrg-1", "slides-83-dtnrg-2", "slides-83-dtnrg-3", "slides-83-dtnrg-4", "slides-83-dtnrg-5", "slides-83-dtnrg-6", "slides-83-dtnrg-7"], "scheduled": "2012-02-23 00:00:00", "group": 32, "meeting": 83, "requested_duration": 9000}},
{"pk": 2232, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107998, "materials": ["agenda-83-mptcp", "minutes-83-mptcp", "slides-83-mptcp-0", "slides-83-mptcp-1", "slides-83-mptcp-2", "slides-83-mptcp-3", "slides-83-mptcp-4", "slides-83-mptcp-5", "slides-83-mptcp-6"], "scheduled": "2012-02-23 00:00:00", "group": 1764, "meeting": 83, "requested_duration": 7200}},
{"pk": 2233, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 104935, "materials": ["agenda-83-l2vpn", "minutes-83-l2vpn", "slides-83-l2vpn-0", "slides-83-l2vpn-1", "slides-83-l2vpn-2", "slides-83-l2vpn-3", "slides-83-l2vpn-4", "slides-83-l2vpn-5", "slides-83-l2vpn-6", "slides-83-l2vpn-7", "slides-83-l2vpn-8"], "scheduled": "2012-02-23 00:00:00", "group": 1593, "meeting": 83, "requested_duration": 7200}},
{"pk": 2234, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: WEIRDS)", "requested_by": 106296, "materials": ["agenda-83-urnbis", "minutes-83-urnbis", "slides-83-urnbis-0", "slides-83-urnbis-1", "slides-83-urnbis-2"], "scheduled": "2012-02-23 00:00:00", "group": 1792, "meeting": 83, "requested_duration": 3600}},
{"pk": 2235, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105786, "materials": ["agenda-83-pwe3", "minutes-83-pwe3", "slides-83-pwe3-0", "slides-83-pwe3-1", "slides-83-pwe3-2", "slides-83-pwe3-3", "slides-83-pwe3-4", "slides-83-pwe3-5", "slides-83-pwe3-6", "slides-83-pwe3-7", "slides-83-pwe3-8"], "scheduled": "2012-02-23 00:00:00", "group": 1538, "meeting": 83, "requested_duration": 9000}},
{"pk": 2236, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 105786, "materials": ["agenda-83-ancp", "minutes-83-ancp", "slides-83-ancp-0", "slides-83-ancp-1", "slides-83-ancp-2", "slides-83-ancp-3"], "scheduled": "2012-02-23 00:00:00", "group": 1693, "meeting": 83, "requested_duration": 5400}},
{"pk": 2237, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "WebEx (we always have remote attendees).", "requested_by": 111529, "materials": ["agenda-83-eman", "minutes-83-eman", "slides-83-eman-0", "slides-83-eman-1", "slides-83-eman-2", "slides-83-eman-3", "slides-83-eman-4", "slides-83-eman-5", "slides-83-eman-6", "slides-83-eman-7"], "scheduled": "2012-02-23 00:00:00", "group": 1801, "meeting": 83, "requested_duration": 7200}},
{"pk": 2238, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday and Tuesday preferable. 2.5 hour slot(s) are fine too.", "requested_by": 103881, "materials": ["agenda-83-httpbis", "minutes-83-httpbis", "slides-83-httpbis-0", "slides-83-httpbis-1", "slides-83-httpbis-2", "slides-83-httpbis-3", "slides-83-httpbis-4", "slides-83-httpbis-5", "slides-83-httpbis-6"], "scheduled": "2012-02-23 00:00:00", "group": 1718, "meeting": 83, "requested_duration": 7200}},
{"pk": 12238, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 70, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Monday and Tuesday preferable. 2.5 hour slot(s) are fine too.", "requested_by": 103881, "materials": ["agenda-83-httpbis", "minutes-83-httpbis", "slides-83-httpbis-0", "slides-83-httpbis-1", "slides-83-httpbis-2", "slides-83-httpbis-3", "slides-83-httpbis-4", "slides-83-httpbis-5", "slides-83-httpbis-6"], "scheduled": "2012-02-23 00:00:00", "group": 1718, "meeting": 83, "requested_duration": 7200}},
{"pk": 2239, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-23 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107131, "materials": ["agenda-83-atoca", "minutes-83-atoca", "slides-83-atoca-0", "slides-83-atoca-1", "slides-83-atoca-2"], "scheduled": "2012-02-23 00:00:00", "group": 1760, "meeting": 83, "requested_duration": 3600}},
{"pk": 2240, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 125, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: rrg cloud dcops sdnp sdn)", "requested_by": 112438, "materials": ["agenda-83-armd", "minutes-83-armd", "slides-83-armd-0", "slides-83-armd-1"], "scheduled": "2012-02-23 00:00:00", "group": 1807, "meeting": 83, "requested_duration": 3600}},
{"pk": 2241, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "not Friday", "requested_by": 107041, "materials": ["agenda-83-precis", "minutes-83-precis", "slides-83-precis-0", "slides-83-precis-1", "slides-83-precis-2", "slides-83-precis-3", "slides-83-precis-4", "slides-83-precis-5"], "scheduled": "2012-02-23 00:00:00", "group": 1798, "meeting": 83, "requested_duration": 7200}},
{"pk": 2242, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-24 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please avoid all other TSV area sessions, including tsvarea. (other conflicts: iccrg, tmrg \r\nand, if possible, all BoFs in TSV or RAI)", "requested_by": 104331, "materials": ["agenda-83-tsvwg", "minutes-83-tsvwg", "slides-83-tsvwg-0", "slides-83-tsvwg-1", "slides-83-tsvwg-10", "slides-83-tsvwg-11", "slides-83-tsvwg-2", "slides-83-tsvwg-3", "slides-83-tsvwg-4", "slides-83-tsvwg-5", "slides-83-tsvwg-6", "slides-83-tsvwg-7", "slides-83-tsvwg-8", "slides-83-tsvwg-9"], "scheduled": "2012-02-23 00:00:00", "group": 1463, "meeting": 83, "requested_duration": 9000}},
{"pk": 2243, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-25 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 102900, "materials": ["agenda-83-bmwg", "minutes-83-bmwg", "slides-83-bmwg-0", "slides-83-bmwg-1", "slides-83-bmwg-2", "slides-83-bmwg-3", "slides-83-bmwg-4", "slides-83-bmwg-5"], "scheduled": "2012-02-23 00:00:00", "group": 945, "meeting": 83, "requested_duration": 7200}},
{"pk": 2244, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-25 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 22933, "materials": ["agenda-83-isis", "minutes-83-isis", "slides-83-isis-0", "slides-83-isis-1", "slides-83-isis-2", "slides-83-isis-3", "slides-83-isis-4", "slides-83-isis-5", "slides-83-isis-6", "slides-83-isis-7", "slides-83-isis-8"], "scheduled": "2012-02-23 00:00:00", "group": 1102, "meeting": 83, "requested_duration": 3600}},
{"pk": 2245, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 75, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "No request per se for WebEx as yet, could be handy to have available if requested later.", "requested_by": 106461, "materials": ["agenda-83-6renum", "minutes-83-6renum", "slides-83-6renum-0", "slides-83-6renum-1", "slides-83-6renum-2", "slides-83-6renum-3", "slides-83-6renum-4", "slides-83-6renum-5"], "scheduled": "2012-02-23 00:00:00", "group": 1824, "meeting": 83, "requested_duration": 5400}},
{"pk": 2246, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "Please do not schedule the NEA WG meeting on Friday. Chair cannot attend on that day.", "requested_by": 15448, "materials": ["agenda-83-nea", "minutes-83-nea", "slides-83-nea-0"], "scheduled": "2012-02-23 00:00:00", "group": 1688, "meeting": 83, "requested_duration": 7200}},
{"pk": 2247, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-26 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108304, "materials": ["agenda-83-opsec", "minutes-83-opsec", "slides-83-opsec-0", "slides-83-opsec-1", "slides-83-opsec-2", "slides-83-opsec-3", "slides-83-opsec-4", "slides-83-opsec-5", "slides-83-opsec-6"], "scheduled": "2012-02-23 00:00:00", "group": 1599, "meeting": 83, "requested_duration": 3600}},
{"pk": 2248, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 100603, "materials": ["agenda-83-ippm", "minutes-83-ippm", "slides-83-ippm-0", "slides-83-ippm-1", "slides-83-ippm-2"], "scheduled": "2012-02-23 00:00:00", "group": 1089, "meeting": 83, "requested_duration": 7200}},
{"pk": 2249, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108123, "materials": ["agenda-83-paws", "minutes-83-paws", "slides-83-paws-0", "slides-83-paws-1", "slides-83-paws-2", "slides-83-paws-3", "slides-83-paws-4"], "scheduled": "2012-02-23 00:00:00", "group": 1819, "meeting": 83, "requested_duration": 9000}},
{"pk": 2250, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "Combined with KITTEN", "modified": "2012-02-23 00:00:00", "comments": "This will be a combined session for krb-wg and kitten. Please be sure to consider any requests made by other WGs to avoid conflicts with either krb-wg or kitten.\r\n\r\nWe're still working out how to handle the agendas; we may end up publishing a combined agenda or separate agendas for each group.\r\n\r\nExtra microphones (at least 2) to pass around the room. Wireless mics are nice, but wired ones will also work.", "requested_by": 104978, "materials": ["agenda-83-krb-wg", "minutes-83-krb-wg", "slides-83-krb-wg-0", "slides-83-krb-wg-1", "slides-83-krb-wg-2"], "scheduled": "2012-02-23 00:00:00", "group": 1496, "meeting": 83, "requested_duration": 7200}},
{"pk": 2251, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 15, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: IRTF open meeting, P2PRG, multrans BoF)", "requested_by": 106348, "materials": ["agenda-83-samrg", "minutes-83-samrg", "slides-83-samrg-0", "slides-83-samrg-1", "slides-83-samrg-2", "slides-83-samrg-3", "slides-83-samrg-4"], "scheduled": "2012-02-23 00:00:00", "group": 41, "meeting": 83, "requested_duration": 5400}},
{"pk": 2252, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-27 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 104140, "materials": ["agenda-83-xmpp", "minutes-83-xmpp", "slides-83-xmpp-0", "slides-83-xmpp-1", "slides-83-xmpp-2", "slides-83-xmpp-3", "slides-83-xmpp-4", "slides-83-xmpp-5", "slides-83-xmpp-6", "slides-83-xmpp-7"], "scheduled": "2012-02-23 00:00:00", "group": 1761, "meeting": 83, "requested_duration": 3600}},
{"pk": 2253, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-28 00:00:00", "short": "", "attendees": 40, "name": "", "agenda_note": "Combined with KRB-WG", "modified": "2012-02-23 00:00:00", "comments": "This will be a combined session for krb-wg and kitten. Please be sure to consider any requests made by other WGs to avoid conflicts with either krb-wg or kitten. We're still working out how to handle the agendas; we may end up publishing a combined agenda or separate agendas for each group. Extra microphones (at least 2) to pass around the room. Wireless mics are nice, but wired ones will also work.", "requested_by": 107956, "materials": ["agenda-83-kitten", "minutes-83-kitten", "slides-83-kitten-0", "slides-83-kitten-1", "slides-83-kitten-2", "slides-83-kitten-3", "slides-83-kitten-4", "slides-83-kitten-5"], "scheduled": "2012-02-23 00:00:00", "group": 1634, "meeting": 83, "requested_duration": 7200}},
{"pk": 2254, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-29 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101208, "materials": ["agenda-83-tls", "minutes-83-tls", "slides-83-tls-0", "slides-83-tls-1", "slides-83-tls-2", "slides-83-tls-3", "slides-83-tls-4", "slides-83-tls-5", "slides-83-tls-6", "slides-83-tls-7", "slides-83-tls-8"], "scheduled": "2012-02-23 00:00:00", "group": 1326, "meeting": 83, "requested_duration": 3600}},
{"pk": 2255, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 110531, "materials": ["agenda-83-lwig", "minutes-83-lwig", "slides-83-lwig-0", "slides-83-lwig-1", "slides-83-lwig-2", "slides-83-lwig-3", "slides-83-lwig-4", "slides-83-lwig-5", "slides-83-lwig-6", "slides-83-lwig-7"], "scheduled": "2012-02-23 00:00:00", "group": 1817, "meeting": 83, "requested_duration": 7200}},
{"pk": 2256, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 107491, "materials": ["agenda-83-hybi", "minutes-83-hybi", "slides-83-hybi-0", "slides-83-hybi-1", "slides-83-hybi-2"], "scheduled": "2012-02-23 00:00:00", "group": 1777, "meeting": 83, "requested_duration": 7200}},
{"pk": 2257, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 35, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 4857, "materials": ["agenda-83-tictoc", "minutes-83-tictoc", "slides-83-tictoc-0", "slides-83-tictoc-1", "slides-83-tictoc-2", "slides-83-tictoc-3", "slides-83-tictoc-4", "slides-83-tictoc-5", "slides-83-tictoc-6"], "scheduled": "2012-02-23 00:00:00", "group": 1709, "meeting": 83, "requested_duration": 7200}},
{"pk": 2258, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 60, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: P2PRG as First Priority)", "requested_by": 106438, "materials": ["agenda-83-p2psip", "minutes-83-p2psip", "slides-83-p2psip-0", "slides-83-p2psip-1", "slides-83-p2psip-2", "slides-83-p2psip-3", "slides-83-p2psip-4", "slides-83-p2psip-5", "slides-83-p2psip-6"], "scheduled": "2012-02-23 00:00:00", "group": 1705, "meeting": 83, "requested_duration": 3600}},
{"pk": 2259, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "(other conflicts: Please avoid conflict with any App or Sec area BoFs.)", "requested_by": 21684, "materials": ["agenda-83-oauth", "minutes-83-oauth", "slides-83-oauth-0", "slides-83-oauth-1"], "scheduled": "2012-02-23 00:00:00", "group": 1748, "meeting": 83, "requested_duration": 7200}},
{"pk": 2260, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101685, "materials": ["agenda-83-cdni", "minutes-83-cdni", "slides-83-cdni-0", "slides-83-cdni-1", "slides-83-cdni-10", "slides-83-cdni-11", "slides-83-cdni-12", "slides-83-cdni-13", "slides-83-cdni-14", "slides-83-cdni-15", "slides-83-cdni-16", "slides-83-cdni-2", "slides-83-cdni-3", "slides-83-cdni-4", "slides-83-cdni-5", "slides-83-cdni-6", "slides-83-cdni-7", "slides-83-cdni-8", "slides-83-cdni-9"], "scheduled": "2012-02-23 00:00:00", "group": 1822, "meeting": 83, "requested_duration": 5400}},
{"pk": 12260, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 101685, "materials": ["agenda-83-cdni", "minutes-83-cdni", "slides-83-cdni-0", "slides-83-cdni-1", "slides-83-cdni-10", "slides-83-cdni-11", "slides-83-cdni-12", "slides-83-cdni-13", "slides-83-cdni-14", "slides-83-cdni-15", "slides-83-cdni-16", "slides-83-cdni-2", "slides-83-cdni-3", "slides-83-cdni-4", "slides-83-cdni-5", "slides-83-cdni-6", "slides-83-cdni-7", "slides-83-cdni-8", "slides-83-cdni-9"], "scheduled": "2012-02-23 00:00:00", "group": 1822, "meeting": 83, "requested_duration": 5400}},
{"pk": 2261, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 30, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106638, "materials": ["agenda-83-pcn", "minutes-83-pcn", "slides-83-pcn-0", "slides-83-pcn-1", "slides-83-pcn-2"], "scheduled": "2012-02-23 00:00:00", "group": 1701, "meeting": 83, "requested_duration": 5400}},
{"pk": 2262, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 150, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 106412, "materials": ["agenda-83-intarea", "minutes-83-intarea", "slides-83-intarea-0", "slides-83-intarea-1", "slides-83-intarea-2", "slides-83-intarea-3", "slides-83-intarea-4", "slides-83-intarea-5", "slides-83-intarea-6", "slides-83-intarea-7", "slides-83-intarea-8", "slides-83-intarea-9"], "scheduled": "2012-02-23 00:00:00", "group": 1665, "meeting": 83, "requested_duration": 7200}},
{"pk": 2263, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "Room Changed From 252A", "modified": "2012-03-24 03:24:15", "comments": "", "requested_by": 106412, "materials": ["agenda-83-mobopts", "minutes-83-mobopts", "slides-83-mobopts-0", "slides-83-mobopts-1", "slides-83-mobopts-2", "slides-83-mobopts-3"], "scheduled": "2012-02-23 00:00:00", "group": 37, "meeting": 83, "requested_duration": 7200}},
{"pk": 2265, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "CANCELED", "modified": "2012-03-16 11:08:40", "comments": "additional 2nd priority conflict to avoid: all other APP area WGs and BOFs\r\n\r\nthanks (other conflicts: WEIRD (if became BOF), and all other BOFs in app-area)", "requested_by": 111335, "materials": [], "scheduled": "2012-02-23 00:00:00", "group": 1686, "meeting": 83, "requested_duration": 7200}},
{"pk": 2266, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-01-30 00:00:00", "short": "", "attendees": 25, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "We will require remote participation for most of the editors and the WG chair. Since editors and WG chairs are in the US and Japan it will be tough to find a good time. \r\n\r\nRequesting the earliest session either 8am or 9am, or the afternoon at 3pm.", "requested_by": 112547, "materials": ["agenda-83-iri", "minutes-83-iri", "slides-83-iri-0", "slides-83-iri-1", "slides-83-iri-2", "slides-83-iri-3"], "scheduled": "2012-02-23 00:00:00", "group": 1778, "meeting": 83, "requested_duration": 3600}},
{"pk": 2267, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-01 00:00:00", "short": "", "attendees": 90, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "materials": ["agenda-83-grow", "minutes-83-grow", "slides-83-grow-0", "slides-83-grow-1"], "scheduled": "2012-02-23 00:00:00", "group": 1584, "meeting": 83, "requested_duration": 5400}},
{"pk": 2268, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-03 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "materials": ["agenda-83-spfbis", "minutes-83-spfbis", "slides-83-spfbis-0", "slides-83-spfbis-1"], "scheduled": "2012-02-23 00:00:00", "group": 1836, "meeting": 83, "requested_duration": 7200}},
{"pk": 2270, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-09 00:00:00", "short": "", "attendees": 20, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "materials": ["agenda-83-cfrg", "minutes-83-cfrg", "slides-83-cfrg-0", "slides-83-cfrg-1", "slides-83-cfrg-2", "slides-83-cfrg-3", "slides-83-cfrg-4", "slides-83-cfrg-5", "slides-83-cfrg-6", "slides-83-cfrg-7"], "scheduled": "2012-02-23 00:00:00", "group": 31, "meeting": 83, "requested_duration": 7200}},
{"pk": 2271, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-10 00:00:00", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 108757, "materials": ["agenda-83-vipr", "minutes-83-vipr", "slides-83-vipr-0", "slides-83-vipr-1", "slides-83-vipr-2", "slides-83-vipr-3"], "scheduled": "2012-02-23 00:00:00", "group": 1823, "meeting": 83, "requested_duration": 5400}},
{"pk": 2272, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "IETF Operations and Administration Plenary", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-iesg-ietf-operations-and-administration-plenary", "agenda-83-none-ietf-operations-and-administration-plenary", "minutes-83-iesg-ietf-operations-and-administration-plenary", "slides-83-iesg-0-ietf-operations-and-administration-plenary", "slides-83-iesg-1-ietf-operations-and-administration-plenary", "slides-83-iesg-10-ietf-operations-and-administration-plenary", "slides-83-iesg-11-ietf-operations-and-administration-plenary", "slides-83-iesg-12-ietf-operations-and-administration-plenary", "slides-83-iesg-2-ietf-operations-and-administration-plenary", "slides-83-iesg-3-ietf-operations-and-administration-plenary", "slides-83-iesg-4-ietf-operations-and-administration-plenary", "slides-83-iesg-5-ietf-operations-and-administration-plenary", "slides-83-iesg-6-ietf-operations-and-administration-plenary", "slides-83-iesg-7-ietf-operations-and-administration-plenary", "slides-83-iesg-8-ietf-operations-and-administration-plenary", "slides-83-iesg-9-ietf-operations-and-administration-plenary"], "scheduled": "2012-02-23 00:00:00", "group": 2, "meeting": 83, "requested_duration": 0}},
{"pk": 2273, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Technical Plenary", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-iab-technical-plenary", "minutes-83-iab-technical-plenary", "slides-83-iab-0-technical-plenary", "slides-83-iab-1-technical-plenary", "slides-83-iab-10-technical-plenary", "slides-83-iab-11-technical-plenary", "slides-83-iab-12-technical-plenary", "slides-83-iab-13-technical-plenary", "slides-83-iab-2-technical-plenary", "slides-83-iab-3", "slides-83-iab-4", "slides-83-iab-5-technical-plenary", "slides-83-iab-6-technical-plenary", "slides-83-iab-7-technical-plenary", "slides-83-iab-8-technical-plenary", "slides-83-iab-9-technical-plenary"], "scheduled": "2012-02-23 00:00:00", "group": 7, "meeting": 83, "requested_duration": 0}},
{"pk": 2274, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Tools for Creating Internet-Drafts Tutorial", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["slides-83-edu-0-tools-for-creating-internet-drafts-tutorial"], "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2275, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Orientation", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["slides-83-edu-0-newcomers-orientation", "slides-83-edu-1-newcomers-orientation"], "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2276, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Operations, Administration, and Maintenance Tutorial", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["slides-83-ietf-0-operations-administration-and-maintenance-tutorial"], "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2277, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Orientation (French)", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["slides-83-ietf-0-newcomers-orientation-french"], "scheduled": "2012-02-23 00:00:00", "group": 1591, "meeting": 83, "requested_duration": 0}},
{"pk": 2278, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Meetecho Tutorial for Participants and WG Chairs", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": [], "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2279, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Welcome Reception", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": [], "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2280, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "Newcomers' Meet and Greet (open to Newcomers and WG chairs only)", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": [], "scheduled": "2012-02-23 00:00:00", "group": 1, "meeting": 83, "requested_duration": 0}},
{"pk": 2281, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "Room Changed From 241", "modified": "2012-03-24 03:15:56", "comments": "", "requested_by": 0, "materials": ["agenda-83-i2aex", "minutes-83-i2aex", "slides-83-i2aex-0", "slides-83-i2aex-1", "slides-83-i2aex-2", "slides-83-i2aex-3", "slides-83-i2aex-4", "slides-83-i2aex-5"], "scheduled": "2012-02-23 00:00:00", "group": 1841, "meeting": 83, "requested_duration": 3600}},
{"pk": 2282, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-insipid", "minutes-83-insipid", "slides-83-insipid-0", "slides-83-insipid-1", "slides-83-insipid-2", "slides-83-insipid-3", "slides-83-insipid-4", "slides-83-insipid-5"], "scheduled": "2012-02-23 00:00:00", "group": 1839, "meeting": 83, "requested_duration": 0}},
{"pk": 2283, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-antitrust", "minutes-83-antitrust", "slides-83-antitrust-0", "slides-83-antitrust-1", "slides-83-antitrust-2"], "scheduled": "2012-02-23 00:00:00", "group": 1844, "meeting": 83, "requested_duration": 0}},
{"pk": 2284, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-weirds", "minutes-83-weirds", "slides-83-weirds-0"], "scheduled": "2012-02-23 00:00:00", "group": 1834, "meeting": 83, "requested_duration": 0}},
{"pk": 2285, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-nvo3", "minutes-83-nvo3", "slides-83-nvo3-0", "slides-83-nvo3-1", "slides-83-nvo3-2", "slides-83-nvo3-3", "slides-83-nvo3-4", "slides-83-nvo3-5", "slides-83-nvo3-6"], "scheduled": "2012-02-23 00:00:00", "group": 1840, "meeting": 83, "requested_duration": 0}},
{"pk": 2286, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-scim", "minutes-83-scim", "slides-83-scim-0", "slides-83-scim-1", "slides-83-scim-2", "slides-83-scim-3"], "scheduled": "2012-02-23 00:00:00", "group": 1842, "meeting": 83, "requested_duration": 0}},
{"pk": 2287, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-23 00:00:00", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-23 00:00:00", "comments": "", "requested_by": 0, "materials": ["agenda-83-rpsreqs", "minutes-83-rpsreqs", "slides-83-rpsreqs-0"], "scheduled": "2012-02-23 00:00:00", "group": 1843, "meeting": 83, "requested_duration": 0}},
{"pk": 2288, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-24 00:00:00", "short": "", "attendees": null, "name": "IEPG Meeting", "agenda_note": "", "modified": "2012-02-24 00:00:00", "comments": "", "requested_by": 0, "materials": [], "scheduled": "2012-02-24 00:00:00", "group": 9, "meeting": 83, "requested_duration": 0}},
{"pk": 22038, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1799, "meeting": 83, "requested_duration": 0}},
{"pk": 22039, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1642, "meeting": 83, "requested_duration": 0}},
{"pk": 22040, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1814, "meeting": 83, "requested_duration": 0}},
{"pk": 22041, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1829, "meeting": 83, "requested_duration": 0}},
{"pk": 22042, "model": "meeting.session", "fields": {"status": "notmeet", "requested": "2012-02-26 00:36:50", "short": "", "attendees": null, "name": "", "agenda_note": "", "modified": "2012-02-26 00:36:50", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1527, "meeting": 83, "requested_duration": 0}},
{"pk": 22081, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-02-27 14:36:39", "short": "", "attendees": 50, "name": "", "agenda_note": "", "modified": "2012-02-27 19:16:01", "comments": "", "requested_by": 108757, "materials": ["agenda-83-rfcform", "minutes-83-rfcform", "slides-83-rfcform-0", "slides-83-rfcform-1", "slides-83-rfcform-2", "slides-83-rfcform-3", "slides-83-rfcform-4", "slides-83-rfcform-5"], "scheduled": null, "group": 1845, "meeting": 83, "requested_duration": 3600}},
{"pk": 22083, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-05 11:15:18", "short": "", "attendees": null, "name": "Code Sprint", "agenda_note": "", "modified": "2012-03-05 11:15:18", "comments": "", "requested_by": 0, "materials": [], "scheduled": null, "group": 1712, "meeting": 83, "requested_duration": 0}},
{"pk": 22084, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-05 13:54:42", "short": "", "attendees": 100, "name": "", "agenda_note": "", "modified": "2012-03-05 13:56:51", "comments": "", "requested_by": 108757, "materials": ["agenda-83-dmm", "minutes-83-dmm", "slides-83-dmm-0", "slides-83-dmm-1", "slides-83-dmm-10", "slides-83-dmm-11", "slides-83-dmm-2", "slides-83-dmm-3", "slides-83-dmm-4", "slides-83-dmm-5", "slides-83-dmm-6", "slides-83-dmm-7", "slides-83-dmm-8", "slides-83-dmm-9"], "scheduled": null, "group": 1847, "meeting": 83, "requested_duration": 9000}},
{"pk": 22085, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-07 09:01:03", "short": "", "attendees": 100, "name": "", "agenda_note": "Combined with OPSAREA", "modified": "2012-03-12 13:25:11", "comments": "", "requested_by": 108757, "materials": ["agenda-83-opsawg", "slides-83-opsawg-0", "slides-83-opsawg-1", "slides-83-opsawg-2", "slides-83-opsawg-3", "slides-83-opsawg-4", "slides-83-opsawg-5", "slides-83-opsawg-6", "slides-83-opsawg-7", "slides-83-opsawg-8"], "scheduled": null, "group": 1714, "meeting": 83, "requested_duration": 9000}},
{"pk": 22087, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-24 02:51:38", "short": "", "attendees": 120, "name": "", "agenda_note": "", "modified": "2012-03-24 03:16:22", "comments": "", "requested_by": 108757, "materials": ["agenda-83-sidr", "minutes-83-sidr", "slides-83-sidr-10", "slides-83-sidr-11", "slides-83-sidr-12", "slides-83-sidr-13", "slides-83-sidr-14", "slides-83-sidr-15", "slides-83-sidr-16", "slides-83-sidr-17", "slides-83-sidr-3", "slides-83-sidr-4", "slides-83-sidr-5", "slides-83-sidr-6", "slides-83-sidr-7", "slides-83-sidr-8", "slides-83-sidr-9"], "scheduled": null, "group": 1680, "meeting": 83, "requested_duration": 7200}},
{"pk": 22089, "model": "meeting.session", "fields": {"status": "sched", "requested": "2012-03-28 09:52:00", "short": "", "attendees": null, "name": "Working Group Chairs' Training", "agenda_note": "", "modified": "2012-03-28 09:52:00", "comments": "", "requested_by": 0, "materials": ["slides-83-edu-0-working-group-chairs-lunch-tutorial"], "scheduled": null, "group": 1591, "meeting": 83, "requested_duration": 0}}
]

346
ietf/meeting/helpers.py Normal file
View file

@ -0,0 +1,346 @@
# Copyright The IETF Trust 2007, All Rights Reserved
#import models
import datetime
import os
import re
import tarfile
from tempfile import mkstemp
from django import forms
from django.http import Http404
from django.db.models import Max, Q
from django.conf import settings
import debug
import urllib
from django.shortcuts import get_object_or_404
from ietf.idtracker.models import InternetDraft
from ietf.ietfauth.decorators import has_role
from ietf.utils.history import find_history_active_at
from ietf.doc.models import Document, State
from ietf.proceedings.models import Meeting as OldMeeting, IESGHistory, Switches
# New models
from ietf.meeting.models import Meeting, TimeSlot, Session
from ietf.meeting.models import Schedule, ScheduledSession
from ietf.group.models import Group
class NamedTimeSlot(object):
"""
this encapsulates a TimeSlot with a Schedule, so that
specific time slots can be returned as appropriate. It proxies
most things to TimeSlot. Agenda_info returns an array of these
objects rather than actual Time Slots, as the templates do not
permit multiple parameters to be passed into a relation.
This may be irrelevant with Django 1.3+, given with argument extension
to templating language.
"""
def __init__(self, agenda, timeslot):
self.agenda = agenda
self.timeslot = timeslot
def scheduledsessions(self):
self.timeslot.scheduledsessions_set.filter(schedule=self.agenda, session__isnull=False)
@property
def time(self):
return self.timeslot.time
@property
def meeting_date(self):
return self.timeslot.meeting_date
@property
def reg_info(self):
return self.timeslot.reg_info
@property
def registration(self):
return self.timeslot.registration
@property
def session_name(self):
return self.timeslot.session_name
@property
def break_info(self):
return self.timeslot.break_info
@property
def time_desc(self):
return self.timeslot.time_desc
@property
def is_plenary(self):
return self.timeslot.is_plenary
@property
def is_plenaryw(self):
return self.timeslot.is_plenary_type("plenaryw")
@property
def is_plenaryt(self):
return self.timeslot.is_plenary_type("plenaryt")
@property
def tzname(self):
return self.timeslot.tzname
@property
def room_name(self):
if self.timeslot:
if self.timeslot.location:
return self.timeslot.location.name
else:
return "no room set for plenary %u" % (self.timeslot.pk)
else:
return "bogus NamedTimeSlot"
@property
def sessions(self):
return [ ss.session for ss in self.timeslot.scheduledsession_set.filter(schedule=self.agenda, schedule__isnull=False) ]
@property
def scheduledsessions_at_same_time(self):
if not hasattr(self, "sessions_at_same_time_cache"):
self.sessions_at_same_time_cache = self.timeslot.scheduledsessions_at_same_time(self.agenda)
return self.sessions_at_same_time_cache
@property
def scheduledsessions(self):
return self.timeslot.scheduledsession_set.filter(schedule=self.agenda)
@property
def scheduledsessions_by_area(self):
things = self.scheduledsessions_at_same_time
if things is not None:
return [ {"area":ss.area+ss.acronym_name, "info":ss} for ss in things ]
else:
return [ ]
@property
def slot_decor(self):
return self.timeslot.slot_decor
def get_ntimeslots_from_ss(agenda, scheduledsessions):
ntimeslots = []
time_seen = set()
for ss in scheduledsessions:
t = ss.timeslot
if not t.time in time_seen:
time_seen.add(t.time)
ntimeslots.append(NamedTimeSlot(agenda, t))
time_seen = None
return ntimeslots
def get_ntimeslots_from_agenda(agenda):
# now go through the timeslots, only keeping those that are
# sessions/plenary/training and don't occur at the same time
scheduledsessions = agenda.scheduledsession_set.all().order_by("timeslot__time")
ntimeslots = get_ntimeslots_from_ss(agenda, scheduledsessions)
return ntimeslots, scheduledsessions
def find_ads_for_meeting(meeting):
ads = []
meeting_time = datetime.datetime.combine(meeting.date, datetime.time(0, 0, 0))
num = 0
# get list of ADs which are/were active at the time of the meeting.
# (previous [x for x in y] syntax changed to aid debugging)
for g in Group.objects.filter(type="area").order_by("acronym"):
history = find_history_active_at(g, meeting_time)
num = num +1
if history and history != g:
#print " history[%u]: %s" % (num, history)
if history.state_id == "active":
for x in history.rolehistory_set.filter(name="ad").select_related():
#print "xh[%u]: %s" % (num, x)
ads.append(IESGHistory().from_role(x, meeting_time))
else:
#print " group[%u]: %s" % (num, g)
if g.state_id == "active":
for x in g.role_set.filter(name="ad").select_related('group', 'person'):
#print "xg[%u]: %s (#%u)" % (num, x, x.pk)
ads.append(IESGHistory().from_role(x, meeting_time))
return ads
def agenda_info(num=None, name=None):
"""
XXX this should really be a method on Meeting
"""
try:
if num != None:
meeting = OldMeeting.objects.get(number=num)
else:
meeting = OldMeeting.objects.all().order_by('-date')[:1].get()
except OldMeeting.DoesNotExist:
raise Http404("No meeting information for meeting %s available" % num)
if name is not None:
try:
agenda = meeting.schedule_set.get(name=name)
except Schedule.DoesNotExist:
raise Http404("Meeting %s has no agenda named %s" % (num, name))
else:
agenda = meeting.agenda
if agenda is None:
raise Http404("Meeting %s has no agenda set yet" % (num))
ntimeslots,scheduledsessions = get_ntimeslots_from_agenda(agenda)
update = Switches().from_object(meeting)
venue = meeting.meeting_venue
ads = find_ads_for_meeting(meeting)
active_agenda = State.objects.get(type='agenda', slug='active')
plenary_agendas = Document.objects.filter(session__meeting=meeting, session__scheduledsession__timeslot__type="plenary", type="agenda", ).distinct()
plenaryw_agenda = plenaryt_agenda = "The Plenary has not been scheduled"
for agenda in plenary_agendas:
if active_agenda in agenda.states.all():
# we use external_url at the moment, should probably regularize
# the filenames to match the document name instead
path = os.path.join(settings.AGENDA_PATH, meeting.number, "agenda", agenda.external_url)
try:
f = open(path)
s = f.read()
f.close()
except IOError:
s = "THE AGENDA HAS NOT BEEN UPLOADED YET"
if "tech" in agenda.name.lower():
plenaryt_agenda = s
else:
plenaryw_agenda = s
return ntimeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda
# get list of all areas, + IRTF + IETF (plenaries).
def get_pseudo_areas():
return Group.objects.filter(Q(state="active", name="IRTF")|
Q(state="active", name="IETF")|
Q(state="active", type="area")).order_by('acronym')
# get list of all areas, + IRTF.
def get_areas():
return Group.objects.filter(Q(state="active",
name="IRTF")|
Q(state="active", type="area")).order_by('acronym')
# get list of areas that are referenced.
def get_area_list_from_sessions(scheduledsessions, num):
return scheduledsessions.filter(timeslot__type = 'Session',
session__group__parent__isnull = False).order_by(
'session__group__parent__acronym').distinct(
'session__group__parent__acronym').values_list(
'session__group__parent__acronym',flat=True)
def build_all_agenda_slices(scheduledsessions, all = False):
time_slices = []
date_slices = {}
ids = []
for ss in scheduledsessions:
if(all or ss.session != None):# and len(ss.timeslot.session.agenda_note)>1):
ymd = ss.timeslot.time.date()
if ymd not in date_slices and ss.timeslot.location != None:
date_slices[ymd] = []
time_slices.append(ymd)
if ymd in date_slices:
if [ss.timeslot.time, ss.timeslot.time+ss.timeslot.duration] not in date_slices[ymd]: # only keep unique entries
date_slices[ymd].append([ss.timeslot.time, ss.timeslot.time+ss.timeslot.duration])
time_slices.sort()
return time_slices,date_slices
def get_scheduledsessions_from_schedule(schedule):
ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False).exclude(session__isnull = True).order_by('timeslot__time','timeslot__name','session__group__group')
return ss
def get_all_scheduledsessions_from_schedule(schedule):
ss = schedule.scheduledsession_set.filter(timeslot__location__isnull = False).order_by('timeslot__time','timeslot__name')
return ss
def get_modified_from_scheduledsessions(scheduledsessions):
return scheduledsessions.aggregate(Max('timeslot__modified'))['timeslot__modified__max']
def get_wg_name_list(scheduledsessions):
return scheduledsessions.filter(timeslot__type = 'Session',
session__group__isnull = False,
session__group__parent__isnull = False).order_by(
'session__group__acronym').distinct(
'session__group').values_list(
'session__group__acronym',flat=True)
def get_wg_list(scheduledsessions):
wg_name_list = get_wg_name_list(scheduledsessions)
return Group.objects.filter(acronym__in = set(wg_name_list)).order_by('parent__acronym','acronym')
def get_meeting(num=None):
if (num == None):
meeting = Meeting.objects.filter(type="ietf").order_by("-date")[:1].get()
else:
meeting = get_object_or_404(Meeting, number=num)
return meeting
def get_schedule(meeting, name=None):
if name is None:
schedule = meeting.agenda
else:
schedule = get_object_or_404(meeting.schedule_set, name=name)
return schedule
def get_schedule_by_id(meeting, schedid):
if schedid is None:
schedule = meeting.agenda
else:
schedule = get_object_or_404(meeting.schedule_set, id=int(schedid))
return schedule
def agenda_permissions(meeting, schedule, user):
# do this in positive logic.
cansee = False
canedit= False
requestor= None
try:
requestor = user.get_profile()
except:
pass
#sys.stdout.write("requestor: %s for sched: %s \n" % ( requestor, schedule ))
if has_role(user, 'Secretariat'):
cansee = True
# secretariat is not superuser for edit!
if (has_role(user, 'Area Director') and schedule.visible):
cansee = True
if (has_role(user, 'IAB Chair') and schedule.visible):
cansee = True
if (has_role(user, 'IRTF Chair') and schedule.visible):
cansee = True
if schedule.public:
cansee = True
if requestor is not None and schedule.owner == requestor:
cansee = True
canedit = True
return cansee,canedit

View file

@ -0,0 +1,43 @@
from django.core.management.base import BaseCommand
from django.core import serializers
from optparse import make_option
import sys
class Command(BaseCommand):
option_list = BaseCommand.option_list + (
make_option('--format', default='json', dest='format',
help='Specifies the output serialization format for fixtures.'),
make_option('--indent', default=None, dest='indent', type='int',
help='Specifies the indent level to use when pretty-printing output'),
# make_option('--schedulename', action='store', dest='schedulename', default=False,
# help='Tells Django to stop running the test suite after first failed test.')
)
help = 'Saves the scheduled information for a named schedule in JSON format'
args = 'meetingname [owner] schedname'
def handle(self, *labels, **options):
from django.conf import settings
from django.test.utils import get_runner
meetingname = labels[0]
schedname = labels[1]
from ietf.meeting.helpers import get_meeting,get_schedule
format = options.get('format','json')
indent = options.get('indent', 2)
meeting = get_meeting(meetingname)
schedule = get_schedule(meeting, schedname)
scheduledsessions = schedule.scheduledsession_set.all()
# cribbed from django/core/management/commands/dumpdata.py
# Check that the serialization format exists; this is a shortcut to
# avoid collating all the objects and _then_ failing.
if format not in serializers.get_public_serializer_formats():
raise CommandError("Unknown serialization format: %s" % format)
return serializers.serialize(format, scheduledsessions, indent=indent,
use_natural_keys=True)

View file

@ -0,0 +1,391 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding model 'ScheduledSession'
db.create_table('meeting_scheduledsession', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('timeslot', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.TimeSlot'])),
('session', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Session'])),
('schedule', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Schedule'])),
('notes', self.gf('django.db.models.fields.TextField')(blank=True)),
))
db.send_create_signal('meeting', ['ScheduledSession'])
# Adding model 'Schedule'
db.create_table('meeting_schedule', (
('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('name', self.gf('django.db.models.fields.CharField')(max_length=16)),
('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['person.Person'])),
('visible', self.gf('django.db.models.fields.BooleanField')(default=True)),
('public', self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal('meeting', ['Schedule'])
# Adding field 'Meeting.agenda'
db.add_column('meeting_meeting', 'agenda',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Schedule'], blank=True, null=True),
keep_default=False)
# Adding field 'Room.capacity'
db.add_column('meeting_room', 'capacity',
self.gf('django.db.models.fields.IntegerField')(default=50),
keep_default=False)
# Adding field 'Constraint.person'
db.add_column('meeting_constraint', 'person',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['person.Person'], null=True, blank=True),
keep_default=False)
# Adding field 'Constraint.day'
db.add_column('meeting_constraint', 'day',
self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True),
keep_default=False)
# Changing field 'Constraint.target'
db.alter_column('meeting_constraint', 'target_id', self.gf('django.db.models.fields.related.ForeignKey')(null=True, to=orm['group.Group']))
def backwards(self, orm):
# Deleting model 'ScheduledSession'
db.delete_table('meeting_scheduledsession')
# Deleting model 'Schedule'
db.delete_table('meeting_schedule')
# Deleting field 'Meeting.agenda'
db.delete_column('meeting_meeting', 'agenda_id')
# Deleting field 'Room.capacity'
db.delete_column('meeting_room', 'capacity')
# Deleting field 'Constraint.person'
db.delete_column('meeting_constraint', 'person_id')
# Deleting field 'Constraint.day'
db.delete_column('meeting_constraint', 'day')
# Changing field 'Constraint.target'
db.alter_column('meeting_constraint', 'target_id', self.gf('django.db.models.fields.related.ForeignKey')(default=1, to=orm['group.Group']))
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'Meta': {'object_name': 'DocAlias'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'Meta': {'object_name': 'Document'},
'abstract': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'symmetrical': 'False', 'through': "orm['doc.DocumentAuthor']", 'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'reversely_related_document_set'", 'blank': 'True', 'through': "orm['doc.RelatedDocument']", 'to': "orm['doc.DocAlias']"}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['name.DocTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'})
},
'doc.documentauthor': {
'Meta': {'ordering': "['document', 'order']", 'object_name': 'DocumentAuthor'},
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1'})
},
'doc.relateddocument': {
'Meta': {'object_name': 'RelatedDocument'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'relationship': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocRelationshipName']"}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.DocAlias']"})
},
'doc.state': {
'Meta': {'ordering': "['type', 'order']", 'object_name': 'State'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'next_states': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'previous_states'", 'symmetrical': 'False', 'to': "orm['doc.State']"}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.StateType']"}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'doc.statetype': {
'Meta': {'object_name': 'StateType'},
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
'group.group': {
'Meta': {'object_name': 'Group'},
'acronym': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '40'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'}),
'unused_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'unused_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocTagName']", 'symmetrical': 'False', 'blank': 'True'})
},
'meeting.constraint': {
'Meta': {'object_name': 'Constraint'},
'day': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.ConstraintName']"}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_source_set'", 'to': "orm['group.Group']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_target_set'", 'null': 'True', 'to': "orm['group.Group']"})
},
'meeting.meeting': {
'Meta': {'object_name': 'Meeting'},
'break_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
'date': ('django.db.models.fields.DateField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'agenda': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']", 'blank': 'True'}),
'reg_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'time_zone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.MeetingTypeName']"}),
'venue_addr': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
'meeting.schedule': {
'Meta': {'object_name': 'Schedule'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'meeting.room': {
'Meta': {'object_name': 'Room'},
'capacity': ('django.db.models.fields.IntegerField', [], {'default': '50'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'meeting.scheduledsession': {
'Meta': {'object_name': 'ScheduledSession'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']"}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Session']"}),
'timeslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.TimeSlot']"})
},
'meeting.session': {
'Meta': {'object_name': 'Session'},
'agenda_note': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'attendees': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']", 'symmetrical': 'False', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'requested': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'requested_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'requested_duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {'default': '0'}),
'scheduled': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.SessionStatusName']"})
},
'meeting.timeslot': {
'Meta': {'object_name': 'TimeSlot'},
'duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Room']", 'null': 'True', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Session']", 'null': 'True', 'blank': 'True'}),
'sessions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'slots'", 'to': "orm['meeting.Session']", 'through': "orm['meeting.ScheduledSession']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
'show_location': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.TimeSlotTypeName']"})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'person.email': {
'Meta': {'object_name': 'Email'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'Meta': {'object_name': 'Person'},
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['meeting']

View file

@ -0,0 +1,352 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'ScheduledSession.modified'
db.add_column('meeting_scheduledsession', 'modified',
self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now),
keep_default=False)
# Adding field 'Schedule.meeting'
db.add_column('meeting_schedule', 'meeting',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Meeting'], null=True),
keep_default=False)
# Changing field 'ScheduledSession.session'
db.alter_column('meeting_scheduledsession', 'session_id', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Session'], null=True))
# Changing field 'Room.capacity'
db.alter_column('meeting_room', 'capacity', self.gf('django.db.models.fields.IntegerField')(null=True))
def backwards(self, orm):
# Deleting field 'ScheduledSession.modified'
db.delete_column('meeting_scheduledsession', 'modified')
# Changing field 'Room.capacity'
db.alter_column('meeting_room', 'capacity', self.gf('django.db.models.fields.IntegerField')())
# Deleting field 'Schedule.meeting'
db.delete_column('meeting_schedule', 'meeting_id')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'Meta': {'object_name': 'DocAlias'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'Meta': {'object_name': 'Document'},
'abstract': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'symmetrical': 'False', 'through': "orm['doc.DocumentAuthor']", 'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'reversely_related_document_set'", 'blank': 'True', 'through': "orm['doc.RelatedDocument']", 'to': "orm['doc.DocAlias']"}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['name.DocTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'})
},
'doc.documentauthor': {
'Meta': {'ordering': "['document', 'order']", 'object_name': 'DocumentAuthor'},
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1'})
},
'doc.relateddocument': {
'Meta': {'object_name': 'RelatedDocument'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'relationship': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocRelationshipName']"}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.DocAlias']"})
},
'doc.state': {
'Meta': {'ordering': "['type', 'order']", 'object_name': 'State'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'next_states': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'previous_states'", 'blank': 'True', 'to': "orm['doc.State']"}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.StateType']"}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'doc.statetype': {
'Meta': {'object_name': 'StateType'},
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
'group.group': {
'Meta': {'object_name': 'Group'},
'acronym': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '40'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'}),
'unused_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'unused_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocTagName']", 'symmetrical': 'False', 'blank': 'True'})
},
'meeting.constraint': {
'Meta': {'object_name': 'Constraint'},
'day': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.ConstraintName']"}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_source_set'", 'to': "orm['group.Group']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_target_set'", 'null': 'True', 'to': "orm['group.Group']"})
},
'meeting.meeting': {
'Meta': {'object_name': 'Meeting'},
'agenda': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['meeting.Schedule']"}),
'agenda_note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'break_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
'date': ('django.db.models.fields.DateField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'reg_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'time_zone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.MeetingTypeName']"}),
'venue_addr': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
'meeting.room': {
'Meta': {'object_name': 'Room'},
'capacity': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'meeting.schedule': {
'Meta': {'object_name': 'Schedule'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']", 'null': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'meeting.scheduledsession': {
'Meta': {'object_name': 'ScheduledSession'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']"}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['meeting.Session']", 'null': 'True'}),
'timeslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.TimeSlot']"})
},
'meeting.session': {
'Meta': {'object_name': 'Session'},
'agenda_note': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'attendees': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']", 'symmetrical': 'False', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'requested': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'requested_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'requested_duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {'default': '0'}),
'scheduled': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.SessionStatusName']"})
},
'meeting.timeslot': {
'Meta': {'object_name': 'TimeSlot'},
'duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Room']", 'null': 'True', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'sessions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'slots'", 'to': "orm['meeting.Session']", 'through': "orm['meeting.ScheduledSession']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
'show_location': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.TimeSlotTypeName']"})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'person.email': {
'Meta': {'object_name': 'Email'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'Meta': {'object_name': 'Person'},
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['meeting']

View file

@ -0,0 +1,375 @@
# -*- coding: utf-8 -*-
import datetime
import sys
from south.db import db
from south.v2 import DataMigration
from django.db import models
class Migration(DataMigration):
def forwards(self, orm):
#from ietf.person.models import Person
Person = orm['person.Person']
# can not use custom manager
wanda = Person.objects.get(user__username = 'wnl') # Wanda Lo
Meeting = orm['meeting.meeting']
ScheduledSession = orm['meeting.ScheduledSession']
Schedule = orm['meeting.Schedule']
for mtg in Meeting.objects.all():
sys.stdout.write ("Processing meeting %s.." % (mtg.number))
try:
if mtg.agenda is not None:
# assume that we have done this meeting already.
sys.stdout.write("already done\n")
continue
except Meeting.DoesNotExist:
pass
na = Schedule(name=("official_%s"%(mtg.number))[0:15],
owner=wanda,
meeting = mtg,
visible=True, public=True)
na.save()
mtg.agenda = na
mtg.save()
sys.stdout.write("\n creating schedule %s\n" %(na.name))
for slot in mtg.timeslot_set.all():
session = slot.session
# skip slots with no sessions.
if session is None:
wg = "none"
else:
wg = session.group.acronym
sys.stdout.write (" session for wg:%s \r" % (wg))
ss = ScheduledSession(timeslot = slot,
session = slot.session,
schedule = na,
notes = "Auto created")
ss.save()
sys.stdout.write("\n")
#
#
def backwards(self, orm):
"Write your backwards methods here."
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'Meta': {'object_name': 'DocAlias'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'Meta': {'object_name': 'Document'},
'abstract': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'symmetrical': 'False', 'through': "orm['doc.DocumentAuthor']", 'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'reversely_related_document_set'", 'blank': 'True', 'through': "orm['doc.RelatedDocument']", 'to': "orm['doc.DocAlias']"}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['name.DocTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'})
},
'doc.documentauthor': {
'Meta': {'ordering': "['document', 'order']", 'object_name': 'DocumentAuthor'},
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1'})
},
'doc.relateddocument': {
'Meta': {'object_name': 'RelatedDocument'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'relationship': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocRelationshipName']"}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.DocAlias']"})
},
'doc.state': {
'Meta': {'ordering': "['type', 'order']", 'object_name': 'State'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'next_states': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'previous_states'", 'symmetrical': 'False', 'to': "orm['doc.State']"}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.StateType']"}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'doc.statetype': {
'Meta': {'object_name': 'StateType'},
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
'group.group': {
'Meta': {'object_name': 'Group'},
'acronym': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '40'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'}),
'unused_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'unused_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocTagName']", 'symmetrical': 'False', 'blank': 'True'})
},
'meeting.constraint': {
'Meta': {'object_name': 'Constraint'},
'day': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.ConstraintName']"}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_source_set'", 'to': "orm['group.Group']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_target_set'", 'null': 'True', 'to': "orm['group.Group']"})
},
'meeting.meeting': {
'Meta': {'object_name': 'Meeting'},
'break_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
'date': ('django.db.models.fields.DateField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'agenda': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']", 'blank': 'True', 'null': 'True'}),
'reg_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'time_zone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.MeetingTypeName']"}),
'venue_addr': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
'meeting.schedule': {
'Meta': {'object_name': 'Schedule'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']", 'null': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'meeting.room': {
'Meta': {'object_name': 'Room'},
'capacity': ('django.db.models.fields.IntegerField', [], {'default': '50'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'meeting.scheduledsession': {
'Meta': {'object_name': 'ScheduledSession'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']"}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['meeting.Session']", 'null': 'True'}),
'timeslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.TimeSlot']"})
},
'meeting.session': {
'Meta': {'object_name': 'Session'},
'agenda_note': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'attendees': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']", 'symmetrical': 'False', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'requested': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'requested_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'requested_duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {'default': '0'}),
'scheduled': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.SessionStatusName']"})
},
'meeting.timeslot': {
'Meta': {'object_name': 'TimeSlot'},
'duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Room']", 'null': 'True', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Session']", 'null': 'True', 'blank': 'True'}),
'sessions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'slots'", 'to': "orm['meeting.Session']", 'through': "orm['meeting.ScheduledSession']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
'show_location': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.TimeSlotTypeName']"})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'person.email': {
'Meta': {'object_name': 'Email'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'Meta': {'object_name': 'Person'},
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['meeting']
symmetrical = True

View file

@ -0,0 +1,334 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting field 'TimeSlot.session'
db.delete_column('meeting_timeslot', 'session_id')
def backwards(self, orm):
# Adding field 'TimeSlot.session'
db.add_column('meeting_timeslot', 'session',
self.gf('django.db.models.fields.related.ForeignKey')(to=orm['meeting.Session'], null=True, blank=True),
keep_default=False)
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'Meta': {'object_name': 'DocAlias'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'Meta': {'object_name': 'Document'},
'abstract': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'symmetrical': 'False', 'through': "orm['doc.DocumentAuthor']", 'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'reversely_related_document_set'", 'blank': 'True', 'through': "orm['doc.RelatedDocument']", 'to': "orm['doc.DocAlias']"}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['name.DocTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'})
},
'doc.documentauthor': {
'Meta': {'ordering': "['document', 'order']", 'object_name': 'DocumentAuthor'},
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1'})
},
'doc.relateddocument': {
'Meta': {'object_name': 'RelatedDocument'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'relationship': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocRelationshipName']"}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.DocAlias']"})
},
'doc.state': {
'Meta': {'ordering': "['type', 'order']", 'object_name': 'State'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'next_states': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'previous_states'", 'symmetrical': 'False', 'to': "orm['doc.State']"}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.StateType']"}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'doc.statetype': {
'Meta': {'object_name': 'StateType'},
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
'group.group': {
'Meta': {'object_name': 'Group'},
'acronym': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '40'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'}),
'unused_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'unused_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocTagName']", 'symmetrical': 'False', 'blank': 'True'})
},
'meeting.constraint': {
'Meta': {'object_name': 'Constraint'},
'day': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.ConstraintName']"}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_source_set'", 'to': "orm['group.Group']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_target_set'", 'null': 'True', 'to': "orm['group.Group']"})
},
'meeting.meeting': {
'Meta': {'object_name': 'Meeting'},
'break_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
'date': ('django.db.models.fields.DateField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'agenda': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']", 'null': 'True', 'blank': 'True'}),
'reg_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'time_zone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.MeetingTypeName']"}),
'venue_addr': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
'meeting.schedule': {
'Meta': {'object_name': 'Schedule'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'meeting.room': {
'Meta': {'object_name': 'Room'},
'capacity': ('django.db.models.fields.IntegerField', [], {'default': '50'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'meeting.scheduledsession': {
'Meta': {'object_name': 'ScheduledSession'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']"}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Session']"}),
'timeslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.TimeSlot']"})
},
'meeting.session': {
'Meta': {'object_name': 'Session'},
'agenda_note': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'attendees': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']", 'symmetrical': 'False', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'requested': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'requested_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'requested_duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {'default': '0'}),
'scheduled': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.SessionStatusName']"})
},
'meeting.timeslot': {
'Meta': {'object_name': 'TimeSlot'},
'duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Room']", 'null': 'True', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'sessions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'slots'", 'to': "orm['meeting.Session']", 'through': "orm['meeting.ScheduledSession']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
'show_location': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.TimeSlotTypeName']"})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'person.email': {
'Meta': {'object_name': 'Email'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'Meta': {'object_name': 'Person'},
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['meeting']

View file

@ -0,0 +1,336 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'ScheduledSession.extendedfrom'
db.add_column('meeting_scheduledsession', 'extendedfrom',
self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['meeting.ScheduledSession'], null=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'ScheduledSession.extendedfrom'
db.delete_column('meeting_scheduledsession', 'extendedfrom_id')
models = {
'auth.group': {
'Meta': {'object_name': 'Group'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
'auth.permission': {
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'})
},
'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
'doc.docalias': {
'Meta': {'object_name': 'DocAlias'},
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'})
},
'doc.document': {
'Meta': {'object_name': 'Document'},
'abstract': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'ad_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['person.Email']", 'symmetrical': 'False', 'through': "orm['doc.DocumentAuthor']", 'blank': 'True'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'external_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'intended_std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.IntendedStdLevelName']", 'null': 'True', 'blank': 'True'}),
'internal_comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'primary_key': 'True'}),
'note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'notify': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1', 'blank': 'True'}),
'pages': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'related': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'reversely_related_document_set'", 'blank': 'True', 'through': "orm['doc.RelatedDocument']", 'to': "orm['doc.DocAlias']"}),
'rev': ('django.db.models.fields.CharField', [], {'max_length': '16', 'blank': 'True'}),
'shepherd': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'shepherd_document_set'", 'null': 'True', 'to': "orm['person.Person']"}),
'states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'std_level': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StdLevelName']", 'null': 'True', 'blank': 'True'}),
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.StreamName']", 'null': 'True', 'blank': 'True'}),
'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'to': "orm['name.DocTagName']", 'null': 'True', 'blank': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocTypeName']", 'null': 'True', 'blank': 'True'})
},
'doc.documentauthor': {
'Meta': {'ordering': "['document', 'order']", 'object_name': 'DocumentAuthor'},
'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Email']"}),
'document': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '1'})
},
'doc.relateddocument': {
'Meta': {'object_name': 'RelatedDocument'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'relationship': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.DocRelationshipName']"}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.Document']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.DocAlias']"})
},
'doc.state': {
'Meta': {'ordering': "['type', 'order']", 'object_name': 'State'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'next_states': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'previous_states'", 'blank': 'True', 'to': "orm['doc.State']"}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['doc.StateType']"}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'doc.statetype': {
'Meta': {'object_name': 'StateType'},
'label': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
'group.group': {
'Meta': {'object_name': 'Group'},
'acronym': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '40'}),
'ad': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'charter': ('django.db.models.fields.related.OneToOneField', [], {'blank': 'True', 'related_name': "'chartered_group'", 'unique': 'True', 'null': 'True', 'to': "orm['doc.Document']"}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'list_archive': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'list_email': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}),
'list_subscribe': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '80'}),
'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']", 'null': 'True', 'blank': 'True'}),
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupStateName']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.GroupTypeName']", 'null': 'True'}),
'unused_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.State']", 'symmetrical': 'False', 'blank': 'True'}),
'unused_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['name.DocTagName']", 'symmetrical': 'False', 'blank': 'True'})
},
'meeting.constraint': {
'Meta': {'object_name': 'Constraint'},
'day': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.ConstraintName']"}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True', 'blank': 'True'}),
'source': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_source_set'", 'to': "orm['group.Group']"}),
'target': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'constraint_target_set'", 'null': 'True', 'to': "orm['group.Group']"})
},
'meeting.meeting': {
'Meta': {'object_name': 'Meeting'},
'agenda': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['meeting.Schedule']"}),
'agenda_note': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'break_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'city': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'country': ('django.db.models.fields.CharField', [], {'max_length': '2', 'blank': 'True'}),
'date': ('django.db.models.fields.DateField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'number': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
'reg_area': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'time_zone': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.MeetingTypeName']"}),
'venue_addr': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'venue_name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'})
},
'meeting.room': {
'Meta': {'object_name': 'Room'},
'capacity': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'})
},
'meeting.schedule': {
'Meta': {'object_name': 'Schedule'},
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']", 'null': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'public': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'visible': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'meeting.scheduledsession': {
'Meta': {'object_name': 'ScheduledSession'},
'extendedfrom': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['meeting.ScheduledSession']", 'null': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'notes': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'schedule': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Schedule']"}),
'session': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['meeting.Session']", 'null': 'True'}),
'timeslot': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.TimeSlot']"})
},
'meeting.session': {
'Meta': {'object_name': 'Session'},
'agenda_note': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'attendees': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'comments': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['group.Group']"}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'materials': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['doc.Document']", 'symmetrical': 'False', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'requested': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'requested_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']"}),
'requested_duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {'default': '0'}),
'scheduled': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'blank': 'True'}),
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.SessionStatusName']"})
},
'meeting.timeslot': {
'Meta': {'object_name': 'TimeSlot'},
'duration': ('ietf.meeting.timedeltafield.TimedeltaField', [], {}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'location': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Room']", 'null': 'True', 'blank': 'True'}),
'meeting': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['meeting.Meeting']"}),
'modified': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'sessions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'slots'", 'to': "orm['meeting.Session']", 'through': "orm['meeting.ScheduledSession']", 'blank': 'True', 'symmetrical': 'False', 'null': 'True'}),
'show_location': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {}),
'type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['name.TimeSlotTypeName']"})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'person.email': {
'Meta': {'object_name': 'Email'},
'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'address': ('django.db.models.fields.CharField', [], {'max_length': '64', 'primary_key': 'True'}),
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['person.Person']", 'null': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'})
},
'person.person': {
'Meta': {'object_name': 'Person'},
'address': ('django.db.models.fields.TextField', [], {'max_length': '255', 'blank': 'True'}),
'affiliation': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
'ascii': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'ascii_short': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
'time': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'user': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['auth.User']", 'unique': 'True', 'null': 'True', 'blank': 'True'})
}
}
complete_apps = ['meeting']

View file

@ -1,11 +1,17 @@
# old meeting models can be found in ../proceedings/models.py
import pytz, datetime
from urlparse import urljoin
import copy
from django.db import models
from django.conf import settings
from timedeltafield import TimedeltaField
# mostly used by json_dict()
from django.template.defaultfilters import slugify, date as date_format, time as time_format
from django.utils import formats
from ietf.group.models import Group
from ietf.person.models import Person
from ietf.doc.models import Document
@ -17,6 +23,22 @@ countries.sort(lambda x,y: cmp(x[1], y[1]))
timezones = [(name, name) for name in pytz.common_timezones]
timezones.sort()
# this is used in models to format dates, as the simplejson serializer
# can not deal with them, and the django provided serializer is inaccessible.
from django.utils import datetime_safe
DATE_FORMAT = "%Y-%m-%d"
TIME_FORMAT = "%H:%M:%S"
def fmt_date(o):
d = datetime_safe.new_date(o)
return d.strftime(DATE_FORMAT)
def fmt_datetime(o):
d = datetime_safe.new_date(o)
return d.strftime("%s %s" % (DATE_FORMAT, TIME_FORMAT))
class Meeting(models.Model):
# number is either the number for IETF meetings, or some other
# identifier for interim meetings/IESG retreats/liaison summits/...
@ -25,7 +47,7 @@ class Meeting(models.Model):
# Date is useful when generating a set of timeslot for this meeting, but
# is not used to determine date for timeslot instances thereafter, as
# they have their own datetime field.
date = models.DateField()
date = models.DateField()
city = models.CharField(blank=True, max_length=255)
country = models.CharField(blank=True, max_length=2, choices=countries)
# We can't derive time-zone from country, as there are some that have
@ -37,6 +59,7 @@ class Meeting(models.Model):
break_area = models.CharField(blank=True, max_length=255)
reg_area = models.CharField(blank=True, max_length=255)
agenda_note = models.TextField(blank=True, help_text="Text in this field will be placed at the top of the html agenda page for the meeting. HTML can be used, but will not validated.")
agenda = models.ForeignKey('Schedule',null=True,blank=True, related_name='+')
def __unicode__(self):
if self.type_id == "ietf":
@ -83,20 +106,122 @@ class Meeting(models.Model):
def get_submission_correction_date(self):
return self.date + datetime.timedelta(days=settings.SUBMISSION_CORRECTION_DAYS)
def get_schedule_by_name(self, name):
qs = self.schedule_set.filter(name=name)
if qs:
return qs[0]
return None
def json_url(self):
return "/meeting/%s.json" % (self.number, )
def base_url(self):
return "/meeting/%s" % (self.number, )
def json_dict(self, host_scheme):
# unfortunately, using the datetime aware json encoder seems impossible,
# so the dates are formatted as strings here.
agenda_url = ""
if self.agenda:
agenda_url = urljoin(host_scheme, self.agenda.base_url())
return {
'href': urljoin(host_scheme, self.base_url()),
'name': self.number,
'submission_start_date': fmt_date(self.get_submission_start_date()),
'submission_cut_off_date': fmt_date(self.get_submission_cut_off_date()),
'submission_correction_date': fmt_date(self.get_submission_correction_date()),
'date': fmt_date(self.date),
'agenda_href': agenda_url,
'city': self.city,
'country': self.country,
'time_zone': self.time_zone,
'venue_name': self.venue_name,
'venue_addr': self.venue_addr,
'break_area': self.break_area,
'reg_area': self.reg_area
}
def build_timeslices(self):
days = [] # the days of the meetings
time_slices = {} # the times on each day
slots = {}
ids = []
for ts in self.timeslot_set.all():
if ts.location is None:
continue
ymd = ts.time.date()
if ymd not in time_slices:
time_slices[ymd] = []
slots[ymd] = []
days.append(ymd)
if ymd in time_slices:
# only keep unique entries
if [ts.time, ts.time + ts.duration] not in time_slices[ymd]:
time_slices[ymd].append([ts.time, ts.time + ts.duration])
slots[ymd].append(ts)
days.sort()
for ymd in time_slices:
time_slices[ymd].sort()
slots[ymd].sort(lambda x,y: cmp(x.time, y.time))
return days,time_slices,slots
# this functions makes a list of timeslices and rooms, and
# makes sure that all schedules have all of them.
def create_all_timeslots(self):
alltimeslots = self.timeslot_set.all()
for sched in self.schedule_set.all():
ts_hash = {}
for ss in sched.scheduledsession_set.all():
ts_hash[ss.timeslot] = ss
for ts in alltimeslots:
if not (ts in ts_hash):
ScheduledSession.objects.create(schedule = sched,
timeslot = ts)
class Room(models.Model):
meeting = models.ForeignKey(Meeting)
name = models.CharField(max_length=255)
capacity = models.IntegerField(null=True, blank=True)
def __unicode__(self):
return self.name
def delete_timeslots(self):
for ts in self.timeslot_set.all():
ts.scheduledsession_set.all().delete()
ts.delete()
def create_timeslots(self):
days, time_slices, slots = self.meeting.build_timeslices()
for day in days:
for ts in slots[day]:
ts0 = TimeSlot.objects.create(type_id=ts.type_id,
meeting=self.meeting,
name=ts.name,
time=ts.time,
location=self,
duration=ts.duration)
self.meeting.create_all_timeslots()
def json_url(self):
return "/meeting/%s/room/%s.json" % (self.meeting.number, self.id)
def json_dict(self, host_scheme):
return {
'href': urljoin(host_scheme, self.json_url()),
'name': self.name,
'capacity': self.capacity,
}
class TimeSlot(models.Model):
"""
Everything that would appear on the meeting agenda of a meeting is
mapped to a time slot, including breaks. Sessions are connected to
TimeSlots during scheduling. A template function to populate a
meeting with an appropriate set of TimeSlots is probably also
needed.
TimeSlots during scheduling.
"""
meeting = models.ForeignKey(Meeting)
type = models.ForeignKey(TimeSlotTypeName)
@ -105,14 +230,36 @@ class TimeSlot(models.Model):
duration = TimedeltaField()
location = models.ForeignKey(Room, blank=True, null=True)
show_location = models.BooleanField(default=True, help_text="Show location in agenda")
session = models.ForeignKey('Session', null=True, blank=True, help_text=u"Scheduled session, if any")
sessions = models.ManyToManyField('Session', related_name='slots', through='ScheduledSession', null=True, blank=True, help_text=u"Scheduled session, if any")
modified = models.DateTimeField(default=datetime.datetime.now)
#
@property
def time_desc(self):
return u"%s-%s" % (self.time.strftime("%H%M"), (self.time + self.duration).strftime("%H%M"))
def meeting_date(self):
return self.time.date()
def registration(self):
# below implements a object local cache
# it tries to find a timeslot of type registration which starts at the same time as this slot
# so that it can be shown at the top of the agenda.
if not hasattr(self, '_reg_info'):
try:
self._reg_info = TimeSlot.objects.get(meeting=self.meeting, time__month=self.time.month, time__day=self.time.day, type="reg")
except TimeSlot.DoesNotExist:
self._reg_info = None
return self._reg_info
def reg_info(self):
return (self.registration() is not None)
def __unicode__(self):
location = self.get_location()
if not location:
location = "(no location)"
return u"%s: %s-%s %s, %s" % (self.meeting.number, self.time.strftime("%m-%d %H:%M"), (self.time + self.duration).strftime("%H:%M"), self.name, location)
def end_time(self):
return self.time + self.duration
@ -151,17 +298,378 @@ class TimeSlot(models.Model):
else:
return None
def session_name(self):
if self.type_id not in ("session", "plenary"):
return None
class Dummy(object):
def __unicode__(self):
return self.session_name
d = Dummy()
d.session_name = self.name
return d
def session_for_schedule(self, schedule):
ss = scheduledsession_set.filter(schedule=schedule).all()[0]
if ss:
return ss.session
else:
return None
def scheduledsessions_at_same_time(self, agenda=None):
if agenda is None:
agenda = self.meeting.agenda
return agenda.scheduledsession_set.filter(timeslot__time=self.time, timeslot__type__in=("session", "plenary", "other"))
@property
def js_identifier(self):
# this returns a unique identifier that is js happy.
# {{s.timeslot.time|date:'Y-m-d'}}_{{ s.timeslot.time|date:'Hi' }}"
# also must match:
# {{r|slugify}}_{{day}}_{{slot.0|date:'Hi'}}
return "%s_%s_%s" % (slugify(self.get_location()), self.time.strftime('%Y-%m-%d'), self.time.strftime('%H%M'))
@property
def is_plenary(self):
return self.type_id == "plenary"
@property
def is_plenary_type(self, name, agenda=None):
return self.scheduledsessions_at_same_time(agenda)[0].acronym == name
@property
def slot_decor(self):
if self.type_id == "plenary":
return "plenary";
elif self.type_id == "session":
return "session";
elif self.type_id == "non-session":
return "non-session";
else:
return "reserved";
def json_dict(self, selfurl):
ts = dict()
ts['timeslot_id'] = self.id
ts['room'] = slugify(self.location)
ts['roomtype'] = self.type.slug
ts["time"] = date_format(self.time, 'Hi')
ts["date"] = time_format(self.time, 'Y-m-d')
ts["domid"] = self.js_identifier
return ts
def json_url(self):
return "/meeting/%s/timeslot/%s.json" % (self.meeting.number, self.id)
"""
This routine takes the current timeslot, which is assumed to have no location,
and assigns a room, and then creates an identical timeslot for all of the other
rooms.
"""
def create_concurrent_timeslots(self):
rooms = self.meeting.room_set.all()
self.room = rooms[0]
self.save()
for room in rooms[1:]:
ts = copy.copy(self)
ts.id = None
ts.location = room
ts.save()
self.meeting.create_all_timeslots()
"""
This routine deletes all timeslots which are in the same time as this slot.
"""
def delete_concurrent_timeslots(self):
# can not include duration in filter, because there is no support
# for having it a WHERE clause.
# below will delete self as well.
for ts in self.meeting.timeslot_set.filter(time=self.time).all():
if ts.duration!=self.duration:
continue
# now remove any schedule that might have been made to this
# timeslot.
ts.scheduledsession_set.all().delete()
ts.delete()
"""
Find a timeslot that comes next, in the same room. It must be on the same day,
and it must have a gap of 11 minutes or less. (10 is the spec)
"""
@property
def slot_to_the_right(self):
things = self.meeting.timeslot_set.filter(location = self.location, # same room!
type = self.type, # must be same type (usually session)
time__gt = self.time + self.duration, # must be after this session.
time__lt = self.time + self.duration + datetime.timedelta(0,11*60))
if things:
return things[0]
else:
return None
# end of TimeSlot
class Schedule(models.Model):
"""
Each person may have multiple agendas saved.
An Agenda may be made visible, which means that it will show up in
public drop down menus, etc. It may also be made public, which means
that someone who knows about it by name/id would be able to reference
it. A non-visible, public agenda might be passed around by the
Secretariat to IESG members for review. Only the owner may edit the
agenda, others may copy it
"""
meeting = models.ForeignKey(Meeting, null=True)
name = models.CharField(max_length=16, blank=False)
owner = models.ForeignKey(Person)
visible = models.BooleanField(default=True, help_text=u"Make this agenda available to those who know about it")
public = models.BooleanField(default=True, help_text=u"Make this agenda publically available")
# considering copiedFrom = models.ForeignKey('Schedule', blank=True, null=True)
def __unicode__(self):
return u"%s:%s(%s)" % (self.meeting, self.name, self.owner)
def base_url(self):
return "/meeting/%s/agenda/%s" % (self.meeting.number, self.name)
def url_edit(self):
return "/meeting/%s/agenda/%s/edit" % (self.meeting.number, self.name)
@property
def visible_token(self):
if self.visible:
return "visible"
else:
return "hidden"
@property
def public_token(self):
if self.public:
return "public"
else:
return "private"
@property
def is_official(self):
return (self.meeting.agenda == self)
@property
def official_class(self):
if self.is_official:
return "agenda_official"
else:
return "agenda_unofficial"
@property
def official_token(self):
if self.is_official:
return "official"
else:
return "unofficial"
def delete_scheduledsessions(self):
self.scheduledsession_set.all().delete()
# I'm loath to put calls to reverse() in there.
# is there a better way?
def json_url(self):
# XXX need to include owner.
return "/meeting/%s/agendas/%s.json" % (self.meeting.number, self.name)
def json_dict(self, host_scheme):
sch = dict()
sch['schedule_id'] = self.id
sch['href'] = urljoin(host_scheme, self.json_url())
if self.visible:
sch['visible'] = "visible"
else:
sch['visible'] = "hidden"
if self.public:
sch['public'] = "public"
else:
sch['public'] = "private"
sch['owner'] = urljoin(host_scheme, self.owner.json_url())
# should include href to list of scheduledsessions, but they have no direct API yet.
return sch
class ScheduledSession(models.Model):
"""
This model provides an N:M relationship between Session and TimeSlot.
Each relationship is attached to the named agenda, which is owned by
a specific person/user.
"""
timeslot = models.ForeignKey('TimeSlot', null=False, blank=False, help_text=u"")
session = models.ForeignKey('Session', null=True, default=None, help_text=u"Scheduled session")
schedule = models.ForeignKey('Schedule', null=False, blank=False, help_text=u"Who made this agenda")
extendedfrom = models.ForeignKey('ScheduledSession', null=True, default=None, help_text=u"Timeslot this session is an extension of")
modified = models.DateTimeField(default=datetime.datetime.now)
notes = models.TextField(blank=True)
def __unicode__(self):
return u"%s [%s<->%s]" % (self.schedule, self.session, self.timeslot)
@property
def room_name(self):
return self.timeslot.location.name
@property
def special_agenda_note(self):
return self.session.agenda_note if self.session else ""
@property
def acronym(self):
if self.session and self.session.group:
return self.session.group.acronym
@property
def slot_to_the_right(self):
ss1 = self.schedule.scheduledsession_set.filter(timeslot = self.timeslot.slot_to_the_right)
if ss1:
return ss1[0]
else:
return None
@property
def acronym_name(self):
if not self.session:
return self.notes
if hasattr(self, "interim"):
return self.session.group.name + " (interim)"
elif self.session.name:
return self.session.name
else:
return self.session.group.name
@property
def session_name(self):
if self.timeslot.type_id not in ("session", "plenary"):
return None
return self.timeslot.name
@property
def area(self):
if not self.session or not self.session.group:
return ""
if self.session.group.type_id == "irtf":
return "irtf"
if self.timeslot.type_id == "plenary":
return "1plenary"
if not self.session.group.parent or not self.session.group.parent.type_id in ["area","irtf"]:
return ""
return self.session.group.parent.acronym
@property
def break_info(self):
breaks = self.schedule.scheduledsessions_set.filter(timeslot__time__month=self.timeslot.time.month, timeslot__time__day=self.timeslot.time.day, timeslot__type="break").order_by("timeslot__time")
now = self.timeslot.time_desc[:4]
for brk in breaks:
if brk.time_desc[-4:] == now:
return brk
return None
@property
def area_name(self):
if self.timeslot.type_id == "plenary":
return "Plenary Sessions"
elif self.session and self.session.group and self.session.group.acronym == "edu":
return "Training"
elif not self.session or not self.session.group or not self.session.group.parent or not self.session.group.parent.type_id == "area":
return ""
return self.session.group.parent.name
@property
def isWG(self):
if not self.session or not self.session.group:
return False
if self.session.group.type_id == "wg" and self.session.group.state_id != "bof":
return True
@property
def group_type_str(self):
if not self.session or not self.session.group:
return ""
if self.session.group and self.session.group.type_id == "wg":
if self.session.group.state_id == "bof":
return "BOF"
else:
return "WG"
return ""
@property
def slottype(self):
if self.timeslot and self.timeslot.type:
return self.timeslot.type.slug
else:
return ""
@property
def empty_str(self):
# return JS happy value
if self.session:
return "False"
else:
return "True"
def json_dict(self, selfurl):
ss = dict()
ss['scheduledsession_id'] = self.id
#ss['href'] = self.url(host_scheme)
ss['empty'] = self.empty_str
ss['timeslot_id'] = self.timeslot.id
if self.session:
ss['session_id'] = self.session.id
ss['room'] = slugify(self.timeslot.location)
ss['roomtype'] = self.timeslot.type.slug
ss["time"] = date_format(self.timeslot.time, 'Hi')
ss["date"] = time_format(self.timeslot.time, 'Y-m-d')
ss["domid"] = self.timeslot.js_identifier
return ss
class Constraint(models.Model):
"""Specifies a constraint on the scheduling between source and
target, e.g. some kind of conflict."""
"""
Specifies a constraint on the scheduling.
One type (name=conflic?) of constraint is between source WG and target WG,
e.g. some kind of conflict.
Another type (name=adpresent) of constraing is between source WG and
availability of a particular Person, usually an AD.
A third type (name=avoidday) of constraing is between source WG and
a particular day of the week, specified in day.
"""
meeting = models.ForeignKey(Meeting)
source = models.ForeignKey(Group, related_name="constraint_source_set")
target = models.ForeignKey(Group, related_name="constraint_target_set")
name = models.ForeignKey(ConstraintName)
target = models.ForeignKey(Group, related_name="constraint_target_set", null=True)
person = models.ForeignKey(Person, null=True, blank=True)
day = models.DateTimeField(null=True, blank=True)
name = models.ForeignKey(ConstraintName)
def __unicode__(self):
return u"%s %s %s" % (self.source, self.name.name.lower(), self.target)
def json_url(self):
return "/meeting/%s/constraint/%s.json" % (self.meeting.number, self.id)
def json_dict(self, host_scheme):
ct1 = dict()
ct1['constraint_id'] = self.id
ct1['href'] = urljoin(host_scheme, self.json_url())
ct1['name'] = self.name.slug
if self.person is not None:
ct1['person_href'] = urljoin(host_scheme, self.person.json_url())
if self.source is not None:
ct1['source_href'] = urljoin(host_scheme, self.source.json_url())
if self.target is not None:
ct1['target_href'] = urljoin(host_scheme, self.target.json_url())
ct1['meeting_href'] = urljoin(host_scheme, self.meeting.json_url())
return ct1
class Session(models.Model):
"""Session records that a group should have a session on the
meeting (time and location is stored in a TimeSlot) - if multiple
@ -185,9 +693,10 @@ class Session(models.Model):
materials = models.ManyToManyField(Document, blank=True)
def agenda(self):
try:
return self.materials.get(type="agenda",states__type="agenda",states__slug="active")
except Exception:
items = self.materials.filter(type="agenda",states__type="agenda",states__slug="active")
if items and items[0] is not None:
return items[0]
else:
return None
def minutes(self):
@ -206,11 +715,73 @@ class Session(models.Model):
if self.meeting.type_id == "interim":
return self.meeting.number
timeslots = self.timeslot_set.order_by('time')
return u"%s: %s %s" % (self.meeting, self.group.acronym, timeslots[0].time.strftime("%H%M") if timeslots else "(unscheduled)")
ss0name = "(unscheduled)"
ss = self.scheduledsession_set.order_by('timeslot__time')
if ss:
ss0name = ss[0].timeslot.time.strftime("%H%M")
return u"%s: %s %s" % (self.meeting, self.group.acronym, ss0name)
@property
def short_name(self):
if self.name:
return self.name
if self.short:
return self.short
if self.group:
return self.group.acronym
return u"req#%u" % (id)
@property
def special_request_token(self):
if self.comments is not None and len(self.comments)>0:
return "*"
else:
return ""
def constraints(self):
return Constraint.objects.filter(source=self.group, meeting=self.meeting).order_by('name__name')
def reverse_constraints(self):
return Constraint.objects.filter(target=self.group, meeting=self.meeting).order_by('name__name')
def scheduledsession_for_agenda(self, schedule):
return self.scheduledsession_set.filter(schedule=schedule)[0]
def official_scheduledsession(self):
return self.scheduledsession_for_agenda(self.meeting.agenda)
def constraints_dict(self, host_scheme):
constraint_list = []
for constraint in self.group.constraint_source_set.filter(meeting=self.meeting):
ct1 = constraint.json_dict(host_scheme)
constraint_list.append(ct1)
for constraint in self.group.constraint_target_set.filter(meeting=self.meeting):
ct1 = constraint.json_dict(host_scheme)
constraint_list.append(ct1)
return constraint_list
def json_url(self):
return "/meeting/%s/session/%s.json" % (self.meeting.number, self.id)
def json_dict(self, host_scheme):
sess1 = dict()
sess1['href'] = urljoin(host_scheme, self.json_url())
sess1['group_href'] = urljoin(host_scheme, self.group.json_url())
sess1['group_acronym'] = str(self.group.acronym)
sess1['name'] = str(self.name)
sess1['short_name'] = str(self.name)
sess1['agenda_note'] = str(self.agenda_note)
sess1['attendees'] = str(self.attendees)
sess1['status'] = str(self.status)
if self.comments is not None:
sess1['comments'] = str(self.comments)
sess1['requested_time'] = str(self.requested.strftime("%Y-%m-%d"))
sess1['requested_by'] = str(self.requested_by)
sess1['requested_duration']= "%.1f h" % (float(self.requested_duration.seconds) / 3600)
sess1['area'] = str(self.group.parent.acronym)
sess1['responsible_ad'] = str(self.group.ad)
sess1['GroupInfo_state']= str(self.group.state)
return sess1

View file

@ -5,6 +5,8 @@ from django.conf import settings
from ietf.utils.proxy import TranslatingManager
from models import *
import debug
class MeetingProxy(Meeting):
objects = TranslatingManager(dict(meeting_num="number"), always_filter=dict(type="ietf"))
@ -113,8 +115,12 @@ class SwitchesProxy(Meeting):
#updated_time = models.TimeField(null=True, blank=True)
def updated(self):
from django.db.models import Max
return max(self.timeslot_set.aggregate(Max('modified'))["modified__max"],
import pytz
ts = max(self.timeslot_set.aggregate(Max('modified'))["modified__max"],
self.session_set.aggregate(Max('modified'))["modified__max"])
tz = pytz.timezone(settings.PRODUCTION_TIMEZONE)
ts = tz.localize(ts)
return ts
class Meta:
proxy = True
@ -145,100 +151,6 @@ class MeetingVenueProxy(Meeting):
class Meta:
proxy = True
class MeetingTimeProxy(TimeSlot):
# the old MeetingTimes did not include a room, so there we can't
# do a proper mapping - instead this proxy is one TimeSlot and
# uses the information in that to emulate a MeetingTime and enable
# retrieval of the other related TimeSlots
objects = TranslatingManager(dict(day_id="time", time_desc="time"))
def from_object(self, base):
for f in base._meta.fields:
setattr(self, f.name, getattr(base, f.name))
return self
#time_id = models.AutoField(primary_key=True)
@property
def time_id(self):
return self.pk
#time_desc = models.CharField(max_length=100)
@property
def time_desc(self):
return u"%s-%s" % (self.time.strftime("%H%M"), (self.time + self.duration).strftime("%H%M"))
#meeting = models.ForeignKey(Meeting, db_column='meeting_num') # same name
#day_id = models.IntegerField()
@property
def day_id(self):
return (self.time.date() - self.meeting.date).days
#session_name = models.ForeignKey(SessionName,null=True)
@property
def session_name(self):
if self.type_id not in ("session", "plenary"):
return None
class Dummy(object):
def __unicode__(self):
return self.session_name
d = Dummy()
d.session_name = self.name
return d
def __str__(self):
return "[%s] |%s| %s" % (self.meeting.number, self.time.strftime('%A'), self.time_desc)
def sessions(self):
if not hasattr(self, "sessions_cache"):
self.sessions_cache = WgMeetingSessionProxy.objects.filter(meeting=self.meeting, time=self.time, type__in=("session", "plenary", "other")).exclude(type="session", session=None)
return self.sessions_cache
def sessions_by_area(self):
return [ {"area":session.area()+session.acronym(), "info":session} for session in self.sessions() ]
def meeting_date(self):
return self.time.date()
def registration(self):
if not hasattr(self, '_reg_info'):
try:
self._reg_info = MeetingTimeProxy.objects.get(meeting=self.meeting, time__month=self.time.month, time__day=self.time.day, type="reg")
except MeetingTimeProxy.DoesNotExist:
self._reg_info = None
return self._reg_info
def reg_info(self):
reg_info = self.registration()
if reg_info and reg_info.time_desc:
return "%s %s" % (reg_info.time_desc, reg_info.name)
else:
return ""
def break_info(self):
breaks = MeetingTimeProxy.objects.filter(meeting=self.meeting, time__month=self.time.month, time__day=self.time.day, type="break").order_by("time")
for brk in breaks:
if brk.time_desc[-4:] == self.time_desc[:4]:
return brk
return None
def is_plenary(self):
return self.type_id == "plenary"
# from NonSession
#non_session_id = models.AutoField(primary_key=True)
@property
def non_session_id(self):
return self.id
#day_id = models.IntegerField(blank=True, null=True) # already wrapped
#non_session_ref = models.ForeignKey(NonSessionRef)
@property
def non_session_ref(self):
return 1 if self.type_id == "reg" else 3
#meeting = models.ForeignKey(Meeting, db_column='meeting_num') 3 same name
#time_desc = models.CharField(blank=True, max_length=75) # already wrapped
#show_break_location = models.BooleanField()
@property
def show_break_location(self):
return self.show_location
def day(self):
return self.time.strftime("%A")
class Meta:
proxy = True
NonSessionProxy = MeetingTimeProxy
class WgMeetingSessionProxy(TimeSlot):
# we model WgMeetingSession as a TimeSlot, to make the illusion
# complete we thus have to forward all the session stuff to the

View file

View file

@ -0,0 +1,58 @@
from django import template
register = template.Library()
# returns the a dictioary's value from it's key.
@register.filter(name='lookup')
def lookup(dict, index):
if index in dict:
return dict[index]
return ''
# returns the length of the value of a dict.
# We are doing this to how long the title for the calendar should be. (this should return the number of time slots)
@register.filter(name='colWidth')
def get_col_width(dict, index):
if index in dict:
return len(dict[index])
return 0
# Replaces characters that are not acceptable html ID's
@register.filter(name='to_acceptable_id')
def to_acceptable_id(inp):
# see http://api.jquery.com/category/selectors/?rdfrom=http%3A%2F%2Fdocs.jquery.com%2Fmw%2Findex.php%3Ftitle%3DSelectors%26redirect%3Dno
# for more information.
invalid = ["!","\"", "#","$","%","&","'","(",")","*","+",",",".","/",":",";","<","=",">","?","@","[","\\","]","^","`","{","|","}","~"," "]
out = str(inp)
for i in invalid:
out = out.replace(i,'_')
return out
@register.filter(name='durationFormat')
def durationFormat(inp):
return "%.1f" % (float(inp)/3600)
# from:
# http://www.sprklab.com/notes/13-passing-arguments-to-functions-in-django-template
#
@register.filter(name="call")
def callMethod(obj, methodName):
method = getattr(obj, methodName)
if obj.__dict__.has_key("__callArg"):
ret = method(*obj.__callArg)
del obj.__callArg
return ret
return method()
@register.filter(name="args")
def args(obj, arg):
if not obj.__dict__.has_key("__callArg"):
obj.__callArg = []
obj.__callArg += [arg]
return obj

View file

@ -0,0 +1,3 @@
from django import template
from secr.proceedings.templatetags.ams_filters import register

View file

@ -0,0 +1,20 @@
# Copyright The IETF Trust 2012, All Rights Reserved
"""
The test cases are split into multiple files.
"""
import sys
from ietf.utils import TestCase
from datetime import datetime
# actual tests are distributed among a set of files in subdir tests/
from ietf.meeting.tests.meetingurls import MeetingUrlTestCase
from ietf.meeting.tests.agenda import AgendaInfoTestCase
from ietf.meeting.tests.api import ApiTestCase
from ietf.meeting.tests.edit import EditTestCase
from ietf.meeting.tests.auths import AuthDataTestCase
from ietf.meeting.tests.view import ViewTestCase
from ietf.meeting.tests.urlgen import UrlGenTestCase

View file

@ -0,0 +1,230 @@
Agenda of the 83rd IETF Meeting
March 25-30, 2012
Updated 2012-03-28 09:52:00 PDT
IETF agendas are subject to change, up to and during the meeting.
SATURDAY, March 24, 2012
0930-1800 Code Sprint - Hall Maillot A
SUNDAY, March 25, 2012
1100-1900 IETF Registration - Hall Maillot A
1000-1200 IEPG Meeting - 241
1300-1450 Tools for Creating Internet-Drafts Tutorial - 241
1300-1450 Newcomers' Orientation - 252B
1300-1450 Meetecho Tutorial for Participants and WG Chairs - 252A
1500-1650 Operations, Administration, and Maintenance Tutorial - 241
1500-1650 Newcomers' Orientation (French) - 252B
1600-1700 Newcomers' Meet and Greet (open to Newcomers and WG chairs only) - Salon Etoile d'Or (Concorde Hotel)
1700-1900 Welcome Reception - Hall Maillot A
MONDAY, March 26, 2012
0800-1800 IETF Registration - Hall Maillot A
0900-1130 Morning Session I
252B APP appsawg Applications Area Working Group WG - Combined with APPAREA
252A INT multimob Multicast Mobility WG
212/213 INT tictoc Timing over IP Connection and Transfer of Clock WG
241 INT trill Transparent Interconnection of Lots of Links WG
253 IRTF ncrg Network Complexity Research Group
Maillot OPS v6ops IPv6 Operations WG
243 RAI mmusic Multiparty Multimedia Session Control WG
242AB RTG idr Inter-Domain Routing WG
1300-1500 Afternoon Session I
212/213 APP eai Email Address Internationalization WG - CANCELED
242AB APP websec Web Security WG
212/213 IRTF mobopts IP Mobility Optimizations Research Group - Room Changed From 252A
243 OPS netmod NETCONF Data Modeling Language WG
252B RAI avtcore Audio/Video Transport Core Maintenance WG
Maillot RTG ccamp Common Control and Measurement Plane WG
241 RTG sidr Secure Inter-Domain Routing WG
253 TSV ippm IP Performance Metrics WG
252A TSV i2aex Infrastructure-to-Application Information Exposure WG - Room Changed From 241
1510-1610 Afternoon Session II
243 APP urnbis Uniform Resource Names, Revised WG
Maillot INT pcp Port Control Protocol WG
242AB OPS opsec Operational Security Capabilities for IP Network Infrastructure WG
252B RAI avtcore Audio/Video Transport Core Maintenance WG
241 RAI insipid INtermediary-safe SIP session ID WG
253 RTG forces Forwarding and Control Element Separation WG
252A SEC ipsecme IP Security Maintenance and Extensions WG
212/213 TSV rmt Reliable Multicast Transport WG
1630-1930 Technical Plenary - Amphitheatre Bleu
TUESDAY, March 27, 2012
0800-1800 IETF Registration - Hall Maillot A
0900-1130 Morning Session I
243 APP core Constrained RESTful Environments WG
252A GEN antitrust Does the IETF Need an Anti-Trust Policy WG
Maillot INT 6man IPv6 Maintenance WG
241 IRTF dtnrg Delay-Tolerant Networking Research Group
252B RAI clue ControLling mUltiple streams for tElepresence WG
242AB RTG mpls Multiprotocol Label Switching WG
212/213 SEC pkix Public-Key Infrastructure (X.509) WG
253 TSV tsvwg Transport Area Working Group WG
1300-1500 Afternoon Session I
252A APP httpbis Hypertext Transfer Protocol Bis WG
252B INT pcp Port Control Protocol WG
212/213 OPS bmwg Benchmarking Methodology WG
241 OPS eman Energy Management WG
Maillot RAI dispatch Dispatch WG
242AB RTG ospf Open Shortest Path First IGP WG
243 RTG pim Protocol Independent Multicast WG
253 SEC kitten Common Authentication Technology Next Generation WG - Combined with KRB-WG
253 SEC krb-wg Kerberos WG - Combined with KITTEN
1520-1700 Afternoon Session II
243 APP weirds Web Extensible Internet Registration Data Service WG
212/213 INT ancp Access Node Control Protocol WG
252B INT lisp Locator/ID Separation Protocol WG
252A IRTF iccrg Internet Congestion Control Research Group
242AB OPS 6renum IPv6 Site Renumbering WG
Maillot RAI avtext Audio/Video Transport Extensions WG
253 RAI vipr Verification Involving PSTN Reachability WG
241 SEC jose Javascript Object Signing and Encryption WG
1710-1810 Afternoon Session III
212/213 APP marf Messaging Abuse Reporting Format WG
Maillot GEN rfcform RFC Format WG
242AB INT dnsext DNS Extensions WG
252A IRTF iccrg Internet Congestion Control Research Group
243 OPS netconf Network Configuration WG
252B RAI sipcore Session Initiation Protocol Core WG
241 RTG isis IS-IS for IP Internets WG
253 SEC mile Managed Incident Lightweight Exchange WG
WEDNESDAY, March 28, 2012
0800-1700 IETF Registration - Hall Maillot A
0900-1130 Morning Session I
243 APP paws Protocol to Access WS database WG
242AB INT homenet Home Networking WG
253 OPS opsarea Operations & Management Area Open Meeting - Combined with OPSAWG
253 OPS opsawg Operations and Management Area Working Group WG - Combined with OPSAREA
252B RAI rtcweb Real-Time Communication in WEB-browsers WG
Maillot RTG ccamp Common Control and Measurement Plane WG
241 RTG sidr Secure Inter-Domain Routing WG
212/213 TSV nfsv4 Network File System Version 4 WG
252A TSV ppsp Peer to Peer Streaming Protocol WG
1130-1300 Working Group Chairs' Training - 252B
1300-1500 Afternoon Session I
252B APP hybi BiDirectional or Server-Initiated HTTP WG
243 APP repute Reputation Services WG
253 INT netext Network-Based Mobility Extensions WG
252A RAI ecrit Emergency Context Resolution with Internet Technologies WG
242AB RTG karp Keying and Authentication for Routing Protocols WG
Maillot RTG nvo3 Network Virtualization Overlays WG
241 RTG roll Routing Over Low power and Lossy networks WG
212/213 SEC nea Network Endpoint Assessment WG
1510-1610 Afternoon Session II
242AB INT softwire Softwires WG
Maillot OPS armd Address Resolution for Massive numbers of hosts in the Data center WG
253 RAI xmpp Extensible Messaging and Presence Protocol WG
241 RAI p2psip Peer-to-Peer Session Initiation Protocol WG
252A RAI soc SIP Overload Control WG
252B RTG bfd Bidirectional Forwarding Detection WG
243 SEC tls Transport Layer Security WG
212/213 TSV pcn Congestion and Pre-Congestion Notification WG
1630-1930 IETF Operations and Administration Plenary - Amphitheatre Bleu
THURSDAY, March 29, 2012
0800-1700 IETF Registration - Hall Maillot A
0900-1130 Morning Session I
252A APP scim System for Cross-domain Identity Management WG
241 INT dmm Distributed Mobility Management WG
253 INT dhc Dynamic Host Configuration WG
212/213 OPS mboned MBONE Deployment WG
Maillot RAI rtcweb Real-Time Communication in WEB-browsers WG
242AB RTG pwe3 Pseudowire Emulation Edge to Edge WG
243 SEC abfab Application Bridging for Federated Access Beyond web WG
252B TSV alto Application-Layer Traffic Optimization WG
1300-1500 Afternoon Session I
253 APP precis Preparation and Comparison of Internationalized Strings WG
Maillot INT intarea Internet Area Working Group WG
212/213 IRTF samrg Scalable Adaptive Multicast Research Group
243 RAI xrblock Metric Blocks for use with RTCP's Extended Report Framework WG
242AB RTG l2vpn Layer 2 Virtual Private Networks WG
241 RTG manet Mobile Ad-hoc Networks WG
252A SEC oauth Web Authorization Protocol WG
252B TSV cdni Content Delivery Networks Interconnection WG
1520-1720 Afternoon Session II
241 APP httpbis Hypertext Transfer Protocol Bis WG
252B INT lwig Light-Weight Implementation Guidance WG
243 OPS dime Diameter Maintenance and Extensions WG
Maillot OPS v6ops IPv6 Operations WG
212/213 RAI drinks Data for Reachability of Inter/tra-NetworK SIP WG
242AB RTG rtgarea Routing Area Open Meeting
252A SEC emu EAP Method Update WG
253 TSV decade Decoupled Application Data Enroute WG
1740-1940 Afternoon Session III
252A INT mif Multiple Interfaces WG
212/213 OPS ipfix IP Flow Information Export WG
Maillot RAI clue ControLling mUltiple streams for tElepresence WG
243 RAI geopriv Geographic Location/Privacy WG
241 RTG pce Path Computation Element WG
252B RTG rtgwg Routing Area Working Group WG
242AB SEC saag Security Area Open Meeting
253 TSV conex Congestion Exposure WG
FRIDAY, March 30, 2012
0800-1100 IETF Registration - Hall Maillot A
0900-1100 Morning Session I
253 APP core Constrained RESTful Environments WG
252A APP spfbis SPF Update WG
252B INT softwire Softwires WG
212/213 OPS radext RADIUS EXTensions WG
243 RAI siprec SIP Recording WG
Maillot RTG mpls Multiprotocol Label Switching WG
242AB TSV cdni Content Delivery Networks Interconnection WG
241 TSV tcpm TCP Maintenance and Minor Extensions WG
1120-1220 Afternoon Session I
253 APP iri Internationalized Resource Identifiers WG
243 GEN rpsreqs Remote Participation System Requirements WG
242AB INT trill Transparent Interconnection of Lots of Links WG
212/213 IRTF cfrg Crypto Forum Research Group
Maillot OPS dnsop Domain Name System Operations WG
241 RAI bfcpbis Binary Floor Control Protocol Bis WG
252A RAI codec Internet Wideband Audio Codec WG - CANCELED
252B TSV mptcp Multipath TCP WG
1230-1330 Afternoon Session II
243 GEN rpsreqs Remote Participation System Requirements WG
212/213 IRTF cfrg Crypto Forum Research Group
242AB OPS grow Global Routing Operations WG
253 RAI atoca Authority-to-Citizen Alert WG
241 RAI cuss Call Control UUI Service for SIP WG
252B TSV mptcp Multipath TCP WG
====================================================================
AREA DIRECTORS
APP Applications Area Barry Leiba/Huawei Technologies & Pete Resnick/QTI, a Qualcomm company
GEN General Area Russ Housley/Vigil Security, LLC
OPS Operations and Man Ron Bonica/Juniper Networks & Benoit Claise/Cisco
SEC Security Area Stephen Farrell/Trinity College Dublin & Sean Turner/IECA

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,156 @@
import sys
from django.test import Client
from ietf.utils import TestCase
from ietf.name.models import SessionStatusName
from ietf.person.models import Person
from ietf.group.models import Group
from ietf.meeting.models import TimeSlot, Session, Meeting, ScheduledSession
from ietf.meeting.helpers import get_meeting, get_schedule
class AgendaInfoTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_SessionUnicode(self):
m1 = get_meeting("83")
g1 = Group.objects.get(acronym = "pkix")
p1 = Person.objects.get(pk = 5376) # Russ Housley
st1 = SessionStatusName.objects.get(slug = "appr")
s1 = m1.session_set.create(name = "newone", group = g1, requested_by = p1, status = st1)
self.assertEqual(s1.__unicode__(), "IETF-83: pkix (unscheduled)")
def test_AgendaInfo(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
# I think that "timeslots" here, is unique times, not actually
# the timeslots array itself.
self.assertEqual(len(timeslots),26)
self.assertEqual(meeting.number,'83')
self.assertEqual(venue.meeting_num, "83")
self.assertTrue(len(ads) > 0)
def test_AgendaInfoReturnsSortedTimeSlots(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
for slotnum in range(0,len(timeslots)-1):
# debug
#sys.stdout.write("%d: %s vs %d: %s\n" % (timeslots[slotnum].pk,
# timeslots[slotnum].time,
# timeslots[slotnum+1].pk,
# timeslots[slotnum+1].time))
self.assertTrue(timeslots[slotnum].time < timeslots[slotnum+1].time)
# this tests that a slot at 11:20 AM on Friday, has slot 10 minutes later
# after it
def test_TimeSlot2408_has_SlotToTheRight(self):
ss2408 = ScheduledSession.objects.get(pk = 2408)
self.assertTrue(ss2408.slot_to_the_right)
# this tests that a slot 9-11:30am on Wednesday, has no following slot,
# as the slot purpose to the right is non-session.
def test_TimeSlot2517_hasno_SlotToTheRight(self):
ss2517 = ScheduledSession.objects.get(pk = 2517)
self.assertFalse(ss2517.slot_to_the_right)
# this tests that a slot 13:00-15:00 on Tuesday has no following slot,
# as the gap to the next slot (at 15:20) is too long (there is a break)
def test_TimeSlot2418_hasno_SlotToTheRight(self):
ss2418 = ScheduledSession.objects.get(pk = 2418)
self.assertFalse(ss2418.slot_to_the_right)
def test_AgendaInfoNotFound(self):
from django.http import Http404
from ietf.meeting.views import agenda_info
num = '83b'
try:
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
# fail!!!
self.assertFalse(True)
except Http404:
pass
def test_TimeSlotHasRegistrationInfo(self):
# find the registration slot, and confirm that it can find the registration
regslot = TimeSlot.objects.get(pk=2900)
self.assertEqual(regslot.type.slug, "reg")
slot1 = TimeSlot.objects.get(pk=2371) # "name": "Morning Session I"
self.assertEqual(slot1.registration(), regslot)
def test_DoNotGetSchedule(self):
from django.http import Http404
num = '83'
from ietf.meeting.views import get_meeting, get_schedule
meeting = get_meeting(num)
try:
na = get_schedule(meeting, "none:83")
except Http404:
False
def test_GetSchedule(self):
num = '83'
from ietf.meeting.views import get_meeting, get_schedule
meeting = get_meeting(num)
na = get_schedule(meeting, "mtg:83")
self.assertIsNotNone(na)
def test_sessionstr(self):
num = '83'
from ietf.meeting.views import get_meeting
meeting = get_meeting(num)
session1= Session.objects.get(pk=2157)
self.assertEqual(session1.__unicode__(), u"IETF-83: pkix 0900")
def test_sessionstr_interim(self):
"""
Need a fixture for a meeting that is interim
"""
pass
def test_AgendaInfoNamedSlotSessionsByArea(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
for slot in timeslots:
for ss in slot.scheduledsessions_by_area:
self.assertIsNotNone(ss)
self.assertIsNotNone(ss["area"])
self.assertIsNotNone(ss["info"])
def test_AgendaInfoNamedSlotSessionsByArea(self):
from ietf.meeting.views import agenda_info
num = '83'
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
# the third timeslot should be 1300-1450 on Sunday March 25.
# it should have three things:
#1300-1450 Tools for Creating Internet-Drafts Tutorial - 241
#1300-1450 Newcomers' Orientation - 252B
#1300-1450 Meetecho Tutorial for Participants and WG Chairs - 252A
#import pdb
#pdb.set_trace()
slot3 = timeslots[2]
self.assertEqual(slot3.time_desc, "1300-1450")
events = slot3.scheduledsessions_at_same_time
self.assertEqual(len(events), 3)
def test_serialize_constraint(self):
session1 = Session.objects.get(pk=2157)
host_scheme = "http://datatracker.ietf.org"
json_dict = session1.constraints_dict(host_scheme)
self.assertEqual(len(json_dict), 25)
def test_avtcore_has_two_slots(self):
mtg83 = get_meeting(83)
sch83 = get_schedule(mtg83, "mtg:83")
avtcore = mtg83.session_set.get(group__acronym='avtcore')
self.assertEqual(avtcore.pk, 2216) # sanity check
self.assertEqual(len(avtcore.scheduledsession_set.filter(schedule = sch83)), 2)

562
ietf/meeting/tests/api.py Normal file
View file

@ -0,0 +1,562 @@
import base64
import sys, datetime
from django.test import Client
from ietf.utils import TestCase
#from ietf.person.models import Person
from django.contrib.auth.models import User
from ietf.meeting.models import TimeSlot, Session, ScheduledSession, Meeting
from ietf.ietfauth.decorators import has_role
from auths import auth_joeblow, auth_wlo, auth_ietfchair, auth_ferrel
from django.utils import simplejson as json
from ietf.meeting.helpers import get_meeting
import debug
class ApiTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_noAuthenticationUpdateAgendaItem(self):
ts_one = TimeSlot.objects.get(pk=2371)
ts_two = TimeSlot.objects.get(pk=2372)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.timeslot, ts_one)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"2372"}' % (ss_one.schedule.id,ts_one.id)
})
# confirm that without login, it does not have new value
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.timeslot, ts_one)
def test_noAuthorizationUpdateAgendaItem(self):
ts_one = TimeSlot.objects.get(pk=2371)
ts_two = TimeSlot.objects.get(pk=2372)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.timeslot, ts_one)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"2372"}' % (ss_one.schedule.id,ts_one.id)
}, **auth_ferrel)
# confirm that without login, it does not have new value
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.timeslot, ts_one)
def test_wrongAuthorizationUpdateAgendaItem(self):
s2157 = Session.objects.get(pk=2157)
ss_one = ScheduledSession.objects.get(pk=2371)
ss_two = ScheduledSession.objects.get(pk=2372)
old_two_s = ss_two.session
# confirm that it has old timeslot value
self.assertEqual(ss_one.session, s2157)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"2372"}' % (ss_one.schedule.id,s2157.id)
}, **auth_joeblow)
# confirm that without login, it does not have new value
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.session, s2157)
# confirm that the new scheduledsession has not changed.
ss_two = ScheduledSession.objects.get(pk=2372)
self.assertEqual(ss_two.session, old_two_s)
def test_wloUpdateAgendaItem(self):
s2157 = Session.objects.get(pk=2157)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.session, s2157)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"2372"}' % (ss_one.schedule.id,s2157.id)
}, **auth_wlo)
# confirm that it new scheduledsession object has new session.
ss_two = ScheduledSession.objects.get(pk=2372)
self.assertEqual(ss_two.session, s2157)
# confirm that it old scheduledsession object has no session.
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.session, None)
def test_wloUpdateAgendaItemToUnscheduled(self):
s2157 = Session.objects.get(pk=2157)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.session, s2157)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"0"}' % (ss_one.schedule.id,s2157.id)
}, **auth_wlo)
# confirm that it old scheduledsession object has no session.
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.session, None)
def test_wloUpdateAgendaItemToNone(self):
s2157 = Session.objects.get(pk=2157)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.session, s2157)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u"}' % (ss_one.schedule.id,s2157.id)
}, **auth_wlo)
# confirm that it old scheduledsession object has no session.
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.session, None)
def test_chairUpdateAgendaItemFails(self):
s2157 = Session.objects.get(pk=2157)
ss_one = ScheduledSession.objects.get(pk=2371)
# confirm that it has old timeslot value
self.assertEqual(ss_one.session, s2157)
# confirm that the slot was none empty.
ss_two_saved = ScheduledSession.objects.get(pk=2372)
# move this session from one timeslot to another.
self.client.post('/dajaxice/ietf.meeting.update_timeslot/', {
'argv': '{"schedule_id":"%u", "session_id":"%u", "scheduledsession_id":"%u"}' % (ss_one.schedule.id,s2157.id, 2372)
}, **auth_ietfchair)
# confirm that it new scheduledsession object has no new session.
ss_two = ScheduledSession.objects.get(pk=2372)
self.assertEqual(ss_two, ss_two_saved)
# confirm that it old scheduledsession object still has old session.
ss_one = ScheduledSession.objects.get(pk=2371)
self.assertEqual(ss_one.session, s2157)
def test_anyoneGetConflictInfo(self):
s2157 = Session.objects.get(pk=2157)
# confirm that a constraint json is generated properly
resp = self.client.get('/meeting/83/session/2157/constraints.json')
conflicts = json.loads(resp.content)
self.assertNotEqual(conflicts, None)
def test_getMeetingInfoJson(self):
resp = self.client.get('/meeting/83.json')
mtginfo = json.loads(resp.content)
self.assertNotEqual(mtginfo, None)
def test_getRoomJson(self):
mtg83 = get_meeting(83)
rm243 = mtg83.room_set.get(name = '243')
resp = self.client.get('/meeting/83/room/%s.json' % rm243.pk)
rm243json = json.loads(resp.content)
self.assertNotEqual(rm243json, None)
def test_createNewRoomNonSecretariat(self):
mtg83 = get_meeting(83)
rm221 = mtg83.room_set.filter(name = '221')
self.assertEqual(len(rm221), 0)
# try to create a new room.
self.client.post('/meeting/83/rooms', {
'name' : '221',
'capacity': 50,
}, **auth_joeblow)
# see that in fact the room was not created
rm221 = mtg83.room_set.filter(name = '221')
self.assertEqual(len(rm221), 0)
def test_createNewRoomSecretariat(self):
mtg83 = get_meeting(83)
rm221 = mtg83.room_set.filter(name = '221')
self.assertEqual(len(rm221), 0)
timeslots = mtg83.timeslot_set.all()
timeslot_initial_len = len(timeslots)
self.assertTrue(timeslot_initial_len>0)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new room
self.client.post('/meeting/83/rooms', {
'name' : '221',
'capacity': 50,
}, **extra_headers)
# see that in fact wlo can create a new room.
rm221 = mtg83.room_set.filter(name = '221')
self.assertEqual(len(rm221), 1)
timeslots = mtg83.timeslot_set.all()
timeslot_final_len = len(timeslots)
self.assertEqual((timeslot_final_len - timeslot_initial_len), 26)
def test_deleteNewRoomSecretariat(self):
mtg83 = get_meeting(83)
rm243 = mtg83.room_set.get(name = '243')
slotcount = len(rm243.timeslot_set.all())
self.assertNotEqual(rm243, None)
timeslots = mtg83.timeslot_set.all()
timeslot_initial_len = len(timeslots)
self.assertTrue(timeslot_initial_len>0)
# try to delete a new room
self.client.delete('/meeting/83/room/%s.json' % (rm243.pk), **auth_wlo)
# see that in fact wlo can delete an existing room.
rm243 = mtg83.room_set.filter(name = '243')
self.assertEqual(len(rm243), 0)
timeslots = mtg83.timeslot_set.all()
timeslot_final_len = len(timeslots)
self.assertEqual((timeslot_final_len-timeslot_initial_len), -slotcount)
def test_getGroupInfoJson(self):
resp = self.client.get('/group/pkix.json')
#print "json: %s" % (resp.content)
mtginfo = json.loads(resp.content)
self.assertNotEqual(mtginfo, None)
def test_getSlotJson(self):
mtg83 = get_meeting(83)
slot0 = mtg83.timeslot_set.all()[0]
resp = self.client.get('/meeting/83/timeslot/%s.json' % slot0.pk)
slot0json = json.loads(resp.content)
self.assertNotEqual(slot0json, None)
def test_createNewSlotNonSecretariat(self):
mtg83 = get_meeting(83)
slot23 = mtg83.timeslot_set.filter(time=datetime.date(year=2012,month=3,day=23))
self.assertEqual(len(slot23), 0)
# try to create a new room.
resp = self.client.post('/meeting/83/timeslots', {
'type' : 'plenary',
'name' : 'Workshop on Smart Object Security',
'time' : '2012-03-23',
'duration_days' : 0,
'duration_hours': 8,
'duration_minutes' : 0,
'duration_seconds' : 0,
}, **auth_joeblow)
self.assertEqual(resp.status_code, 403)
# see that in fact the room was not created
slot23 = mtg83.timeslot_set.filter(time=datetime.date(year=2012,month=3,day=23))
self.assertEqual(len(slot23), 0)
def test_createNewSlotSecretariat(self):
mtg83 = get_meeting(83)
slot23 = mtg83.timeslot_set.filter(time=datetime.date(year=2012,month=3,day=23))
self.assertEqual(len(slot23), 0)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new room.
resp = self.client.post('/meeting/83/timeslots', {
'type' : 'plenary',
'name' : 'Workshop on Smart Object Security',
'time' : '2012-03-23',
'duration': '08:00:00',
}, **extra_headers)
self.assertEqual(resp.status_code, 302)
# see that in fact wlo can create a new timeslot
mtg83 = get_meeting(83)
slot23 = mtg83.timeslot_set.filter(time=datetime.date(year=2012,month=3,day=23))
self.assertEqual(len(slot23), 11)
def test_deleteNewSlotSecretariat(self):
mtg83 = get_meeting(83)
slot0 = mtg83.timeslot_set.all()[0]
# try to delete a new room
self.client.delete('/meeting/83/timeslot/%s.json' % (slot0.pk), **auth_wlo)
# see that in fact wlo can delete an existing room.
slot0n = mtg83.timeslot_set.filter(pk = slot0.pk)
self.assertEqual(len(slot0n), 0)
#
# AGENDA API
#
def test_getAgendaJson(self):
mtg83 = get_meeting(83)
a83 = mtg83.agenda
resp = self.client.get('/meeting/83/agendas/%s.json' % a83.name)
a83json = json.loads(resp.content)
self.assertNotEqual(a83json, None)
def test_createNewAgendaNonSecretariat(self):
mtg83 = get_meeting(83)
# try to create a new agenda
resp = self.client.post('/meeting/83/agendas', {
'type' : 'plenary',
'name' : 'Workshop on Smart Object Security',
'time' : '2012-03-23',
'duration_days' : 0,
'duration_hours': 8,
'duration_minutes' : 0,
'duration_seconds' : 0,
}, **auth_joeblow)
self.assertEqual(resp.status_code, 403)
# see that in fact the room was not created
slot23 = mtg83.timeslot_set.filter(time=datetime.date(year=2012,month=3,day=23))
self.assertEqual(len(slot23), 0)
def test_createNewAgendaSecretariat(self):
mtg83 = get_meeting(83)
a83 = mtg83.agenda
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new agenda
resp = self.client.post('/meeting/83/agendas', {
'name' : 'fakeagenda1',
}, **extra_headers)
self.assertEqual(resp.status_code, 302)
# see that in fact wlo can create a new timeslot
mtg83 = get_meeting(83)
n83 = mtg83.schedule_set.filter(name='fakeagenda1')
self.assertNotEqual(n83, None)
def test_updateAgendaSecretariat(self):
mtg83 = get_meeting(83)
a83 = mtg83.agenda
self.assertTrue(a83.visible)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='application/json'
# try to create a new agenda
resp = self.client.put('/meeting/83/agendas/%s.json' % (a83.name),
data='visible=0',
content_type="application/x-www-form-urlencoded",
**extra_headers)
self.assertEqual(resp.status_code, 200)
# see that in fact wlo can create a new timeslot
mtg83 = get_meeting(83)
a83 = mtg83.agenda
self.assertFalse(a83.visible)
def test_deleteAgendaSecretariat(self):
mtg83 = get_meeting(83)
a83 = mtg83.agenda
self.assertNotEqual(a83, None)
# try to delete an agenda
resp = self.client.delete('/meeting/83/agendas/%s.json' % (a83.name), **auth_wlo)
self.assertEqual(resp.status_code, 200)
# see that in fact wlo can delete an existing room.
mtg83 = get_meeting(83)
a83c = mtg83.schedule_set.filter(pk = a83.pk).count()
self.assertEqual(a83c, 0)
self.assertEqual(mtg83.agenda, None)
#
# MEETING API
#
def test_getMeetingJson(self):
resp = self.client.get('/meeting/83.json')
m83json = json.loads(resp.content)
self.assertNotEqual(m83json, None)
def test_setMeetingAgendaNonSecretariat(self):
mtg83 = get_meeting(83)
self.assertNotEqual(mtg83.agenda, None)
# try to create a new agenda
resp = self.client.put('/meeting/83.json',
data="agenda=None",
content_type="application/x-www-form-urlencoded",
**auth_joeblow)
self.assertEqual(resp.status_code, 403)
self.assertNotEqual(mtg83.agenda, None)
def test_setMeetingAgendaNoneSecretariat(self):
mtg83 = get_meeting(83)
self.assertNotEqual(mtg83.agenda, None)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='application/json'
# try to create a new agenda
resp = self.client.post('/meeting/83.json',
data="agenda=None",
content_type="application/x-www-form-urlencoded",
**extra_headers)
self.assertEqual(resp.status_code, 200)
# new to reload the object
mtg83 = get_meeting(83)
self.assertEqual(mtg83.agenda, None)
def test_setMeetingAgendaSecretariat(self):
mtg83 = get_meeting(83)
new_sched = mtg83.schedule_set.create(name="funny",
meeting=mtg83,
public=True,
owner=mtg83.agenda.owner)
self.assertNotEqual(mtg83.agenda, new_sched)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new agenda
resp = self.client.put('/meeting/83.json',
data="agenda=%s" % new_sched.name,
content_type="application/x-www-form-urlencoded",
**extra_headers)
self.assertEqual(resp.status_code, 200)
# new to reload the object
mtg83 = get_meeting(83)
self.assertEqual(mtg83.agenda, new_sched)
def test_setNonPublicMeetingAgendaSecretariat(self):
mtg83 = get_meeting(83)
new_sched = mtg83.schedule_set.create(name="funny",
meeting=mtg83,
public=False,
owner=mtg83.agenda.owner)
self.assertNotEqual(mtg83.agenda, new_sched)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new agenda
resp = self.client.put('/meeting/83.json',
data="agenda=%s" % new_sched.name,
content_type="application/x-www-form-urlencoded",
**extra_headers)
self.assertEqual(resp.status_code, 406)
# new to reload the object
mtg83 = get_meeting(83)
self.assertNotEqual(mtg83.agenda, new_sched)
def test_wlo_isSecretariatCanEditSched24(self):
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# check that wlo
resp = self.client.post('/dajaxice/ietf.meeting.readonly/', {
'argv': '{"meeting_num":"83","schedule_id":"24"}'
}, **extra_headers)
m83perm = json.loads(resp.content)
self.assertEqual(m83perm['secretariat'], True)
self.assertEqual(m83perm['owner_href'], "http://testserver/person/108757.json")
self.assertEqual(m83perm['read_only'], False)
self.assertEqual(m83perm['write_perm'], True)
def test_joeblow_isNonUserCanNotSave(self):
extra_headers = auth_joeblow
extra_headers['HTTP_ACCEPT']='text/json'
# check that wlo
resp = self.client.post('/dajaxice/ietf.meeting.readonly/', {
'argv': '{"meeting_num":"83","schedule_id":"24"}'
}, **extra_headers)
m83perm = json.loads(resp.content)
self.assertEqual(m83perm['secretariat'], False)
self.assertEqual(m83perm['owner_href'], "http://testserver/person/108757.json")
self.assertEqual(m83perm['read_only'], True)
self.assertEqual(m83perm['write_perm'], False)
def test_af_IsReadOnlySched24(self):
"""
This test case validates that despite being an AD, and having a login, a schedule
that does not belong to him will be marked as readonly.
"""
extra_headers = auth_ferrel
extra_headers['HTTP_ACCEPT']='text/json'
resp = self.client.post('/dajaxice/ietf.meeting.readonly/', {
'argv': '{"meeting_num":"83","schedule_id":"24"}'
}, **extra_headers)
m83perm = json.loads(resp.content)
self.assertEqual(m83perm['secretariat'], False)
self.assertEqual(m83perm['owner_href'], "http://testserver/person/108757.json")
self.assertEqual(m83perm['read_only'], True)
self.assertEqual(m83perm['write_perm'], True)
self.assertEqual(resp.status_code, 200)
def test_wlo_isNonUserCanNotSave(self):
extra_headers = auth_joeblow
extra_headers['HTTP_ACCEPT']='text/json'
# check that wlo
resp = self.client.post('/dajaxice/ietf.meeting.readonly/', {
'argv': '{"meeting_num":"83","schedule_id":"24"}'
}, **extra_headers)
m83perm = json.loads(resp.content)
self.assertEqual(m83perm['secretariat'], False)
self.assertEqual(m83perm['owner_href'], "http://testserver/person/108757.json")
self.assertEqual(m83perm['read_only'], True)
self.assertEqual(m83perm['write_perm'], False)
def test_setMeetingAgendaSecretariat2(self):
mtg83 = get_meeting(83)
new_sched = mtg83.schedule_set.create(name="funny",
meeting=mtg83,
owner=mtg83.agenda.owner)
self.assertNotEqual(mtg83.agenda, new_sched)
extra_headers = auth_wlo
extra_headers['HTTP_ACCEPT']='text/json'
# try to create a new agenda
resp = self.client.put('/meeting/83.json',
data="agenda=%s" % new_sched.name,
content_type="application/x-www-form-urlencoded",
**extra_headers)
self.assertEqual(resp.status_code, 200)
# new to reload the object
mtg83 = get_meeting(83)
self.assertEqual(mtg83.agenda, new_sched)

View file

@ -0,0 +1,51 @@
import sys
from django.test import Client
from ietf.utils import TestCase
#from ietf.person.models import Person
from django.contrib.auth.models import User
from ietf.ietfauth.decorators import has_role
# from http://djangosnippets.org/snippets/850/
auth_wlo = {'REMOTE_USER':'wnl'}
auth_ietfchair = {'REMOTE_USER':'rhousley'}
# this is a generic user who has no special role
auth_joeblow = {'REMOTE_USER':'joeblow'}
# this is user who is an AD
auth_ferrel = {'REMOTE_USER':'stephen.farrell@cs.tcd.ie'}
class AuthDataTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_wlo_is_secretariat(self):
wnl = User.objects.filter(pk = 509)[0]
self.assertIsNotNone(wnl)
self.assertTrue(has_role(wnl, "Secretariat"))
def test_housley_is_ad(self):
rh = User.objects.filter(pk = 432)[0]
self.assertIsNotNone(rh)
self.assertTrue(has_role(rh, "Area Director"))
def test_ferrel_is_ad(self):
sf = User.objects.filter(pk = 491)[0]
self.assertIsNotNone(sf)
self.assertTrue(has_role(sf, "Area Director"))
def test_joeblow_is_mortal(self):
jb = User.objects.filter(pk = 99870)[0]
self.assertIsNotNone(jb)
self.assertFalse(has_role(jb, "Area Director"))
self.assertFalse(has_role(jb, "Secretariat"))

View file

@ -0,0 +1,42 @@
import re
import sys
from settings import BASE_DIR
from django.test import Client
from ietf.utils import TestCase
#from ietf.person.models import Person
from django.contrib.auth.models import User
from django.test.client import Client
from ietf.meeting.models import TimeSlot, Session, ScheduledSession
from auths import auth_joeblow, auth_wlo, auth_ietfchair, auth_ferrel
capture_output = False
class EditTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_getEditData(self):
# confirm that we can get edit data from the edit interface
resp = self.client.get('/meeting/83/schedule/edit',{},
**auth_wlo)
m = re.search(".*session_obj.*", resp.content)
# to capture new output (and check it for correctness)
if capture_output:
out = open("%s/meeting/tests/edit_out.html" % BASE_DIR, "w")
out.write(resp.content)
out.close()
self.assertIsNotNone(m)
def test_schedule_lookup(self):
from ietf.meeting.views import get_meeting
# determine that there isn't a schedule called "fred"
mtg = get_meeting(83)
sched83 = mtg.get_schedule_by_name("mtg:83")
self.assertIsNotNone(sched83, "sched83 not found")

View file

@ -9,3 +9,4 @@ class MeetingUrlTestCase(SimpleUrlTestCase):
return canonicalize_feed(content)
else:
return content

View file

@ -1,5 +1,6 @@
302 /meeting/
200 /meeting/agenda/
200 /meeting/agenda-utc
200 /meeting/agenda/?_testiphone=1
200 /meeting/agenda.html
200 /meeting/agenda.txt
@ -13,3 +14,15 @@
404 /meeting/99/agenda.txt
404 /meeting/99/materials.html
200 /feed/wg-proceedings/
200 /meeting/83/schedule/edit
200 /meeting/83/timeslots/edit
404 /meeting/83/timeslots/foobar
404 /meeting/83/schedule/doesnotexist
404 /meeting/83/schedule/doesnotexist/edit
200 /meeting/83/agenda.ics?APP,-~Other,-~Plenary
200 /meeting/83/agenda-utc/
200 /meeting/83/rooms
200 /meeting/83/room/206.json
200 /meeting/83/timeslots
200 /meeting/83/timeslot/2371.json
302 /meeting/83/agendas

View file

@ -0,0 +1,48 @@
from django.test import TestCase
from django.core.management import call_command
from django.db import transaction, connections, DEFAULT_DB_ALIAS
from django.test.testcases import connections_support_transactions, disable_transaction_methods
class AgendaTransactionalTestCase(TestCase):
"""
Does basically the same as TransactionTestCase, but surrounds every test
with a transaction, which is started after the fixtures are loaded.
"""
def _fixture_setup(self):
if not connections_support_transactions():
return super(TestCase, self)._fixture_setup()
# If the test case has a multi_db=True flag, setup all databases.
# Otherwise, just use default.
if getattr(self, 'multi_db', False):
databases = connections
else:
databases = [DEFAULT_DB_ALIAS]
if not TestCase.fixtures_loaded:
print "Loading agenda fixtures for the first time"
from django.contrib.sites.models import Site
Site.objects.clear_cache()
for db in databases:
# should be a no-op, but another test case method might have left junk.
call_command('flush', verbosity=0, interactive=False, database=db)
# BUG, if the set of fixtures changes between test cases,
# then it might not get reloaded properly.
if hasattr(self, 'fixtures'):
print " fixtures: %s" % (self.fixtures)
call_command('loaddata', *self.fixtures, **{
'verbosity': 0,
'commit': False,
'database': db
})
TestCase.fixtures_loaded = True
# now start a transaction.
for db in databases:
transaction.enter_transaction_management(using=db)
transaction.managed(True, using=db)
disable_transaction_methods()

View file

@ -0,0 +1,43 @@
import base64
import sys
from urlparse import urljoin
from django.test import Client
from ietf.utils import TestCase
from django.contrib.auth.models import User
from ietf.person.models import Person
from ietf.meeting.models import Meeting, TimeSlot, Session, ScheduledSession
from ietf.meeting.models import Constraint
from ietf.group.models import Group
class UrlGenTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_meetingGeneratesUrl(self):
mtg83 = Meeting.objects.get(pk=83)
hostport = "http://datatracker.ietf.org"
self.assertEqual(urljoin(hostport, mtg83.json_url()), "http://datatracker.ietf.org/meeting/83.json")
def test_constraintGeneratesUrl(self):
const1 = Constraint.objects.get(pk=21037)
hostport = "http://datatracker.ietf.org"
self.assertEqual(urljoin(hostport, const1.json_url()), "http://datatracker.ietf.org/meeting/83/constraint/21037.json")
def test_groupGeneratesUrl(self):
group1 = Group.objects.get(pk=1730)
hostport = "http://datatracker.ietf.org"
self.assertEqual(urljoin(hostport, group1.json_url()), "http://datatracker.ietf.org/group/roll.json")
def test_sessionGeneratesUrl(self):
sess1 = Session.objects.get(pk=22087)
hostport = "http://datatracker.ietf.org"
self.assertEqual(urljoin(hostport, sess1.json_url()), "http://datatracker.ietf.org/meeting/83/session/22087.json")

171
ietf/meeting/tests/view.py Normal file
View file

@ -0,0 +1,171 @@
import re
import sys
from django.test.client import Client
from ietf.utils import TestCase
#from ietf.person.models import Person
from django.contrib.auth.models import User
from settings import BASE_DIR
from ietf.meeting.models import TimeSlot, Session, ScheduledSession
from auths import auth_joeblow, auth_wlo, auth_ietfchair, auth_ferrel
from ietf.meeting.helpers import get_meeting
from django.core.urlresolvers import reverse
from ietf.meeting.views import edit_agenda
class ViewTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'names.xml', # ietf/names/fixtures/names.xml for MeetingTypeName, and TimeSlotTypeName
'meeting83.json',
'constraint83.json',
'workinggroups.json',
'groupgroup.json',
'person.json', 'users.json' ]
def test_agenda83txt(self):
# verify that the generated text has not changed.
import io
agenda83txtio = open("%s/meeting/tests/agenda-83-txt-output.txt" % BASE_DIR, "r")
agenda83txt = agenda83txtio.read(); # read entire file
resp = self.client.get('/meeting/83/agenda.txt')
# to capture new output (and check it for correctness)
fn = ""
if resp.content != agenda83txt:
fn = "%s/meeting/tests/agenda-83-txt-output-out.txt" % BASE_DIR
out = open(fn, "w")
out.write(resp.content)
out.close()
self.assertEqual(resp.content, agenda83txt, "The /meeting/83/agenda.txt page changed.\nThe newly generated agenda has been written to file: %s" % fn)
def test_agenda83utc(self):
# verify that the generated html has not changed.
import io
agenda83utcio = open("%s/meeting/tests/agenda-83-utc-output.html" % BASE_DIR, "r")
agenda83utc_valid = agenda83utcio.read(); # read entire file
resp = self.client.get('/meeting/83/agenda-utc.html')
# both agendas will have a software version indication inside a
# comment. This will change. Remove comments before comparing.
agenda83utc_valid = re.sub("<!-- v.*-->","", agenda83utc_valid)
agenda83utc_response = re.sub("<!-- v.*-->","", resp.content)
fn = ""
# to capture new output (and check it for correctness)
if agenda83utc_valid != agenda83utc_response:
fn = "%s/meeting/tests/agenda-83-utc-output-out.html" % BASE_DIR
out = open(fn, "w")
out.write(resp.content)
out.close()
self.assertEqual(agenda83utc_valid, agenda83utc_response, "The /meeting/83/agenda-utc.html page changed.\nThe newly generated agenda has been written to file: %s" % fn)
def test_nameOfClueWg(self):
clue_session = Session.objects.get(pk=2194)
self.assertEqual(clue_session.short_name, "clue")
def test_nameOfIEPG(self):
iepg_session = Session.objects.get(pk=2288)
self.assertEqual(iepg_session.short_name, "IEPG Meeting")
def test_nameOfEdu1(self):
edu1_session = Session.objects.get(pk=2274)
self.assertEqual(edu1_session.short_name, "Tools for Creating Internet-Drafts Tutorial")
def test_js_identifier_clue(self):
iepg_ss = ScheduledSession.objects.get(pk=2413)
slot = iepg_ss.timeslot
self.assertEqual(slot.js_identifier, "252b_2012-03-27_0900")
def test_agenda_save(self):
#
# determine that there isn't a schedule called "fred"
mtg = get_meeting(83)
fred = mtg.get_schedule_by_name("fred")
self.assertIsNone(fred)
#
# move this session from one timeslot to another.
self.client.post('/meeting/83/schedule/edit', {
'savename': "fred",
'saveas': "saveas",
}, **auth_wlo)
#
# confirm that a new schedule has been created
fred = mtg.get_schedule_by_name("fred")
self.assertNotEqual(fred, None, "fred not found")
def test_agenda_edit_url(self):
url = reverse(edit_agenda,
args=['83', 'fred'])
self.assertEqual(url, "/meeting/83/schedule/fred/edit")
def test_agenda_edit_visible_farrel(self):
# farrel is an AD
url = reverse(edit_agenda,
args=['83', 'russ_83_visible'])
resp = self.client.get(url, **auth_ferrel)
# a visible agenda can be seen by any logged in AD/Secretariat
self.assertEqual(resp.status_code, 200)
def test_agenda_edit_visible_joeblow(self):
url = reverse(edit_agenda,
args=['83', 'russ_83_visible'])
resp = self.client.get(url, **auth_joeblow)
# a visible agenda can not be seen unless logged in
self.assertEqual(resp.status_code, 403)
def test_agenda_edit_visible_authwlo(self):
url = reverse(edit_agenda,
args=['83', 'russ_83_visible'])
resp = self.client.get(url, **auth_wlo)
# secretariat can always see things
self.assertEqual(resp.status_code, 200)
def test_agenda_edit_public_farrel(self):
# farrel is an AD
url = reverse(edit_agenda,
args=['83', 'mtg:83'])
resp = self.client.get(url, **auth_ferrel)
self.assertEqual(resp.status_code, 200) # a public agenda can be seen by any logged in AD/Secretariat
def test_agenda_edit_public_joeblow(self):
url = reverse(edit_agenda,
args=['83', 'mtg:83'])
resp = self.client.get(url, **auth_joeblow)
self.assertEqual(resp.status_code, 200) # a public agenda can be seen by unlogged in people (read-only) XXX
#self.assertEqual(resp.status_code, 403) # a public agenda can not be seen by unlogged in people
def test_agenda_edit_public_authwlo(self):
url = reverse(edit_agenda,
args=['83', 'mtg:83'])
resp = self.client.get(url, **auth_wlo)
self.assertEqual(resp.status_code, 200) # a public agenda can be seen by the secretariat
def test_agenda_edit_private_russ(self):
# farrel is an AD
url = reverse(edit_agenda,
args=['83', 'russ_83_inv'])
resp = self.client.get(url, **auth_ferrel)
# a private agenda can only be seen its owner
self.assertEqual(resp.status_code, 403) # even a logged in AD can not see another
def test_agenda_edit_private_farrel(self):
url = reverse(edit_agenda,
args=['83', 'sf_83_invisible'])
resp = self.client.get(url, **auth_ferrel)
self.assertEqual(resp.status_code, 200) # a private agenda can only be seen its owner XXX
def test_agenda_edit_private_joeblow(self):
url = reverse(edit_agenda,
args=['83', 'sf_83_invisible'])
resp = self.client.get(url, **auth_joeblow)
self.assertEqual(resp.status_code, 403) # a private agenda can not be seen by the public
def test_agenda_edit_private_authwlo(self):
url = reverse(edit_agenda,
args=['83', 'sf_83_invisible'])
self.assertEqual(url, "/meeting/83/schedule/sf_83_invisible/edit")
resp = self.client.get(url, **auth_wlo)
self.assertEqual(resp.status_code, 200) # secretariat can see any agenda, even a private one.

View file

@ -1,15 +1,16 @@
# Copyright The IETF Trust 2007, All Rights Reserved
from django.conf.urls.defaults import patterns
from django.conf.urls.defaults import patterns, url, include
from django.views.generic.simple import redirect_to
from ietf.meeting import views
from ietf.meeting import ajax
urlpatterns = patterns('',
(r'^(?P<meeting_num>\d+)/materials.html$', views.materials),
(r'^agenda/$', views.html_agenda),
(r'^agenda(?:.html)?$', views.html_agenda),
(r'^agenda/$', views.agenda_html_request),
(r'^agenda-utc(?:.html)?$', views.html_agenda_utc),
(r'^agenda(?:.html)?$', views.agenda_html_request),
(r'^agenda/edit$', views.edit_agenda),
(r'^requests.html$', redirect_to, {"url": '/meeting/requests', "permanent": True}),
(r'^requests$', views.meeting_requests),
(r'^agenda.txt$', views.text_agenda),
@ -18,17 +19,34 @@ urlpatterns = patterns('',
(r'^agenda.csv$', views.csv_agenda),
(r'^agenda/week-view.html$', views.week_view),
(r'^week-view.html$', views.week_view),
(r'^(?P<num>\d+)/agenda(?:.html)?/?$', views.html_agenda),
(r'^(?P<num>\d+)/schedule/edit$', views.edit_agenda),
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)/edit$', views.edit_agenda),
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)/details$', views.edit_agenda_properties),
(r'^(?P<num>\d+)/schedule/(?P<schedule_name>[A-Za-z0-9-:_]+)(?:.html)?/?$', views.agenda_html_request),
(r'^(?P<num>\d+)/agenda(?:.html)?/?$', views.agenda_html_request),
(r'^(?P<num>\d+)/agenda-utc(?:.html)?/?$', views.html_agenda_utc),
(r'^(?P<num>\d+)/requests.html$', redirect_to, {"url": '/meeting/%(num)s/requests', "permanent": True}),
(r'^(?P<num>\d+)/requests$', views.meeting_requests),
(r'^(?P<num>\d+)/agenda.txt$', views.text_agenda),
(r'^(?P<num>\d+)/agenda.ics$', views.ical_agenda),
(r'^(?P<num>\d+)/agenda.csv$', views.csv_agenda),
(r'^(?P<num>\d+)/agendas/edit$', views.edit_agendas),
(r'^(?P<num>\d+)/timeslots/edit$', views.edit_timeslots),
(r'^(?P<num>\d+)/rooms$', ajax.timeslot_roomsurl),
(r'^(?P<num>\d+)/room/(?P<roomid>\d+).json$', ajax.timeslot_roomurl),
(r'^(?P<num>\d+)/timeslots$', ajax.timeslot_slotsurl),
(r'^(?P<num>\d+)/timeslot/(?P<slotid>\d+).json$', ajax.timeslot_sloturl),
(r'^(?P<num>\d+)/agendas/(?P<schedule_name>[A-Za-z0-9-:_]+).json$', ajax.agenda_infourl),
(r'^(?P<num>\d+)/agendas$', ajax.agenda_infosurl),
(r'^(?P<num>\d+)/week-view.html$', views.week_view),
(r'^(?P<num>\d+)/agenda/week-view.html$', views.week_view),
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)-drafts.pdf$', views.session_draft_pdf),
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)-drafts.tgz$', views.session_draft_tarfile),
(r'^(?P<num>\d+)/agenda/(?P<session>[A-Za-z0-9-]+)/?$', views.session_agenda),
(r'^(?P<num>\d+)/session/(?P<sessionid>\d+).json', ajax.session_json),
(r'^(?P<num>\d+)/session/(?P<sessionid>\d+)/constraints.json', ajax.session_constraints),
(r'^(?P<meeting_num>\d+).json$', ajax.meeting_json),
(r'^$', views.current_materials),
)

View file

@ -2,12 +2,14 @@
#import models
import datetime
import sys
import os
import re
import tarfile
from tempfile import mkstemp
from django import forms
from django.shortcuts import render_to_response, get_object_or_404
from ietf.idtracker.models import IETFWG, IRTF, Area
from django.http import HttpResponseRedirect, HttpResponse, Http404
@ -17,27 +19,38 @@ from django.template import RequestContext
from django.template.loader import render_to_string
from django.conf import settings
from django.utils.decorators import decorator_from_middleware
from ietf.ietfauth.decorators import group_required, has_role
from django.middleware.gzip import GZipMiddleware
from django.db.models import Max
from ietf.group.colors import fg_group_colors, bg_group_colors
from django.forms.models import modelform_factory
import debug
import urllib
from ietf.idtracker.models import InternetDraft
from ietf.utils.pipe import pipe
from ietf.utils.history import find_history_active_at
from ietf.doc.models import Document, State
# Old model -- needs to be removed
from ietf.proceedings.models import Meeting as OldMeeting, MeetingTime, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches
from ietf.proceedings.models import Meeting as OldMeeting, WgMeetingSession, MeetingVenue, IESGHistory, Proceeding, Switches
# New models
from ietf.person.models import Person
from ietf.meeting.models import Meeting, TimeSlot, Session
from ietf.meeting.models import Schedule, ScheduledSession, Room
from ietf.group.models import Group
from ietf.meeting.helpers import NamedTimeSlot, get_ntimeslots_from_ss
from ietf.meeting.helpers import get_ntimeslots_from_agenda, agenda_info
from ietf.meeting.helpers import get_areas, get_area_list_from_sessions, get_pseudo_areas
from ietf.meeting.helpers import build_all_agenda_slices, get_wg_name_list
from ietf.meeting.helpers import get_scheduledsessions_from_schedule, get_all_scheduledsessions_from_schedule
from ietf.meeting.helpers import get_modified_from_scheduledsessions
from ietf.meeting.helpers import get_wg_list, get_meeting, get_schedule, agenda_permissions
@decorator_from_middleware(GZipMiddleware)
def materials(request, meeting_num=None):
def materials(request, meeting_num=None, schedule_name=None):
proceeding = get_object_or_404(Proceeding, meeting_num=meeting_num)
begin_date = proceeding.sub_begin_date
cut_off_date = proceeding.sub_cut_off_date
@ -50,12 +63,17 @@ def materials(request, meeting_num=None):
sub_began = 0
if now > begin_date:
sub_began = 1
sessions = Session.objects.filter(meeting__number=meeting_num, timeslot__isnull=False)
plenaries = sessions.filter(name__icontains='plenary')
ietf = sessions.filter(group__parent__type__slug = 'area').exclude(group__acronym='edu')
irtf = sessions.filter(group__parent__acronym = 'irtf')
training = sessions.filter(group__acronym='edu')
iab = sessions.filter(group__parent__acronym = 'iab')
meeting = get_meeting(meeting_num)
schedule = get_schedule(meeting, schedule_name)
scheduledsessions = get_scheduledsessions_from_schedule(schedule)
plenaries = scheduledsessions.filter(session__name__icontains='plenary')
ietf = scheduledsessions.filter(session__group__parent__type__slug = 'area').exclude(session__group__acronym='edu')
irtf = scheduledsessions.filter(session__group__parent__acronym = 'irtf')
training = scheduledsessions.filter(session__group__acronym='edu')
iab = scheduledsessions.filter(session__group__parent__acronym = 'iab')
cache_version = Document.objects.filter(session__meeting__number=meeting_num).aggregate(Max('time'))["time__max"]
#
@ -84,104 +102,29 @@ def get_plenary_agenda(meeting_num, id):
except WgMeetingSession.DoesNotExist:
return "The Plenary has not been scheduled"
def agenda_info(num=None):
if num:
meetings = [ num ]
##########################################################################################################################
## dispatch based upon request type.
def agenda_html_request(request,num=None, schedule_name=None):
if request.method == 'POST':
return agenda_create(request, num, schedule_name)
else:
meetings =list(Meeting.objects.all())
meetings.reverse()
meetings = [ meeting.meeting_num for meeting in meetings ]
for n in meetings:
try:
timeslots = MeetingTime.objects.select_related().filter(meeting=n).order_by("day_id", "time_desc")
update = Switches.objects.get(id=1)
meeting= OldMeeting.objects.get(meeting_num=n)
venue = MeetingVenue.objects.get(meeting_num=n)
break
except (MeetingTime.DoesNotExist, Switches.DoesNotExist, OldMeeting.DoesNotExist, MeetingVenue.DoesNotExist):
continue
else:
raise Http404("No meeting information for meeting %s available" % num)
ads = list(IESGHistory.objects.select_related().filter(meeting=n))
if not ads:
ads = list(IESGHistory.objects.select_related().filter(meeting=str(int(n)-1)))
ads.sort(key=(lambda item: item.area.area_acronym.acronym))
plenaryw_agenda = get_plenary_agenda(n, -1)
plenaryt_agenda = get_plenary_agenda(n, -2)
return timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda
# GET and HEAD.
return html_agenda(request, num, schedule_name)
def agenda_infoREDESIGN(num=None):
try:
if num != None:
meeting = OldMeeting.objects.get(number=num)
else:
meeting = OldMeeting.objects.all().order_by('-date')[:1].get()
except OldMeeting.DoesNotExist:
raise Http404("No meeting information for meeting %s available" % num)
# now go through the timeslots, only keeping those that are
# sessions/plenary/training and don't occur at the same time
timeslots = []
time_seen = set()
for t in MeetingTime.objects.filter(meeting=meeting, type__in=("session", "plenary", "other")).order_by("time").select_related():
if not t.time in time_seen:
time_seen.add(t.time)
timeslots.append(t)
update = Switches().from_object(meeting)
venue = meeting.meeting_venue
ads = []
meeting_time = datetime.datetime.combine(meeting.date, datetime.time(0, 0, 0))
for g in Group.objects.filter(type="area").order_by("acronym"):
history = find_history_active_at(g, meeting_time)
if history and history != g:
if history.state_id == "active":
ads.extend(IESGHistory().from_role(x, meeting_time) for x in history.rolehistory_set.filter(name="ad").select_related())
else:
if g.state_id == "active":
ads.extend(IESGHistory().from_role(x, meeting_time) for x in g.role_set.filter(name="ad").select_related('group', 'person'))
active_agenda = State.objects.get(used=True, type='agenda', slug='active')
plenary_agendas = Document.objects.filter(session__meeting=meeting, session__timeslot__type="plenary", type="agenda", ).distinct()
plenaryw_agenda = plenaryt_agenda = "The Plenary has not been scheduled"
for agenda in plenary_agendas:
if active_agenda in agenda.states.all():
# we use external_url at the moment, should probably regularize
# the filenames to match the document name instead
path = os.path.join(settings.AGENDA_PATH, meeting.number, "agenda", agenda.external_url)
try:
f = open(path)
s = f.read()
f.close()
except IOError:
s = "THE AGENDA HAS NOT BEEN UPLOADED YET"
if "tech" in agenda.name.lower():
plenaryt_agenda = s
else:
plenaryw_agenda = s
return timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
agenda_info = agenda_infoREDESIGN
def get_agenda_info(request, num=None):
def get_agenda_info(request, num=None, schedule_name=None):
meeting = get_meeting(num)
timeslots = TimeSlot.objects.filter(Q(meeting__id = meeting.id)).order_by('time','name')
modified = timeslots.aggregate(Max('modified'))['modified__max']
schedule = get_schedule(meeting, schedule_name)
scheduledsessions = get_scheduledsessions_from_schedule(schedule)
modified = get_modified_from_scheduledsessions(scheduledsessions)
area_list = timeslots.filter(type = 'Session', session__group__parent__isnull = False).order_by('session__group__parent__acronym').distinct('session__group__parent__acronym').values_list('session__group__parent__acronym',flat=True)
area_list = get_areas()
wg_list = get_wg_list(scheduledsessions)
time_slices,date_slices = build_all_agenda_slices(scheduledsessions, False)
rooms = meeting.room_set
wg_name_list = timeslots.filter(type = 'Session', session__group__isnull = False, session__group__parent__isnull = False).order_by('session__group__acronym').distinct('session__group').values_list('session__group__acronym',flat=True)
return scheduledsessions, schedule, modified, meeting, area_list, wg_list, time_slices, date_slices, rooms
wg_list = Group.objects.filter(acronym__in = set(wg_name_list)).order_by('parent__acronym','acronym')
return timeslots, modified, meeting, area_list, wg_list
@decorator_from_middleware(GZipMiddleware)
def html_agenda(request, num=None):
def mobile_user_agent_detect(request):
if settings.SERVER_MODE != 'production' and '_testiphone' in request.REQUEST:
user_agent = "iPhone"
elif 'user_agent' in request.REQUEST:
@ -190,65 +133,302 @@ def html_agenda(request, num=None):
user_agent = request.META["HTTP_USER_AGENT"]
else:
user_agent = ""
if "iPhone" in user_agent:
return iphone_agenda(request, num)
timeslots, modified, meeting, area_list, wg_list = get_agenda_info(request, num)
return HttpResponse(render_to_string("meeting/agenda.html",
{"timeslots":timeslots, "modified": modified, "meeting":meeting,
"area_list": area_list, "wg_list": wg_list ,
"show_inline": set(["txt","htm","html"]) },
RequestContext(request)), mimetype="text/html")
return user_agent
@decorator_from_middleware(GZipMiddleware)
def html_agenda_utc(request, num=None):
if settings.SERVER_MODE != 'production' and '_testiphone' in request.REQUEST:
user_agent = "iPhone"
elif 'user_agent' in request.REQUEST:
user_agent = request.REQUEST['user_agent']
elif 'HTTP_USER_AGENT' in request.META:
user_agent = request.META["HTTP_USER_AGENT"]
else:
user_agent = ""
def html_agenda_1(request, num, schedule_name, template_version="meeting/agenda.html"):
user_agent = mobile_user_agent_detect(request)
if "iPhone" in user_agent:
return iphone_agenda(request, num)
return iphone_agenda(request, num, schedule_name)
timeslots, modified, meeting, area_list, wg_list = get_agenda_info(request, num)
return HttpResponse(render_to_string("meeting/agenda_utc.html",
{"timeslots":timeslots, "modified": modified, "meeting":meeting,
"area_list": area_list, "wg_list": wg_list ,
scheduledsessions, schedule, modified, meeting, area_list, wg_list, time_slices, date_slices, rooms = get_agenda_info(request, num, schedule_name)
areas = get_areas()
return HttpResponse(render_to_string(template_version,
{"scheduledsessions":scheduledsessions,
"rooms":rooms,
"areas":areas,
"time_slices":time_slices,
"date_slices":date_slices,
"modified": modified, "meeting":meeting,
"area_list": area_list, "wg_list": wg_list,
"fg_group_colors": fg_group_colors,
"bg_group_colors": bg_group_colors,
"show_inline": set(["txt","htm","html"]) },
RequestContext(request)), mimetype="text/html")
def iphone_agenda(request, num):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
def html_agenda(request, num=None, schedule_name=None):
return html_agenda_1(request, num, schedule_name, "meeting/agenda.html")
groups_meeting = [];
for slot in timeslots:
for session in slot.sessions():
groups_meeting.append(session.acronym())
groups_meeting = set(groups_meeting);
@decorator_from_middleware(GZipMiddleware)
def html_agenda_utc(request, num=None, schedule_name=None):
return html_agenda_1(request, num, schedule_name, "meeting/agenda_utc.html")
class SaveAsForm(forms.Form):
savename = forms.CharField(max_length=100)
@group_required('Area Director','Secretariat')
def agenda_create(request, num=None, schedule_name=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting, schedule_name)
if schedule is None:
# here we have to return some ajax to display an error.
raise Http404("No meeting information for meeting %s schedule %s available" % (num,schedule_name))
# authorization was enforced by the @group_require decorator above.
saveasform = SaveAsForm(request.POST)
if not saveasform.is_valid():
return HttpResponse(status=404)
savedname = saveasform.cleaned_data['savename']
# create the new schedule, and copy the scheduledsessions
try:
sched = meeting.schedule_set.get(name=savedname, owner=request.user.person)
if sched:
# XXX needs to record a session error and redirect to where?
return HttpResponseRedirect(
reverse(edit_agenda,
args=[meeting.number, sched.name]))
except Schedule.DoesNotExist:
pass
# must be done
newschedule = Schedule(name=savedname,
owner=request.user.person,
meeting=meeting,
visible=False,
public=False)
newschedule.save()
if newschedule is None:
return HttpResponse(status=500)
# keep a mapping so that extendedfrom references can be chased.
mapping = {};
for ss in schedule.scheduledsession_set.all():
# hack to copy the object, creating a new one
# just reset the key, and save it again.
oldid = ss.pk
ss.pk = None
ss.schedule=newschedule
ss.save()
mapping[oldid] = ss.pk
# now fix up any extendedfrom references to new set.
for ss in newschedule.scheduledsession_set.all():
if ss.extendedfrom is not None:
ss.extendedfrom = newschedule.scheduledsession_set.get(pk = mapping[ss.extendedfrom.id])
ss.save()
# now redirect to this new schedule.
return HttpResponseRedirect(
reverse(edit_agenda,
args=[meeting.number, newschedule.name]))
@decorator_from_middleware(GZipMiddleware)
def edit_timeslots(request, num=None):
meeting = get_meeting(num)
timeslots = meeting.timeslot_set.exclude(location__isnull = True).all()
time_slices,date_slices,slots = meeting.build_timeslices()
meeting_base_url = request.build_absolute_uri(meeting.base_url())
site_base_url =request.build_absolute_uri('/')
rooms = meeting.room_set.order_by("capacity")
rooms = rooms.all()
from ietf.meeting.ajax import timeslot_roomsurl, AddRoomForm, timeslot_slotsurl, AddSlotForm
roomsurl =reverse(timeslot_roomsurl, args=[meeting.number])
adddayurl =reverse(timeslot_slotsurl, args=[meeting.number])
return HttpResponse(render_to_string("meeting/timeslot_edit.html",
{"timeslots": timeslots,
"meeting_base_url": meeting_base_url,
"site_base_url": site_base_url,
"rooms":rooms,
"addroom": AddRoomForm(),
"roomsurl": roomsurl,
"addday": AddSlotForm(),
"adddayurl":adddayurl,
"time_slices":time_slices,
"slot_slices": slots,
"date_slices":date_slices,
"meeting":meeting},
RequestContext(request)), mimetype="text/html")
##############################################################################
#@group_required('Area Director','Secretariat')
# disable the above security for now, check it below.
@decorator_from_middleware(GZipMiddleware)
def edit_agenda(request, num=None, schedule_name=None):
if request.method == 'POST':
return agenda_create(request, num, schedule_name)
user = request.user
requestor = "AnonymousUser"
if not user.is_anonymous():
#print "user: %s" % (user)
try:
requestor = user.get_profile()
except Person.DoesNotExist:
# if we can not find them, leave them alone, only used for debugging.
pass
meeting = get_meeting(num)
#sys.stdout.write("requestor: %s for sched_name: %s \n" % ( requestor, schedule_name ))
schedule = get_schedule(meeting, schedule_name)
#sys.stdout.write("2 requestor: %u for sched owned by: %u \n" % ( requestor.id, schedule.owner.id ))
meeting_base_url = request.build_absolute_uri(meeting.base_url())
site_base_url =request.build_absolute_uri('/')
rooms = meeting.room_set.order_by("capacity")
rooms = rooms.all()
saveas = SaveAsForm()
saveasurl=reverse(edit_agenda,
args=[meeting.number, schedule.name])
cansee,canedit = agenda_permissions(meeting, schedule, user)
if not cansee:
#sys.stdout.write("visible: %s public: %s owner: %s request from: %s\n" % (
# schedule.visible, schedule.public, schedule.owner, requestor))
return HttpResponse(render_to_string("meeting/private_agenda.html",
{"schedule":schedule,
"meeting": meeting,
"meeting_base_url":meeting_base_url},
RequestContext(request)), status=403, mimetype="text/html")
sessions = meeting.session_set.exclude(status__slug='deleted').exclude(status__slug='notmeet').order_by("id", "group", "requested_by")
scheduledsessions = get_all_scheduledsessions_from_schedule(schedule)
# get_modified_from needs the query set, not the list
modified = get_modified_from_scheduledsessions(scheduledsessions)
area_list = get_pseudo_areas()
wg_name_list = get_wg_name_list(scheduledsessions)
wg_list = get_wg_list(wg_name_list)
time_slices,date_slices = build_all_agenda_slices(scheduledsessions, True)
return HttpResponse(render_to_string("meeting/landscape_edit.html",
{"schedule":schedule,
"saveas": saveas,
"saveasurl": saveasurl,
"meeting_base_url": meeting_base_url,
"site_base_url": site_base_url,
"rooms":rooms,
"time_slices":time_slices,
"date_slices":date_slices,
"modified": modified,
"meeting":meeting,
"area_list": area_list,
"wg_list": wg_list ,
"sessions": sessions,
"scheduledsessions": scheduledsessions,
"show_inline": set(["txt","htm","html"]) },
RequestContext(request)), mimetype="text/html")
##############################################################################
# show the properties associated with an agenda (visible, public)
# this page uses ajax PUT requests to the API
#
AgendaPropertiesForm = modelform_factory(Schedule, fields=('name','visible', 'public'))
@group_required('Area Director','Secretariat')
@decorator_from_middleware(GZipMiddleware)
def edit_agenda_properties(request, num=None, schedule_name=None):
meeting = get_meeting(num)
schedule = get_schedule(meeting, schedule_name)
form = AgendaPropertiesForm(instance=schedule)
return HttpResponse(render_to_string("meeting/properties_edit.html",
{"schedule":schedule,
"form":form,
"meeting":meeting},
RequestContext(request)), mimetype="text/html")
##############################################################################
# show list of agendas.
#
@group_required('Area Director','Secretariat')
@decorator_from_middleware(GZipMiddleware)
def edit_agendas(request, num=None, order=None):
#if request.method == 'POST':
# return agenda_create(request, num, schedule_name)
meeting = get_meeting(num)
user = request.user
schedules = meeting.schedule_set
if not has_role(user, 'Secretariat'):
schedules = schedules.filter(visible = True) | schedules.filter(owner = user.get_profile())
schedules = schedules.order_by('owner', 'name')
return HttpResponse(render_to_string("meeting/agenda_list.html",
{"meeting": meeting,
"schedules": schedules.all()
},
RequestContext(request)),
mimetype="text/html")
##############################################################################
def iphone_agenda(request, num, name):
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num, name)
groups_meeting = set();
for ss in scheduledsessions:
if ss.session is not None:
groups_meeting.add(ss.session.group.acronym)
wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).filter(group_acronym__acronym__in = groups_meeting).order_by('group_acronym__acronym')
rgs = IRTF.objects.all().filter(acronym__in = groups_meeting).order_by('acronym')
areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
areas = get_areas()
template = "meeting/m_agenda.html"
return render_to_response(template,
{"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads,
"plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda,
"wg_list" : wgs, "rg_list" : rgs, "area_list" : areas},
{"timeslots":timeslots,
"scheduledsessions":scheduledsessions,
"update":update,
"meeting":meeting,
"venue":venue,
"ads":ads,
"areas":areas,
"plenaryw_agenda":plenaryw_agenda,
"plenaryt_agenda":plenaryt_agenda,
"wg_list" : wgs,
"rg_list" : rgs},
context_instance=RequestContext(request))
def text_agenda(request, num=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
def text_agenda(request, num=None, name=None):
timeslots, scheduledsessions, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num, name)
plenaryw_agenda = " "+plenaryw_agenda.strip().replace("\n", "\n ")
plenaryt_agenda = " "+plenaryt_agenda.strip().replace("\n", "\n ")
return HttpResponse(render_to_string("meeting/agenda.txt",
{"timeslots":timeslots, "update":update, "meeting":meeting, "venue":venue, "ads":ads,
"plenaryw_agenda":plenaryw_agenda, "plenaryt_agenda":plenaryt_agenda, },
{"timeslots":timeslots,
"scheduledsessions":scheduledsessions,
"update":update,
"meeting":meeting,
"venue":venue,
"ads":ads,
"plenaryw_agenda":plenaryw_agenda,
"plenaryt_agenda":plenaryt_agenda, },
RequestContext(request)), mimetype="text/plain")
def session_agenda(request, num, session):
d = Document.objects.filter(type="agenda", session__meeting__number=num)
if session == "plenaryt":
@ -389,7 +569,7 @@ def session_draft_tarfile(request, num, session):
tarstream.add(mfn, "manifest.txt")
tarstream.close()
os.unlink(mfn)
return response
return response
def pdf_pages(file):
try:
@ -433,13 +613,6 @@ def session_draft_pdf(request, num, session):
os.unlink(pdfn)
return HttpResponse(pdf_contents, mimetype="application/pdf")
def get_meeting(num=None):
if (num == None):
meeting = Meeting.objects.filter(type="ietf").order_by("-date")[:1].get()
else:
meeting = get_object_or_404(Meeting, number=num)
return meeting
def week_view(request, num=None):
meeting = get_meeting(num)
timeslots = TimeSlot.objects.filter(meeting__id = meeting.id)
@ -448,7 +621,7 @@ def week_view(request, num=None):
return render_to_response(template,
{"timeslots":timeslots,"render_types":["Session","Other","Break","Plenary"]}, context_instance=RequestContext(request))
def ical_agenda(request, num=None):
def ical_agenda(request, num=None, schedule_name=None):
meeting = get_meeting(num)
q = request.META.get('QUERY_STRING','') or ""
@ -459,7 +632,7 @@ def ical_agenda(request, num=None):
# Process the special flags.
# "-wgname" will remove a working group from the output.
# "~Type" will add that type to the output.
# "~Type" will add that type to the output.
# "-~Type" will remove that type from the output
# Current types are:
# Session, Other (default on), Break, Plenary (default on)
@ -475,13 +648,16 @@ def ical_agenda(request, num=None):
elif item[0] == '~':
include_types |= set([item[1:2].upper()+item[2:]])
timeslots = TimeSlot.objects.filter(Q(meeting__id = meeting.id),
Q(type__name__in = include_types) |
schedule = get_schedule(meeting, schedule_name)
scheduledsessions = get_scheduledsessions_from_schedule(schedule)
scheduledsessions = scheduledsessions.filter(
Q(timeslot__type__name__in = include_types) |
Q(session__group__acronym__in = filter) |
Q(session__group__parent__acronym__in = filter)
).exclude(Q(session__group__acronym__in = exclude))
#.exclude(Q(session__group__isnull = False),
#Q(session__group__acronym__in = exclude) |
#Q(session__group__acronym__in = exclude) |
#Q(session__group__parent__acronym__in = exclude))
if meeting.time_zone:
@ -489,9 +665,7 @@ def ical_agenda(request, num=None):
tzfn = os.path.join(settings.TZDATA_ICS_PATH, meeting.time_zone + ".ics")
tzf = open(tzfn)
icstext = tzf.read()
debug.show('icstext[:128]')
vtimezone = re.search("(?sm)(\nBEGIN:VTIMEZONE.*\nEND:VTIMEZONE\n)", icstext).group(1).strip()
debug.show('vtimezone[:128]')
tzf.close()
except IOError:
vtimezone = None
@ -499,15 +673,11 @@ def ical_agenda(request, num=None):
vtimezone = None
return HttpResponse(render_to_string("meeting/agendaREDESIGN.ics",
{"timeslots":timeslots, "meeting":meeting, "vtimezone": vtimezone },
{"scheduledsessions":scheduledsessions, "meeting":meeting, "vtimezone": vtimezone },
RequestContext(request)), mimetype="text/calendar")
def csv_agenda(request, num=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num)
#wgs = IETFWG.objects.filter(status=IETFWG.ACTIVE).order_by('group_acronym__acronym')
#rgs = IRTF.objects.all().order_by('acronym')
#areas = Area.objects.filter(status=Area.ACTIVE).order_by('area_acronym__acronym')
def csv_agenda(request, num=None, name=None):
timeslots, update, meeting, venue, ads, plenaryw_agenda, plenaryt_agenda = agenda_info(num, name)
# we should really use the Python csv module or something similar
# rather than a template file which is one big mess
@ -526,3 +696,4 @@ def meeting_requests(request, num=None) :
{"meeting": meeting, "sessions":sessions,
"groups_not_meeting": groups_not_meeting},
context_instance=RequestContext(request))

View file

@ -0,0 +1,158 @@
# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import DataMigration
from django.db import models
from ietf.name.models import TimeSlotTypeName
class Migration(DataMigration):
def forwards(self, orm):
TimeSlotTypeName(slug='unavail',name='Room Unavailable',desc='A room was not booked for the timeslot indicated',used=True).save()
TimeSlotTypeName(slug='reserved',name='Room Reserved',desc='A room has been reserved for use by another body the timeslot indicated',used=True).save()
def backwards(self, orm):
pass
models = {
'name.ballotpositionname': {
'Meta': {'ordering': "['order']", 'object_name': 'BallotPositionName'},
'blocking': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.constraintname': {
'Meta': {'ordering': "['order']", 'object_name': 'ConstraintName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docrelationshipname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocRelationshipName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.docremindertypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocReminderTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctagname': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTagName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.doctypename': {
'Meta': {'ordering': "['order']", 'object_name': 'DocTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupballotpositionname': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupBallotPositionName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.groupstatename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupStateName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.grouptypename': {
'Meta': {'ordering': "['order']", 'object_name': 'GroupTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.intendedstdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'IntendedStdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.liaisonstatementpurposename': {
'Meta': {'ordering': "['order']", 'object_name': 'LiaisonStatementPurposeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.meetingtypename': {
'Meta': {'ordering': "['order']", 'object_name': 'MeetingTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.rolename': {
'Meta': {'ordering': "['order']", 'object_name': 'RoleName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.sessionstatusname': {
'Meta': {'ordering': "['order']", 'object_name': 'SessionStatusName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.stdlevelname': {
'Meta': {'ordering': "['order']", 'object_name': 'StdLevelName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.streamname': {
'Meta': {'ordering': "['order']", 'object_name': 'StreamName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
},
'name.timeslottypename': {
'Meta': {'ordering': "['order']", 'object_name': 'TimeSlotTypeName'},
'desc': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'order': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'slug': ('django.db.models.fields.CharField', [], {'max_length': '8', 'primary_key': 'True'}),
'used': ('django.db.models.fields.BooleanField', [], {'default': 'True'})
}
}
complete_apps = ['name']
symmetrical = True

View file

@ -54,7 +54,7 @@ class MeetingTypeName(NameModel):
class SessionStatusName(NameModel):
"""Waiting for Approval, Approved, Waiting for Scheduling, Scheduled, Cancelled, Disapproved"""
class TimeSlotTypeName(NameModel):
"""Session, Break, Registration"""
"""Session, Break, Registration, Other(Non-Session), Reserved, unavail"""
class ConstraintName(NameModel):
"""Conflict"""
penalty = models.IntegerField(default=0, help_text="The penalty for violating this kind of constraint; for instance 10 (small penalty) or 10000 (large penalty)")

View file

@ -2,7 +2,7 @@
import os
import tempfile
from django.test import TestCase
from ietf.utils import TestCase
from django.db import IntegrityError
from django.core.urlresolvers import reverse
from django.core.files import File
@ -25,7 +25,8 @@ from ietf.nomcom.utils import get_nomcom_by_year
class NomcomViewsTest(TestCase):
"""Tests to create a new nomcom"""
fixtures = ['names', 'nomcom_templates']
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names', 'nomcom_templates']
def check_url_status(self, url, status):
response = self.client.get(url)
@ -589,7 +590,8 @@ class NomcomViewsTest(TestCase):
class NomineePositionStateSaveTest(TestCase):
"""Tests for the NomineePosition save override method"""
fixtures = ['names', 'nomcom_templates']
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names', 'nomcom_templates']
def setUp(self):
nomcom_test_data()
@ -621,7 +623,7 @@ class NomineePositionStateSaveTest(TestCase):
class FeedbackTest(TestCase):
fixtures = ['names', 'nomcom_templates']
perma_fixtures = ['names', 'nomcom_templates']
def setUp(self):
nomcom_test_data()

View file

@ -0,0 +1,45 @@
[
{"pk":314, "model": "group.role", "fields": { "name": "chair", "group": 2, "person": 5376, "email": "housley@vigilsec.com"}},
{"pk":1614, "model": "group.role", "fields": { "name": "secr", "group": 4, "person": 108757, "email": "wlo@amsl.com"}},
{"pk":1623, "model": "group.role", "fields": { "name": "ad", "group": 1260, "person": 19177, "email": "stephen.farrell@cs.tcd.ie"}},
{"pk":1634, "model": "group.role", "fields": { "name": "ad", "group": 1008, "person": 5376, "email": "housley@vigilsec.com"}},
{"pk": 5376, "model": "person.person", "fields": { "name": "Russ Housley", "time": "2012-02-26 00:04:18", "affiliation": "Vigil Security, LLC", "user": 432, "address": "", "ascii": "Russ Housley"}},
{"pk": 6766, "model": "person.person", "fields": {"name": "Nevil Brownlee", "ascii_short": "", "time": "2012-02-26 00:04:03", "affiliation": "The University of Auckland", "user": 1464, "address": "", "ascii": "Nevil Brownlee"}},
{"pk": 8669, "model": "person.person", "fields": {"name": "Jeff T. Johnson", "ascii_short": null, "time": "2012-02-26 00:04:37", "affiliation": "RedBack Networks", "user": null, "address": "", "ascii": "Jeff T. Johnson"}},
{"pk": 14966, "model": "person.person", "fields": {"name": "Ray Pelletier", "ascii_short": null, "time": "2012-02-26 00:04:23", "affiliation": "", "user": 2208, "address": "", "ascii": "Ray Pelletier"}},
{"pk": 18321, "model": "person.person", "fields": {"name": "Pete Resnick", "ascii_short": "", "time": "2012-02-26 00:04:04", "affiliation": "QTI, a Qualcomm company", "user": 2513, "address": "", "ascii": "Pete Resnick"}},
{"pk": 19177, "model": "person.person", "fields": { "name": "Stephen Farrell", "time": "2012-02-26 00:04:11", "affiliation": "Trinity College Dublin", "user": 491, "ascii": "Stephen Farrell"}},
{"pk": 19483, "model": "person.person", "fields": { "name": "Sean Turner", "time": "2012-02-26 00:04:11", "affiliation": "IECA", "user": 492, "ascii": "Sean Turner"}},
{"pk": 21072, "model": "person.person", "fields": {"name": "Jari Arkko", "ascii_short": null, "time": "2012-02-26 00:04:23", "affiliation": "Ericsson", "user": 430, "address": "", "ascii": "Jari Arkko"}},
{"pk": 21684, "model": "person.person", "fields": {"name": "Barry Leiba", "ascii_short": "", "time": "2012-02-26 00:03:53", "affiliation": "Huawei Technologies", "user": 500, "address": "", "ascii": "Barry Leiba"}},
{"pk": 99871, "model": "person.person", "fields": { "name": "Joe Blow", "user": 99870, "address": "", "ascii": "Joe Blow"}},
{"pk": 101568, "model": "person.person", "fields": {"name": "Ron Bonica", "ascii_short": "", "time": "2012-02-26 00:04:23", "affiliation": "Juniper Networks", "user": 507, "address": "241 West Meadowland Lane\r\nSterling, Virginia 20164-1147", "ascii": "Ron Bonica"}},
{"pk": 102900, "model": "person.person", "fields": {"name": "Al C. Morton", "ascii_short": null, "time": "2012-02-26 00:03:52", "affiliation": "AT&T Labs", "user": 551, "address": "", "ascii": "Al C. Morton"}},
{"pk": 105682, "model": "person.person", "fields": {"name": "Benoit Claise", "ascii_short": "", "time": "2012-02-26 00:03:53", "affiliation": "Cisco", "user": 740, "address": "", "ascii": "Benoit Claise"}},
{"pk": 108757, "model": "person.person", "fields": {"name": "Wanda Lo", "ascii_short": null, "time": "2012-02-26 00:04:12", "affiliation": "", "user": 509, "address": "", "ascii": "Wanda Lo"}},
{"pk": 112773, "model": "person.person", "fields": {"name": "Lars Eggert", "ascii_short": "Lars Eggert", "time": "2012-02-26 00:03:59", "affiliation": "NetApp", "user": 1575, "address": "", "ascii": "Lars Eggert"}},
{"pk": "chair@ietf.org", "model": "person.email", "fields": {"active": true, "person": null, "time": "2012-02-26 00:22:27"}},
{"pk": "iab-chair@ietf.org", "model": "person.email", "fields": {"active": true, "person": null, "time": "2012-02-26 00:22:27"}},
{"pk": "nomcom-chair@ietf.org", "model": "person.email", "fields": {"active": true, "person": null, "time": "2012-02-26 00:22:42"}},
{"pk": "iad@ietf.org", "model": "person.email", "fields": {"active": true, "person": null, "time": "2012-02-26 00:22:27"}},
{"pk": "acmorton@att.com", "model": "person.email", "fields": {"active": true, "person": 102900, "time": "1970-01-01 23:59:59"}},
{"pk": "kaj@research.telcordia.com", "model": "person.email", "fields": {"active": true, "person": 3798, "time": "1970-01-01 23:59:59"}},
{"pk": "jeff@redbacknetworks.com", "model": "person.email", "fields": {"active": true, "person": 8669, "time": "1970-01-01 23:59:59"}},
{"pk": 430, "model": "auth.user", "fields": {"username": "jari.arkko@ericsson.com", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-26 03:32:16", "groups": [], "user_permissions": [], "password": "sha1$229f8$5b7f80e3c40995887a57d4ee8ad3094e99789dc1", "email": "", "date_joined": "2010-01-15 00:39:01"}},
{"pk": 432, "model": "auth.user", "fields": {"username": "rhousley", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-26 11:05:15", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2010-01-16 14:45:18"}},
{"pk": 491, "model": "auth.user", "fields": {"username": "stephen.farrell@cs.tcd.ie", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-27 12:10:15", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2010-08-16 17:12:35"}},
{"pk": 492, "model": "auth.user", "fields": {"username": "tlyu@mit.edu", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-04-26 14:08:12", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2010-08-16 20:15:05"}},
{"pk": 500, "model": "auth.user", "fields": {"username": "barryleiba@computer.org", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-28 11:15:05", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2010-10-31 20:54:03"}},
{"pk": 507, "model": "auth.user", "fields": {"username": "rbonica@juniper.net", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-03-14 19:50:11", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2010-12-01 09:03:30"}},
{"pk": 509, "model": "auth.user", "fields": {"username": "wnl", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2012-10-08 09:24:38", "groups": [], "user_permissions": [], "password": "sha1$e794c$18ae7fe83e0fa2a16350568818e5a9ef3a29930b", "email": "wlo@amsl.com", "date_joined": "2010-12-02 10:52:33"}},
{"pk": 740, "model": "auth.user", "fields": {"username": "bclaise@cisco.com", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-27 01:07:42", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2011-09-19 08:21:30"}},
{"pk": 1464, "model": "auth.user", "fields": {"username": "n.brownlee@auckland.ac.nz", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-25 20:27:21", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2012-02-22 12:14:53"}},
{"pk": 1521, "model": "auth.user", "fields": {"username": "wlo@amsl.com", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2012-05-10 14:02:52", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2012-02-22 12:14:58"}},
{"pk": 1575, "model": "auth.user", "fields": {"username": "lars@netapp.com", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-23 06:23:57", "groups": [], "user_permissions": [], "password": "", "email": "", "date_joined": "2012-02-22 12:15:08"}},
{"pk": 2513, "model": "auth.user", "fields": {"username": "presnick@qti.qualcomm.com", "first_name": "", "last_name": "", "is_active": true, "is_superuser": false, "is_staff": false, "last_login": "2013-09-28 07:42:11", "groups": [], "user_permissions": [], "password": "sha1$58c2a$eceb1b40b4adc79f53a5c04ac552db056a93bed3", "email": "presnick@qti.qualcomm.com", "date_joined": "2012-09-24 10:16:39"}},
{"pk": 99870, "model": "auth.user", "fields": { "username": "joeblow", "is_staff": 0, "is_active": 1, "is_superuser":0}}
]

View file

@ -0,0 +1,4 @@
[
{"pk": 509, "model": "auth.user", "fields": {"username": "wnl", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2012-10-08 09:24:38", "groups": [], "user_permissions": [], "password": "sha1$e794c$18ae7fe83e0fa2a16350568818e5a9ef3a29930b", "email": "wlo@amsl.com", "date_joined": "2010-12-02 10:52:33"}},
{"pk": 492, "model": "auth.user", "fields": {"username": "sean", "first_name": "Sean", "last_name": "Turner", "is_active": true, "is_superuser": false, "is_staff": true, "groups": [], "user_permissions": [], "email": "sean@ietf.org", "date_joined": "2010-12-02 10:52:33"}}
]

View file

@ -71,12 +71,40 @@ class PersonInfo(models.Model):
class Meta:
abstract = True
class PersonManager(models.Manager):
def by_email(self, email):
results = self.get_query_set().filter(user__email = email)
if len(results)>0:
return results[0]
else:
return None
def by_username(self, username):
results = self.get_query_set().filter(user__username = username)
if len(results)>0:
return results[0]
else:
return None
class Person(PersonInfo):
objects = PersonManager()
user = models.OneToOneField(User, blank=True, null=True)
def person(self): # little temporary wrapper to help porting to new schema
return self
def json_url(self):
return "/person/%s.json" % (self.id, )
# person json not yet implemented
#def json_dict(self, host_scheme):
# ct1 = dict()
# ct1['person_id'] = self.id
# ct1['href'] = self.url(host_scheme)
# ct1['name'] = self.name
# ct1['ascii'] = self.ascii
# ct1['affliation']= self.affliation
# return ct1
class PersonHistory(PersonInfo):
person = models.ForeignKey(Person, related_name="history_set")
user = models.ForeignKey(User, blank=True, null=True)

View file

@ -0,0 +1 @@
from persons import PersonFetchTestCase

View file

@ -0,0 +1,25 @@
import sys
from ietf.utils import TestCase
from ietf.group.models import Group
from ietf.person.models import Person
class PersonFetchTestCase(TestCase):
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = [ 'persons']
def test_FindNoPerson(self):
one = Person.objects.by_email('wlo@amsl.org')
self.assertEqual(one, None)
def test_FindOnePerson(self):
one = Person.objects.by_email('wlo@amsl.com')
self.assertNotEqual(one, None)
def test_FindOnePersonByUsername(self):
one = Person.objects.by_username('wnl')
self.assertNotEqual(one, None)

View file

@ -20,6 +20,7 @@ from django.db import models
from django.conf import settings
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, IRTF, AreaGroup, Area, IETFWG
from ietf.utils.broken_foreign_key import BrokenForeignKey
from ietf.meeting.models import TimeSlot
import datetime
#from ietf.utils import log
@ -273,74 +274,6 @@ class IESGHistory(models.Model):
verbose_name = "Meeting AD info"
verbose_name_plural = "Meeting AD info"
class MeetingTime(models.Model):
time_id = models.AutoField(primary_key=True)
time_desc = models.CharField(max_length=100)
meeting = models.ForeignKey(Meeting, db_column='meeting_num')
day_id = models.IntegerField()
session_name = models.ForeignKey(SessionName,null=True)
def __str__(self):
return "[%d] |%s| %s" % (self.meeting_id, (self.meeting.start_date + datetime.timedelta(self.day_id)).strftime('%A'), self.time_desc)
def sessions(self):
"""
Get all sessions that are scheduled at this time.
"""
sessions = WgMeetingSession.objects.filter(
models.Q(sched_time_id1=self.time_id) |
models.Q(sched_time_id2=self.time_id) |
models.Q(sched_time_id3=self.time_id) |
models.Q(combined_time_id1=self.time_id) |
models.Q(combined_time_id2=self.time_id))
for s in sessions:
if s.sched_time_id1_id == self.time_id:
s.room_id = s.sched_room_id1
s.ordinality = 1
elif s.sched_time_id2_id == self.time_id:
s.room_id = s.sched_room_id2
s.ordinality = 2
elif s.sched_time_id3_id == self.time_id:
s.room_id = s.sched_room_id3
s.ordinality = 3
elif s.combined_time_id1_id == self.time_id:
s.room_id = s.combined_room_id1
s.ordinality = 4
elif s.combined_time_id2_id == self.time_id:
s.room_id = s.combined_room_id2
s.ordinality = 5
else:
s.room_id = 0
s.ordinality = 0
return sessions
def sessions_by_area(self):
return [ {"area":session.area()+session.acronym(), "info":session} for session in self.sessions() ]
def meeting_date(self):
return self.meeting.get_meeting_date(self.day_id)
def registration(self):
if hasattr(self, '_reg_info'):
return self._reg_info
reg = NonSession.objects.get(meeting=self.meeting, day_id=self.day_id, non_session_ref=1)
reg.name = reg.non_session_ref.name
self._reg_info = reg
return reg
def reg_info(self):
reg_info = self.registration()
if reg_info.time_desc:
return "%s %s" % (reg_info.time_desc, reg_info.name)
else:
return ""
def break_info(self):
breaks = NonSession.objects.filter(meeting=self.meeting).exclude(non_session_ref=1).filter(models.Q(day_id=self.day_id) | models.Q(day_id__isnull=True)).order_by('time_desc')
for brk in breaks:
if brk.time_desc[-4:] == self.time_desc[:4]:
brk.name = brk.non_session_ref.name
return brk
return None
def is_plenary(self):
return self.session_name_id in [9, 10]
class Meta:
db_table = 'meeting_times'
verbose_name = "Meeting slot time"
class MeetingRoom(models.Model):
room_id = models.AutoField(primary_key=True)
meeting = models.ForeignKey(Meeting, db_column='meeting_num')
@ -385,19 +318,19 @@ class WgMeetingSession(models.Model, ResolveAcronym):
last_modified_date = models.DateField(null=True, blank=True)
ad_comments = models.TextField(blank=True,null=True)
sched_room_id1 = models.ForeignKey(MeetingRoom, db_column='sched_room_id1', null=True, blank=True, related_name='here1')
sched_time_id1 = BrokenForeignKey(MeetingTime, db_column='sched_time_id1', null=True, blank=True, related_name='now1')
sched_time_id1 = BrokenForeignKey(TimeSlot, db_column='sched_time_id1', null=True, blank=True, related_name='now1')
sched_date1 = models.DateField(null=True, blank=True)
sched_room_id2 = models.ForeignKey(MeetingRoom, db_column='sched_room_id2', null=True, blank=True, related_name='here2')
sched_time_id2 = BrokenForeignKey(MeetingTime, db_column='sched_time_id2', null=True, blank=True, related_name='now2')
sched_time_id2 = BrokenForeignKey(TimeSlot, db_column='sched_time_id2', null=True, blank=True, related_name='now2')
sched_date2 = models.DateField(null=True, blank=True)
sched_room_id3 = models.ForeignKey(MeetingRoom, db_column='sched_room_id3', null=True, blank=True, related_name='here3')
sched_time_id3 = BrokenForeignKey(MeetingTime, db_column='sched_time_id3', null=True, blank=True, related_name='now3')
sched_time_id3 = BrokenForeignKey(TimeSlot, db_column='sched_time_id3', null=True, blank=True, related_name='now3')
sched_date3 = models.DateField(null=True, blank=True)
special_agenda_note = models.CharField(blank=True, max_length=255)
combined_room_id1 = models.ForeignKey(MeetingRoom, db_column='combined_room_id1', null=True, blank=True, related_name='here4')
combined_time_id1 = BrokenForeignKey(MeetingTime, db_column='combined_time_id1', null=True, blank=True, related_name='now4')
combined_time_id1 = BrokenForeignKey(TimeSlot, db_column='combined_time_id1', null=True, blank=True, related_name='now4')
combined_room_id2 = models.ForeignKey(MeetingRoom, db_column='combined_room_id2', null=True, blank=True, related_name='here5')
combined_time_id2 = BrokenForeignKey(MeetingTime, db_column='combined_time_id2', null=True, blank=True, related_name='now5')
combined_time_id2 = BrokenForeignKey(TimeSlot, db_column='combined_time_id2', null=True, blank=True, related_name='now5')
def __str__(self):
return "%s at %s" % (self.acronym(), self.meeting)
def agenda_file(self,interimvar=0):
@ -611,12 +544,11 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
MeetingOld = Meeting
ProceedingOld = Proceeding
MeetingVenueOld = MeetingVenue
MeetingTimeOld = MeetingTime
WgMeetingSessionOld = WgMeetingSession
SlideOld = Slide
SwitchesOld = Switches
IESGHistoryOld = IESGHistory
from ietf.meeting.proxy import MeetingProxy as Meeting, ProceedingProxy as Proceeding, MeetingVenueProxy as MeetingVenue, MeetingTimeProxy as MeetingTime, WgMeetingSessionProxy as WgMeetingSession, SlideProxy as Slide, SwitchesProxy as Switches, IESGHistoryProxy as IESGHistory
from ietf.meeting.proxy import MeetingProxy as Meeting, ProceedingProxy as Proceeding, MeetingVenueProxy as MeetingVenue, WgMeetingSessionProxy as WgMeetingSession, SlideProxy as Slide, SwitchesProxy as Switches, IESGHistoryProxy as IESGHistory
# changes done by convert-096.py:changed maxlength to max_length
# removed core

View file

@ -5,7 +5,7 @@ when you run "manage.py test".
Replace this with more appropriate tests for your application.
"""
from django.test import TestCase
from ietf.utils import TestCase
class SimpleTest(TestCase):

View file

@ -1,6 +1,6 @@
from django.db import connection
from django.core.urlresolvers import reverse
from django.test import TestCase
from ietf.utils import TestCase
from django.contrib.auth.models import User
from ietf.group.models import Group
@ -22,7 +22,8 @@ AD_USER=''
class MainTestCase(TestCase):
fixtures = ['names']
# See ietf.utils.test_utils.TestCase for the use of perma_fixtures vs. fixtures
perma_fixtures = ['names']
# ------- Test View -------- #
def test_main(self):
@ -34,22 +35,20 @@ class MainTestCase(TestCase):
class DummyCase(TestCase):
name = connection.settings_dict['NAME']
print name
class UnauthorizedCase(TestCase):
fixtures = ['names']
perma_fixtures = ['names']
def test_unauthorized(self):
"Unauthorized Test"
draft = make_test_data()
url = reverse('announcement')
# get random working group chair
person = Person.objects.filter(role__group__type='wg')[0]
person = Person.objects.filter(role__group__acronym='mars')[0]
r = self.client.get(url,REMOTE_USER=person.user)
self.assertEquals(r.status_code, 403)
class SubmitCase(TestCase):
fixtures = ['names']
perma_fixtures = ['names']
def test_invalid_submit(self):
"Invalid Submit"

Some files were not shown because too many files have changed in this diff Show more