def form_valid(self, form): """ collection input is good, update API backend. """ self.get_args() data = form.cleaned_data short_code = data.pop('short_code') data['id'] = short_code if re.compile('^[a-zA-Z0-9\-]+$').match(short_code): api = OclApi(self.request, debug=True) result = api.post(self.owner_type, self.owner_id, 'collections', **data) if not result.status_code == requests.codes.created: emsg = result.json().get('detail', None) if not emsg: for msg in result.json().get('__all__'): messages.add_message(self.request, messages.ERROR, msg) else: messages.add_message(self.request, messages.ERROR, emsg) return HttpResponseRedirect(self.request.path) messages.add_message(self.request, messages.INFO, _('Collection created')) if self.from_org: return HttpResponseRedirect(reverse("collection-home", kwargs={"org": self.org_id, 'collection': short_code})) else: return HttpResponseRedirect(reverse("collection-home", kwargs={"user": self.user_id, 'collection': short_code})) else: validator_template = ' Short Code \'%s\' is not valid. Allowed characters are : Alphabets(a-z,A-Z), Numbers(0-9) and Hyphen(-) ' messages.add_message(self.request, messages.ERROR, validator_template % short_code) return HttpResponseRedirect(self.request.path)
def test_user_update(self): """ Test user partial data update. Need to login first with hard coded password. """ ocl = OclApi(admin=True, debug=True) user = User.objects.create_user(username=self.username) user.password = self.password user.save() result = ocl.get_user_auth(user.username, user.password) print 'get auth:', result.status_code if len(result.text) > 0: print result.json() request = FakeRequest() ocl.save_auth_token(request, result.json()) ocl = OclApi(request, debug=True) print ocl.get('users', user.username).json() data = {'company': 'company one'} result = ocl.post('user', **data) print result.status_code if len(result.text) > 0: print result.json()
def test_user_update(self): """ Test user partial data update. Need to login first with hard coded password. """ ocl = OclApi(admin=True, debug=True) user = User.objects.create_user(username=self.username) user.password = self.password user.save() result = ocl.get_user_auth(user.username, user.password) print 'get auth:', result.status_code if len(result.text) > 0: print result.json() request = FakeRequest() ocl.save_auth_token(request, result.json()) ocl = OclApi(request, debug=True) print ocl.get('users', user.username).json() data = {'company': 'company one'} result = ocl.post('user', **data) print result.status_code if len(result.text) > 0: print result.json()
def form_valid(self, form): """ collection input is good, update API backend. """ print form.cleaned_data self.get_args() data = form.cleaned_data short_code = data.pop('short_code') data['id'] = short_code api = OclApi(self.request, debug=True) result = api.post(self.owner_type, self.owner_id, 'collections', **data) if not result.status_code == requests.codes.created: emsg = result.json().get('detail', 'Error') messages.add_message(self.request, messages.ERROR, emsg) return HttpResponseRedirect(self.request.path) messages.add_message(self.request, messages.INFO, _('Collection created')) if self.from_org: return HttpResponseRedirect(reverse("collection-home", kwargs={"org": self.org_id, 'collection': short_code})) else: return HttpResponseRedirect(reverse("collection-home", kwargs={"user": self.user_id, 'collection': short_code}))
def post(self, request, *args, **kwargs): """ Post the data """ self.get_all_args() data = {} try: print 'request json:', self.request_json for n in self.field_names: # Skipping over fields that are not given -- exception is never thrown now...?? v = self.request_json.get(n, None) if v is not None: data[n] = v except KeyError: resp = {u"message": _('Invalid input')} return self.render_bad_request_response(resp) api = OclApi(self.request, debug=True) if self.is_edit(): if self.item_name == 'mappings': result = api.put( self.owner_type, self.owner_id, 'sources', self.source_id, self.item_name, **data) else: result = api.put( self.owner_type, self.owner_id, 'sources', self.source_id, 'concepts', self.concept_id, self.item_name, self.item_id, **data) msg = _('updated') else: if self.item_name == 'mappings': result = api.post( self.owner_type, self.owner_id, 'sources', self.source_id, self.item_name, **data) else: result = api.post( self.owner_type, self.owner_id, 'sources', self.source_id, 'concepts', self.concept_id, self.item_name, **data) msg = _('added') if not result.ok: logger.warning('Update failed %s' % result.content) return self.render_bad_request_response(result.content) return self.render_json_response({'message': msg})
def post(self, request, *args, **kwargs): """ Post the data """ self.get_all_args() data = {} try: print 'request json:', self.request_json for n in self.field_names: # Skipping over fields that are not given -- exception is never thrown now...?? v = self.request_json.get(n, None) if v is not None: data[n] = v except KeyError: resp = {u"message": _('Invalid input')} return self.render_bad_request_response(resp) api = OclApi(self.request, debug=True) if self.is_edit(): if self.item_name == 'mappings': result = api.put( self.owner_type, self.owner_id, 'sources', self.source_id, self.item_name, **data) else: result = api.put( self.owner_type, self.owner_id, 'sources', self.source_id, 'concepts', self.concept_id, self.item_name, self.item_id, **data) msg = _('updated') else: if self.item_name == 'mappings': result = api.post( self.owner_type, self.owner_id, 'sources', self.source_id, self.item_name, **data) else: result = api.post( self.owner_type, self.owner_id, 'sources', self.source_id, 'concepts', self.concept_id, self.item_name, **data) msg = _('added') if not result.ok: logger.warning('Update failed %s' % result.content) return self.render_bad_request_response(result.content) return self.render_json_response({'message': msg})
def form_valid(self, form): """ User entry is good, update both web database and backend. """ print form.cleaned_data # only pass updatable fields to backend field_names = ('first_name', 'last_name', 'company', 'location') data = dict([(k, v) for k, v in form.cleaned_data.iteritems() if k in field_names]) api = OclApi(self.request) result = api.post('user', **data) print result.status_code if len(result.text) > 0: print result.json() messages.add_message(self.request, messages.INFO, _('User updated')) return HttpResponseRedirect(self.get_success_url())
def form_valid(self, form): """ User entry is good, update both web database and backend. """ print form.cleaned_data # only pass updatable fields to backend field_names = ('first_name', 'last_name', 'company', 'location') data = dict([(k, v) for k, v in form.cleaned_data.iteritems() if k in field_names]) api = OclApi(self.request) result = api.post('user', **data) print result.status_code if len(result.text) > 0: print result.json() messages.add_message(self.request, messages.INFO, _('User updated')) return HttpResponseRedirect(self.get_success_url())
class Command(BaseCommand): """ manage.py Command 'create_demo_data' """ help = 'Create demo data' option_list = BaseCommand.option_list + ( make_option('--username', action='store', dest='username', default=None, help='username for an existing user, e.g. demo1'), make_option('--org_id', action='store', dest='org_id', default=None, help='Organization ID, e.g. HLTH01'), make_option('--create', action='store_true', dest='create_mode', default=False, help='Create data.'), ) def __init__(self): super(Command, self).__init__() self.ocl = None self.username = None self.password = None self.web_host = os.environ['OCL_WEB_HOST'] self.ORG_ID = None self.locale_list = [d['code'] for d in _get_locale_list()] self.source_type_list = _get_source_type_list() self.concept_class_list = _get_concept_class_list() self.datatype_list = _get_datatype_list() def load_user(self, username): """ Load access info for specified username to create test data. :param username: is an existing user in the system. """ user = User.objects.get(username=username) print user.password self.username = username self.password = user.password def signup(self): """ Signup a new user via the web interface. Not ready for use yet. """ url = self.web_host + '/accounts/signup/' results = requests.get(url) csrf = results.cookies['csrftoken'] cookies = {'csrftoken': csrf} headers = {'X-CSRFToken': csrf} d = { 'csrfmiddlewaretoken': csrf, 'first_name': '', 'last_name': '', 'username': '', 'password1': '', 'password2': '', 'email': '', } results = requests.post(url, data=json.dumps(d), cookies=cookies, headers=headers) print results def login(self): """ Perform a login for the user to get authenticated access for subsequence create calls. """ self.ocl = OclApi(admin=True, debug=True) result = self.ocl.get_user_auth(self.username, self.password) print 'get auth:', result.status_code if len(result.text) > 0: print result.json() # now use a "normal" API interface, save the user's access permission self.request = FakeRequest() self.ocl.save_auth_token(self.request, result.json()) self.ocl = OclApi(self.request, debug=True) def make_source_name(self, n): """ Create source name. :param n: is a number. :returns: a source name based on the ORG_ID and n. """ return '%sS%d' % (self.ORG_ID, n) def make_concept_id(self, s, c): """ Create concept_id :param s: is a number, for source :param c: is a number, for concept :returns: a source name based on the ORG_ID,s and c. """ return '%s-S%d-C%d' % (self.ORG_ID, s, c) def create_orgs(self): """ Create one test org for our user """ data = { 'id': self.ORG_ID, 'name': 'Health Org %s' % self.ORG_ID, 'website': 'http://www.health%s.org' % self.ORG_ID, 'location': 'Boston, MA, USA' } print 'creating org %s' % self.ORG_ID result = self.ocl.create_org(data) print result def create_sources(self): """ Create sources for demo data """ for n in range(1, 11): n = self.make_source_name(n) data = { 'short_code': n, 'name': n, 'id': n, 'source_type': random.choice(self.source_type_list) } print 'creating source %s' % n result = self.ocl.create_source('orgs', self.ORG_ID, data) print result def create_concepts(self): """ Create concepts for demo data """ for s in range(1, 11): sid = self.make_source_name(s) for c in range(1, 21): concept_id = self.make_concept_id(s, c) data = { 'id': concept_id, 'concept_class': random.choice(self.concept_class_list), 'datatype': random.choice(self.datatype_list), } lc = random.choice(self.locale_list) name = { 'name': 'Concept %s Source %d C%d' % (self.ORG_ID, s, c), 'locale': lc, 'preferred': lc, } print 'creating concept %s' % concept_id result = self.ocl.create_concept('orgs', self.ORG_ID, sid, data, names=[name]) print result def update_concepts(self): """ Update concepts for demo data -- WHEN IS THIS USED? """ for s in range(1, 11): sid = self.make_source_name(s) for c in range(1, 21): concept_id = self.make_concept_id(s, c) data = { 'concept_class': random.choice(self.concept_class_list), 'datatype': random.choice(self.datatype_list), 'update_comment': 'testing update', } print 'updating concept %s' % concept_id result = self.ocl.update_concept('orgs', self.ORG_ID, sid, concept_id, data) print result def add_concept_data(self): """ Add names and descriptions """ for s in range(1, 11): sid = self.make_source_name(s) for c in range(1, 21): concept_id = self.make_concept_id(s, c) for v in ['one', 'two', 'three']: data = { 'name': '%s variant %s' % (concept_id, v), 'locale': random.choice(self.locale_list), } print 'adding name %s' % data['name'] result = self.ocl.post('orgs', self.ORG_ID, 'sources', sid, 'concepts', concept_id, 'names', **data) print result data = { 'description': 'description for %s variant %s' % (concept_id, v), 'locale': random.choice(self.locale_list), } print 'adding desc %s' % data['description'] result = self.ocl.post('orgs', self.ORG_ID, 'sources', sid, 'concepts', concept_id, 'descriptions', **data) print result def handle(self, *args, **options): create_mode = options['create_mode'] username = options['username'] if create_mode: if username is None: raise CommandError('--username is required.') self.ORG_ID = options['org_id'] if self.ORG_ID is None: raise CommandError('--org_id is required.') self.load_user(username) self.login() self.create_orgs() self.create_sources() self.create_concepts() self.add_concept_data() self.update_concepts()