def process_asset(): conn = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES) c = conn.cursor() if (request.POST.get('name', '').strip() and request.POST.get('uri', '').strip() and request.POST.get('mimetype', '').strip()): name = request.POST.get('name', '').decode('UTF-8') uri = request.POST.get('uri', '').strip() mimetype = request.POST.get('mimetype', '').strip() # Make sure it's a valid resource uri_check = urlparse(uri) if not (uri_check.scheme == "http" or uri_check.scheme == "https"): header = "Ops!" message = "URL must be HTTP or HTTPS." return template('message', header=header, message=message) if "image" in mimetype: file = req_get(uri) else: file = req_head(uri) # Only proceed if fetch was successful. if file.status_code == 200: asset_id = md5(name + uri).hexdigest() strict_uri = uri_check.scheme + "://" + uri_check.netloc + uri_check.path if "image" in mimetype: resolution = Image.open(StringIO(file.content)).size else: resolution = "N/A" if "video" in mimetype: duration = "N/A" start_date = "" end_date = "" duration = "" c.execute( "INSERT INTO assets (asset_id, name, uri, start_date, end_date, duration, mimetype) VALUES (?,?,?,?,?,?,?)", (asset_id, name, uri, start_date, end_date, duration, mimetype)) conn.commit() header = "Yay!" message = "Added asset (" + asset_id + ") to the database." return template('message', header=header, message=message) else: header = "Ops!" message = "Unable to fetch file." return template('message', header=header, message=message) else: header = "Ops!" message = "Invalid input." return template('message', header=header, message=message)
def process_asset(): conn = sqlite3.connect(database, detect_types=sqlite3.PARSE_DECLTYPES) c = conn.cursor() if (request.POST.get('name','').strip() and request.POST.get('uri','').strip() and request.POST.get('mimetype','').strip() ): name = request.POST.get('name','').decode('UTF-8') uri = request.POST.get('uri','').strip() mimetype = request.POST.get('mimetype','').strip() # Make sure it's a valid resource uri_check = urlparse(uri) if not (uri_check.scheme == "http" or uri_check.scheme == "https"): header = "Ops!" message = "URL must be HTTP or HTTPS." return template('message', header=header, message=message) if "image" in mimetype: file = req_get(uri) else: file = req_head(uri) # Only proceed if fetch was successful. if file.status_code == 200: asset_id = md5(name+uri).hexdigest() strict_uri = uri_check.scheme + "://" + uri_check.netloc + uri_check.path if "image" in mimetype: resolution = Image.open(StringIO(file.content)).size else: resolution = "N/A" if "video" in mimetype: duration = "N/A" start_date = "" end_date = "" duration = "" c.execute("INSERT INTO assets (asset_id, name, uri, start_date, end_date, duration, mimetype) VALUES (?,?,?,?,?,?,?)", (asset_id, name, uri, start_date, end_date, duration, mimetype)) conn.commit() header = "Yay!" message = "Added asset (" + asset_id + ") to the database." return template('message', header=header, message=message) else: header = "Ops!" message = "Unable to fetch file." return template('message', header=header, message=message) else: header = "Ops!" message = "Invalid input." return template('message', header=header, message=message)
def wait_for_splash_page(url): max_retries = 20 retries = 0 while retries < max_retries: fetch_head = req_head(url) if fetch_head.status_code == 200: break else: sleep(1) retries += 1 logging.debug('Waiting for splash-page. Retry %d') % retries
def process_asset(): if (request.POST.get('name','').strip() and request.POST.get('uri','').strip() and request.POST.get('mimetype','').strip() ): asset = Asset() asset.name = request.POST.get('name','').decode('UTF-8') asset.uri = request.POST.get('uri','').strip() asset.mimetype = request.POST.get('mimetype','').strip() # Make sure it's a valid resource uri_check = urlparse(asset.uri) #Support local assets both as /home/pi/image path #1.png and file:///home/pi/url%20path.png , Note special chars in absolute path. local_and_exists = ((uri_check.scheme == "" and path.exists(asset.uri)) or (uri_check.scheme == "file" and path.exists(uri_check.path))) if not (uri_check.scheme == "http" or uri_check.scheme == "https" or local_and_exists): header = "Ops!" message = "URL must be HTTP or HTTPS or absolute path to local file." return template('message', header=header, message=message) if not local_and_exists: file = req_head(asset.uri) # Only proceed if fetch was successful. if local_and_exists or file.status_code == 200: asset.asset_id = md5(asset.name + asset.uri).hexdigest() asset.start_date = "" asset.end_date = "" asset.duration = "" asset.INSERT(config) header = "Yay!" message = "Added asset (" + asset.asset_id + ") to the database." return template('message', header=header, message=message) else: header = "Ops!" message = "Unable to fetch file." return template('message', header=header, message=message) else: header = "Ops!" message = "Invalid input." return template('message', header=header, message=message)
def asset_is_accessible(uri): """ Determine if content is accessible or not. """ asset_folder = path.join(getenv('HOME'), 'screenly_assets') # If it's local content, just check if the file exist on disk. if ((asset_folder in uri) or (html_folder in uri) and path.exists(uri)): return True try: # Give up if we can't even get the header in five seconds. remote_asset_status = req_head(uri, timeout=5, allow_redirects=True).status_code if remote_asset_status == 200: return True else: return False except: return False
def prepare_asset(request): data = request.POST or request.FORM or {} if "model" in data: data = json.loads(data["model"]) def get(key): val = data.get(key, "") return val.strip() if isinstance(val, basestring) else val if all([get("name"), get("uri") or (request.files.file_upload != ""), get("mimetype")]): asset = {"name": get("name").decode("UTF-8"), "mimetype": get("mimetype"), "asset_id": get("asset_id")} uri = get("uri") or False if not asset["asset_id"]: asset["asset_id"] = uuid.uuid4().hex try: file_upload = request.files.file_upload filename = file_upload.filename except AttributeError: file_upload = None filename = None if filename and "web" in asset["mimetype"]: raise Exception("Invalid combination. Can't upload a web resource.") if uri and filename: raise Exception("Invalid combination. Can't select both URI and a file.") if uri and not uri.startswith("/"): if not validate_uri(uri): raise Exception("Invalid URL. Failed to add asset.") if "image" in asset["mimetype"]: file = req_get(uri, allow_redirects=True) else: file = req_head(uri, allow_redirects=True) if file.status_code == 200: asset["uri"] = uri # strict_uri = file.url else: raise Exception("Could not retrieve file. Check the asset URL.") else: asset["uri"] = uri if filename: asset["uri"] = path.join(settings.get_asset_folder(), asset["asset_id"]) with open(asset["uri"], "w") as f: while True: chunk = file_upload.file.read(1024) if not chunk: break f.write(chunk) if "video" in asset["mimetype"]: asset["duration"] = "N/A" else: # crashes if it's not an int. we want that. asset["duration"] = int(get("duration")) if get("start_date"): asset["start_date"] = datetime.strptime(get("start_date").split(".")[0], "%Y-%m-%dT%H:%M:%S") else: asset["start_date"] = "" if get("end_date"): asset["end_date"] = datetime.strptime(get("end_date").split(".")[0], "%Y-%m-%dT%H:%M:%S") else: asset["end_date"] = "" if not asset["asset_id"]: raise Exception if not asset["uri"]: raise Exception return asset else: raise Exception("Not enough information provided. Please specify 'name', 'uri', and 'mimetype'.")
def process_asset(): c = connection.cursor() if (request.POST.get('name', '').strip() and (request.POST.get('uri', '').strip() or request.files.file_upload.file) and request.POST.get('mimetype', '').strip() ): name = request.POST.get('name', '').decode('UTF-8') mimetype = request.POST.get('mimetype', '').strip() try: uri = request.POST.get('uri', '').strip() except: uri = False try: file_upload = request.files.file_upload.file except: file_upload = False # Make sure it is a valid combination if (file_upload and 'web' in mimetype): header = "Ops!" message = "Invalid combination. Can't upload web resource." return template('message', header=header, message=message) if (uri and file_upload): header = "Ops!" message = "Invalid combination. Can't select both URI and a file." return template('message', header=header, message=message) if uri: if not validate_uri(uri): header = "Ops!" message = "Invalid URL. Failed to add asset." return template('message', header=header, message=message) if "image" in mimetype: file = req_get(uri, allow_redirects=True) else: file = req_head(uri, allow_redirects=True) # Only proceed if fetch was successful. if file.status_code == 200: asset_id = md5(name + uri).hexdigest() strict_uri = file.url if "image" in mimetype: resolution = Image.open(StringIO(file.content)).size else: resolution = "N/A" if "video" in mimetype: duration = "N/A" else: header = "Ops!" message = "Unable to fetch file." return template('message', header=header, message=message) if file_upload: asset_id = md5(file_upload.read()).hexdigest() local_uri = path.join(asset_folder, asset_id) f = open(local_uri, 'w') asset_file_input = file_upload.read() f.write(asset_file_input) f.close() uri = local_uri start_date = "" end_date = "" duration = "" c.execute("INSERT INTO assets (asset_id, name, uri, start_date, end_date, duration, mimetype) VALUES (?,?,?,?,?,?,?)", (asset_id, name, uri, start_date, end_date, duration, mimetype)) connection.commit() header = "Yay!" message = "Added asset (" + asset_id + ") to the database." return template('message', header=header, message=message) else: header = "Ops!" message = "Invalid input." return template('message', header=header, message=message)
def prepare_asset(request): data = request.POST or request.FORM or {} if 'model' in data: data = json.loads(data['model']) def get(key): val = data.get(key, '') return val.strip() if isinstance(val, basestring) else val if all([ get('name'), get('uri') or (request.files.file_upload != ""), get('mimetype')]): asset = { 'name': get('name').decode('UTF-8'), 'mimetype': get('mimetype'), 'asset_id': get('asset_id'), } uri = get('uri') or False if not asset['asset_id']: asset['asset_id'] = uuid.uuid4().hex try: file_upload = request.files.file_upload filename = file_upload.filename except AttributeError: file_upload = None filename = None if filename and 'web' in asset['mimetype']: raise Exception("Invalid combination. Can't upload a web resource.") if uri and filename: raise Exception("Invalid combination. Can't select both URI and a file.") if uri and not uri.startswith('/'): actual_uri = tok_replace(uri) # [bknittel] Use actual_uri in tests below if not validate_uri(actual_uri): raise Exception("Invalid URL. Failed to add asset.") if "image" in asset['mimetype']: file = req_get(actual_uri, allow_redirects=True) else: file = req_head(actual_uri, allow_redirects=True) if file.status_code == 200: asset['uri'] = uri # strict_uri = file.url else: raise Exception("Could not retrieve file. Check the asset URL.") else: asset['uri'] = uri if filename: asset['uri'] = path.join(settings.get_asset_folder(), asset['asset_id']) with open(asset['uri'], 'w') as f: while True: chunk = file_upload.file.read(1024) if not chunk: break f.write(chunk) if "video" in asset['mimetype']: asset['duration'] = "N/A" else: # crashes if it's not an int. we want that. asset['duration'] = int(get('duration')) if get('start_date'): asset['start_date'] = datetime.strptime(get('start_date').split(".")[0], "%Y-%m-%dT%H:%M:%S") else: asset['start_date'] = "" if get('end_date'): asset['end_date'] = datetime.strptime(get('end_date').split(".")[0], "%Y-%m-%dT%H:%M:%S") else: asset['end_date'] = "" if not asset['asset_id']: raise Exception if not asset['uri']: raise Exception return asset else: raise Exception("Not enough information provided. Please specify 'name', 'uri', and 'mimetype'.")