def outputfilter_watermark(filter): s_in = None s_out = None try: s_in = StringIO(filter.read()) im_in = Image.open(s_in) if im_in.size[0] <= 240 and im_in.size[1] <= 120: filter.write(s_in.getvalue()) return # if this is a sub request, then don't process again req = filter.req if req.main: filter.write(s_in.getvalue()) return cookies = Cookie.get_cookies(req) ticket = cookies['login_ticket'].value query = req.parsed_uri[apache.URI_QUERY] if query == "watermark=false": filter.write(s_in.getvalue()) ticket_sobj = Ticket.get_by_valid_key(ticket) # if this is not a valid ticket, then just exit with no image if not ticket_sobj: return # TODO: need fancier algorithm here if ticket_sobj.get_value("login") == 'admin': filter.write(s_in.getvalue()) return sizex = im_in.size[0] sizey = im_in.size[1] max_res = 240 max_width = 640 im_in = im_in.resize((max_res, int(sizey / (sizex / float(max_res))))) im_in = im_in.resize( (max_width, int(sizey / (sizex / float(max_width))))) # add the watermark watermark = Watermark() now = datetime.today().strftime("%Y/%m/%d, %H:%M") texts = ['Do Not Copy', ticket, now] sizes = [20, 10, 10, 20, 20] mark = watermark.generate(texts, sizes) im_out = watermark.execute(im_in, mark, 'tile', 0.5) s_out = StringIO() im_out.save(s_out, format='jpeg') filter.write(s_out.getvalue()) finally: if s_in: s_in.close() if s_out: s_out.close()
def init(my): my.is_refresh = my.kwargs.get("refresh") my.search_key = my.kwargs.get("search_key") my.ticket_key = my.kwargs.get("ticket") my.parent_key = my.kwargs.get("parent_key") my.expression = my.kwargs.get("expression") # This assumed parent can cause errors as it tries to find a # relationship between to stypes that don't exist ... or worse, # try to bind them when one stype does not have the sufficent columns # ie: pipeline_code #if not my.parent_key: # project = Project.get() # my.parent_key = project.get_search_key() my.code = my.kwargs.get("code") sobject = None if my.search_key: sobject = Search.get_by_search_key(my.search_key) my.search_id = sobject.get_id() my.search_type = sobject.get_base_search_type() if sobject.is_insert(): my.mode = 'insert' else: my.mode = 'edit' elif my.expression: sobject = Search.eval(my.expression, single=True) my.search_id = sobject.get_id() my.search_type = sobject.get_base_search_type() my.mode = 'edit' elif my.ticket_key: from pyasm.security import Ticket, Login ticket = Ticket.get_by_valid_key(my.ticket_key) if not ticket: raise TacticException("No valid ticket") login_code = ticket.get_value("login") login = Login.get_by_code(login_code) my.search_type = "sthpw/login" my.search_id = login.get_id() my.mode = 'edit' elif my.code: my.search_type = my.kwargs.get("search_type") search = Search(my.search_type) search.add_filter("code", my.code) sobject = search.get_sobject() my.search_id = sobject.get_id() my.search_type = sobject.get_base_search_type() my.mode = 'edit' else: my.search_type = my.kwargs.get("search_type") my.search_id = my.kwargs.get("search_id") if not my.search_id: my.search_id = -1 my.search_id = int(my.search_id) if my.search_id != -1: my.mode = "edit" else: my.mode = "insert" # explicit override if my.kwargs.get("mode"): my.mode = my.kwargs.get("mode") my.view = my.kwargs.get("view") if not my.view: my.view = my.kwargs.get("config_base") if not my.view: my.view = "edit" default_data = my.kwargs.get('default') if not default_data: default_data = {} elif isinstance(default_data, basestring): try: default_data = jsonloads(default_data) except: #may be it's regular dictionary try: default_data = eval(default_data) except: print "Warning: Cannot evaluate [%s]" %default_data default_data = {} if sobject: my.set_sobjects([sobject], None) else: my.do_search() # TODO: get_config() is going the right direction (less features) but the more complicated method is biased # towards edit and insert view.. and so it needs improvement as well if my.view not in ["insert", "edit"]: # try a new smaller way to get config only when an explicit view # is set my.config = my.get_config() else: my.config = WidgetConfigView.get_by_search_type(my.search_type, my.view, use_cache=False) # for inline config definitions config_xml = my.kwargs.get("config_xml") if config_xml: #from pyasm.common import Xml #xml = Xml() #xml.read_string(config_xml) #node = xml.get_node("config/%s" % my.view) #xml.set_attribute(node, "class", "tactic.ui.panel.EditWdg") #config = WidgetConfig.get(view=my.view, xml=xml) config_xml = config_xml.replace("&", "&") config = WidgetConfig.get(view="tab", xml=config_xml) my.config.insert_config(0, config) my.skipped_element_names = [] # if there is a layout view, then find the element names using that layout_view = my.kwargs.get("layout_view") if layout_view: layout_view = layout_view.replace("/", ".") search = Search("config/widget_config") search.add_filter("view", layout_view) layout_config = search.get_sobject() xml = layout_config.get_xml_value("config") my.element_names = xml.get_values("config//html//element/@name") else: my.element_names = my.config.get_element_names() ignore = my.kwargs.get("ignore") if isinstance(ignore, basestring): ignore = ignore.split("|") if not ignore: ignore = [] my.element_titles = [] my.element_descriptions = [] for element_name in my.element_names: my.element_titles.append( my.config.get_element_title(element_name) ) my.element_descriptions.append( my.config.get_element_description(element_name) ) #my.element_titles = my.config.get_element_titles() #my.element_descriptions = my.config.get_element_descriptions() # MongoDb # Default columns if not my.element_names: impl = SearchType.get_database_impl_by_search_type(my.search_type) if impl.get_database_type() == "MongoDb": my.element_names = impl.get_default_columns() my.element_titles = ['Code', 'Name', 'Description'] my.element_descriptions = ['Code', 'Name', 'Description'] my.input_prefix = my.kwargs.get('input_prefix') if not my.input_prefix: my.input_prefix = 'edit' security = Environment.get_security() default_access = "edit" project_code = Project.get_project_code() for i, element_name in enumerate(my.element_names): if element_name in ignore: my.skipped_element_names.append(element_name) continue # check security access access_key2 = { 'search_type': my.search_type, 'project': project_code } access_key1 = { 'search_type': my.search_type, 'key': element_name, 'project': project_code } access_keys = [access_key1, access_key2] is_editable = security.check_access('element', access_keys, "edit", default=default_access) if not is_editable: my.skipped_element_names.append(element_name) continue widget = my.config.get_display_widget(element_name, kbd_handler=False) # some element could be disabled due to its data_type e.g. sql_timestamp if not widget: my.skipped_element_names.append(element_name) continue widget.set_sobject(my.sobjects[0]) default_value = default_data.get(element_name) if default_value: widget.set_value(default_value) attrs = my.config.get_element_attributes(element_name) editable = widget.is_editable() if editable: editable = attrs.get("edit") editable = editable != "false" if not editable: my.skipped_element_names.append(element_name) continue # set parent widget.set_parent_wdg(my) # set parent_key in insert mode for now if my.mode =='insert' and my.parent_key: widget.set_option('parent_key', my.parent_key) title = my.element_titles[i] if title: widget.set_title(title) my.widgets.append(widget) description = my.element_descriptions[i] widget.add_attr("title", description)
def outputfilter_watermark(filter): s_in = None s_out = None try: s_in = StringIO(filter.read()) im_in = Image.open(s_in) if im_in.size[0] <= 240 and im_in.size[1] <= 120: filter.write(s_in.getvalue()) return # if this is a sub request, then don't process again req = filter.req if req.main: filter.write(s_in.getvalue()) return cookies = Cookie.get_cookies(req) ticket = cookies['login_ticket'].value query = req.parsed_uri[apache.URI_QUERY] if query == "watermark=false": filter.write(s_in.getvalue()) ticket_sobj = Ticket.get_by_valid_key(ticket) # if this is not a valid ticket, then just exit with no image if not ticket_sobj: return # TODO: need fancier algorithm here if ticket_sobj.get_value("login") == 'admin': filter.write(s_in.getvalue()) return sizex = im_in.size[0] sizey = im_in.size[1] max_res = 240 max_width = 640 im_in = im_in.resize( (max_res, int(sizey/(sizex/float(max_res)))) ) im_in = im_in.resize( (max_width, int(sizey/(sizex/float(max_width)))) ) # add the watermark watermark = Watermark() now = datetime.today().strftime("%Y/%m/%d, %H:%M") texts = ['Do Not Copy', ticket, now] sizes = [20, 10, 10, 20, 20] mark = watermark.generate(texts, sizes) im_out = watermark.execute(im_in, mark, 'tile', 0.5) s_out = StringIO() im_out.save(s_out, format='jpeg') filter.write(s_out.getvalue()) finally: if s_in: s_in.close() if s_out: s_out.close()