def _add_image(slide, placeholder_id, image_url, original_image_size=True): if not os.path.isfile(image_url): return None image_url = os_util.to_actual_file(image_url, __file__) placeholder = slide.placeholders[placeholder_id] if original_image_size: # Calculate the image size of the image try: im = os_util.open_image(image_url) width, height = im.size # Make sure the placeholder doesn't zoom in placeholder.height = height placeholder.width = width # Insert the picture try: placeholder = placeholder.insert_picture(image_url) except (ValueError, XMLSyntaxError) as e: traceback.print_exc(file=sys.stdout) print('_add_image error: {}'.format(e)) return None # Calculate ratios and compare image_ratio = width / height placeholder_ratio = placeholder.width / placeholder.height ratio_difference = placeholder_ratio - image_ratio # Placeholder width too wide: if ratio_difference > 0: difference_on_each_side = ratio_difference / 2 placeholder.crop_left = -difference_on_each_side placeholder.crop_right = -difference_on_each_side # Placeholder height too high else: difference_on_each_side = -ratio_difference / 2 placeholder.crop_bottom = -difference_on_each_side placeholder.crop_top = -difference_on_each_side return placeholder except FileNotFoundError as fnfe: traceback.print_exc(file=sys.stdout) print('_add_image file not found: {}'.format(fnfe)) return None else: try: return placeholder.insert_picture(image_url) except OSError or ValueError: traceback.print_exc(file=sys.stdout) print("Unexpected error inserting image:", image_url, ":", sys.exc_info()[0]) return None
def setUp(self): random.seed(1) self.default_args = mock.Mock() self.default_args.configure_mock(topic="cat") self.default_args.configure_mock(num_slides=3) self.default_args.configure_mock(schema="default") self.default_args.configure_mock(title=None) self.default_args.configure_mock(parallel=True) self.default_args.configure_mock( output_folder=os_util.to_actual_file("../output/test/")) self.default_args.configure_mock(open_ppt=False) self.default_args.configure_mock(save_ppt=True) self.default_args.configure_mock(int_seed=123)
def test_parallel(self): arguments = mock.Mock() arguments.configure_mock(topic='dog') arguments.configure_mock(num_slides=3) arguments.configure_mock(schema='test') arguments.configure_mock(parallel=True) arguments.configure_mock( output_folder=os_util.to_actual_file("../output/test/", __file__)) arguments.configure_mock(open_ppt=False) arguments.configure_mock(save_ppt=True) ppt = run.main(arguments) self.assertEqual(3, len(ppt.slides))
def get_random_inspirobot_image(_): # Generate a random url to access inspirobot dd = str(random.randint(1, 73)).zfill(2) nnnn = random.randint(0, 9998) inspirobot_url = ('http://generated.inspirobot.me/' '0{}/aXm{}xjU.jpg').format(dd, nnnn) # Download the image image_url = os_util.to_actual_file( '../downloads/inspirobot/{}-{}.jpg'.format(dd, nnnn), __file__) os_util.download_image(inspirobot_url, image_url) return image_url
def get_related_giphy(seed_word): if bool(seed_word): response = giphy.random(tag=seed_word) else: response = giphy.random() if bool(response): data = response.get('data') if bool(data): images = data.get('images') original = images.get('original') giphy_url = original.get('url') gif_name = os.path.basename(os.path.dirname(giphy_url)) image_url = os_util.to_actual_file('../downloads/giphy/' + str(seed_word) + "/" + gif_name + ".gif", __file__) os_util.download_image(giphy_url, image_url) return image_url
def get_powerpoint_template_file(): return os_util.to_actual_file(_POWERPOINT_TEMPLATE_FILE, __file__)
def __init__(self, tracery_json, variable="origin"): with open(os_util.to_actual_file(tracery_json, __file__)) as grammar_file: grammar = get_tracery_grammar(grammar_file) grammar.add_modifiers(base_english) self._grammar = grammar self._variable = variable
def createTraceryGenerator(file, main="origin"): actual_file = os_util.to_actual_file(file, __file__) return text_generator.TraceryTextGenerator(actual_file, main).generate
def createTemplatedTextGenerator(file): actual_file = os_util.to_actual_file(file, __file__) return text_generator.TemplatedTextGenerator(actual_file).generate
def __call__(self, url): return os_util.to_actual_file( "../../downloads/shitpostbot/{}".format( os_util.get_file_name(url)), __file__)
def __call__(self, url): return os_util.to_actual_file( "../../downloads/reddit/" + self._subreddit + "/" + os_util.get_file_name(url), __file__)
generate_google_image_from_word = FromListGenerator( InvalidImagesRemoverGenerator(google_images.ImageGenerator())) # OLD/VINTAGE vintage_person_generator = create_reddit_image_generator("OldSchoolCool") vintage_picture_generator = create_reddit_image_generator( "TheWayWeWere", "100yearsago", "ColorizedHistory") reddit_book_cover_generator = create_reddit_image_generator( "BookCovers", "fakebookcovers", "coverdesign", "bookdesign") reddit_location_image_generator = create_reddit_image_generator( "evilbuildings", "itookapicture", "SkyPorn", "EarthPorn") # BOLD_STATEMENT bold_statement_templated_file = os_util.to_actual_file( '../../data/text-templates/bold_statements.txt', __file__) bold_statement_templated_generator = createTemplatedTextGenerator( bold_statement_templated_file) def generate_wikihow_bold_statement(presentation_context): # template_values = { # "topic": seed, # # TODO: Use datamuse or conceptnet or some other mechanism of finding a related location # 'location': 'Here' # } template_values = presentation_context # TODO: Sometimes "Articles Form Wikihow" is being scraped as an action, this is a bug related_actions = wikihow.get_related_wikihow_actions( presentation_context["seed"]) if related_actions:
# SPLITTER class SplitCaptionsGenerator(object): def __init__(self, generator): self._generator = generator def __call__(self, presentation_context): line = self._generator(presentation_context) parts = line.split("|") return parts # BOLD STATEMENT bold_statement_templated_file = os_util.to_actual_file( "data/text-templates/bold_statements.txt") bold_statement_templated_generator = create_templated_text_generator( bold_statement_templated_file) def generate_wikihow_bold_statement(presentation_context): seed = presentation_context["seed"] template_values = presentation_context related_actions = wikihow.get_related_wikihow_actions(seed) if related_actions: action = random.choice(related_actions) template_values.update({"action": action.title(), "seed": seed}) return bold_statement_templated_generator(template_values)