def write_types_list(types_dict, location): with open(location, 'w') as f: writer = mg.Writer(f) for type_name in types_dict: member = types_dict[type_name].type_member full_name = symbol_from_member(member) writer.write_heading(f"[[{full_name}|{type_name}]]", 4) writer.writeline(summary_from_member(member)) writer.writeline( mg.emphasis("Note: This file was automatically generated"))
def main(): """Create README.""" if os.path.isfile('README.md'): readme = overwrite() else: readme = 'README.md' with open(readme, 'w') as f: w = mg.Writer(f) w.write_heading(user_data['project_name'], 1) w.write_hrule() # Description and Key Features if badge: w.writeline(badge) w.writeline() w.writeline('Version: ' + mg.emphasis(setup_dict['version'])) w.writeline() w.writeline(setup_dict['description']) key_features = mg.List() key_features.append('Feature #1') key_features.append('Feature #2') key_features.append('Feature #3') w.write(key_features) # AUTHORS w.write_heading('Authors', 3) w.write_hrule() authors = mg.List() for i in range(len(setup_dict['author'])): authors.append( mg.link(user_data['project_user_profile_url'], setup_dict['author'][i])) w.write(authors) # DEPENDENCIES w.write_heading('Dependencies', 3) w.write_hrule() deps = mg.List() for dep in dependencies: deps.append(dep) w.write(deps) if args.verbose: # DOCS w.write_heading('Documentation', 3) w.write_hrule() w.writeline('Additional documentation can be found at: {}'.format( 'http://write-me.readthedocs.io/en/stable/')) w.write_heading('Getting Started', 3) w.write_hrule() w.write_heading('Getting Started', 3) # GETTING STARTED: Installation requirements w.write_heading(mg.emphasis('Prerequisites'), 5) prereqs = mg.List() prereqs.append( mg.link('https://www.python.org/downloads/', 'python (3.6+)')) prereqs.append(mg.link('https://pip.pypa.io/en/stable/', 'pip')) prereqs.append(mg.link('https://git-scm.com/', 'git')) w.write(prereqs) # GETTING STARTED: Cloning/VE Instructions w.write_heading(mg.emphasis('Installation'), 5) w.writeline( 'First, clone the project repo from Github. Then, change directories into the cloned repository. To accomplish this, execute these commands:' ) w.writeline() w.writeline('`$ git clone {}.git`'.format(user_data['url'])) w.writeline() w.writeline('`$ cd {}`'.format(user_data['project_name'])) w.writeline() w.writeline( 'Now now that you have cloned your repo and changed directories into the project, create a virtual environment named "ENV", and install the project requirements into your VE.' ) w.writeline() w.writeline('`$ python3 -m venv ENV`') w.writeline() w.writeline('`$ source ENV/bin/activate`') w.writeline() w.writeline('`$ pip install -r requirements.txt`') if args.django: # GETTING STARTED: Serving the App (Django) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['django']['instructions']) w.writeline(serving_options['django']['serve_command']) w.writeline(serving_options['django']['hosting']) elif args.pyramid: # GETTING STARTED: Serving the App (Pyramid) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['pyramid']['instructions']) w.writeline(serving_options['pyramid']['serve_command']) w.writeline(serving_options['pyramid']['hosting']) elif args.flask: # GETTING STARTED: Serving the App (Flask) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['flask']['instructions']) w.writeline(serving_options['flask']['serve_command']) w.writeline(serving_options['flask']['hosting']) # TESTS: Running & Files w.write_heading('Test Suite', 3) w.write_hrule() if len(test_dict.keys()) > 0: w.write_heading(mg.emphasis('Running Tests'), 5) w.writeline( 'This application uses {} as a testing suite. To run tests, run:' .format(mg.link(test_options[testing_mod][0], testing_mod))) w.writeline() w.writeline('`{}`'.format(test_options[testing_mod][1])) w.writeline() w.writeline('To view test coverage, run:') w.writeline() w.writeline('`{}`'.format(test_options[testing_mod][2])) w.write_heading(mg.emphasis('Test Files'), 5) w.writeline('The testing files for this project are:') w.writeline() test_table = mg.Table() test_table.add_column('File Name', mg.Alignment.CENTER) test_table.add_column('Description', mg.Alignment.CENTER) for key, val in test_dict.items(): test_table.append('`{}`'.format(key), val) w.write(test_table) # URLS - table if args.django or args.pyramid or args.flask: w.write_heading('URLs', 3) w.write_hrule() w.writeline( 'The URLS for this project can be found in the following modules:' ) w.writeline() urls_table = mg.Table() urls_table.add_column('URL module', mg.Alignment.CENTER) urls_table.add_column('Description', mg.Alignment.CENTER) for key, val in url_dict.items(): urls_table.append(key, val) w.write(urls_table) else: w.writeline('This repository contains no tests.') # APPLICATIONS (Django) -v if args.django and args.verbose: w.write_heading('Django Apps', 3) w.write_hrule() models_list = mg.List() for model in settings_dict['INSTALLED_APPS']: if "django.contrib" not in model: models_list.append(model) w.write(models_list) # TOOLS w.write_heading('Development Tools', 3) w.write_hrule() tools_list = mg.List() tools_list.append('{} - programming language'.format( mg.emphasis('python'))) if os.path.isfile('requirements.txt'): with open('requirements.txt', 'r') as f: reqs = [] for line in f: line = line.strip() reqs.append(line) reqs = [i.split('==')[0] for i in reqs] for package in reqs: if package.lower() in frameworks: tools_list.append('{} - web framework'.format( mg.emphasis(package.lower()))) elif package.lower() in dbms: tools_list.append('{} - DB management system'.format( mg.emphasis(package.lower()))) elif package.lower() in languages: tools_list.append('{} - programming language'.format( mg.emphasis(package.lower()))) w.write(tools_list) if args.verbose: # CONTRIBUTIONS w.write_heading('Contributions', 3) w.write_hrule() w.writeline( 'If you wish to contribute to this project, please contact {}.' .format(setup_dict['author_email'])) # LICENSE w.write_heading('License', 3) w.write_hrule() w.writeline(license) # ACKNOWLEDGEMENTS w.write_heading('Acknowledgements', 3) w.write_hrule() shoutouts = mg.List() shoutouts.append('Coffee') w.write(shoutouts) w.writeline( mg.emphasis('This README was generated using ' + mg.link( 'https://github.com/chelseadole/write-me', 'writeme.'))) return """
def main(): """Create README.""" if os.path.isfile('README.md'): readme = overwrite() else: readme = 'README.md' with open(readme, 'w') as f: w = mg.Writer(f) w.write_heading(user_data['project_name'], 1) w.write_hrule() # Description and Key Features w.write_heading('Description', 3) if badge: w.writeline(badge) w.writeline() w.writeline('Version: ' + mg.emphasis(setup_dict['version'])) w.writeline() w.writeline(setup_dict['description']) key_features = mg.List() key_features.append('Feature #1') key_features.append('Feature #2') key_features.append('Feature #3') w.write(key_features) # AUTHORS w.write_heading('Authors', 3) w.write_hrule() authors = mg.List() for i in range(len(setup_dict['author'])): authors.append(mg.link(user_data['url'], setup_dict['author'][i])) w.write(authors) if len(dependencies) > 0: # DEPENDENCIES w.write_heading('Dependencies', 3) w.write_hrule() deps = mg.List() for dep in dependencies: deps.append(dep) if args.django and "django" not in dependencies: deps.append("Django") elif args.pyramid and "pyramid" not in dependencies: deps.append("Pyramid") elif args.flask and "flask" not in dependencies: deps.append("Flask") w.write(deps) if args.verbose: # DOCS w.write_heading('Documentation', 3) w.write_hrule() w.writeline( 'Additional documentation can be found at: YOUR DOC SITE HERE') w.write_heading('Getting Started', 3) w.write_hrule() # GETTING STARTED: Installation requirements w.write_heading(mg.emphasis('Prerequisites'), 5) prereqs = mg.List() prereqs.append( mg.link('https://www.python.org/downloads/', 'python (3.6+)')) prereqs.append(mg.link('https://pip.pypa.io/en/stable/', 'pip')) prereqs.append(mg.link('https://git-scm.com/', 'git')) w.write(prereqs) # GETTING STARTED: Cloning/VE Instructions w.write_heading(mg.emphasis('Installation'), 5) w.writeline( 'First, clone the project repo from Github. Then, change directories into the cloned repository. To accomplish this, execute these commands:' ) w.writeline() w.writeline('`$ git clone {}.git`'.format(user_data['url'])) w.writeline() w.writeline('`$ cd {}`'.format(user_data['project_name'])) w.writeline() w.writeline( 'Now now that you have cloned your repo and changed directories into the project, create a virtual environment named "ENV", and install the project requirements into your VE.' ) w.writeline() w.writeline('`$ python3 -m venv ENV`') w.writeline() w.writeline('`$ source ENV/bin/activate`') w.writeline() w.writeline('`$ pip install -r requirements.txt`') if os.path.isfile('requirements.txt'): with open('requirements.txt', 'r') as f: reqs = [] for line in f: line = line.strip() reqs.append(line) reqs = [i.split('==')[0] for i in reqs] if args.django and "psycopg2" in reqs: # Additional Django setup requirements using PostgreSQL w.writeline() w.writeline( 'Open PostgreSQL using the `psql` command from your Terminal.' ) w.writeline( 'Create a PostgreSQL Database, called YOUR DBNAME HERE, using following command:' ) w.writeline() w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`') w.writeline() w.writeline( 'Now that your database exists, you can migrate this project\'s data into it. Outside of the PostgreSQL commandline, on the same level as your `manage.py` file, run:' ) w.writeline('`$ ./manage.py migrate`') w.writeline() elif args.django and "mymssql" in reqs: # Additional Django setup requirements using MySQL w.writeline() w.writeline( 'Open MySQL using the `psql` command from your Terminal, with your personal user data.' ) w.writeline( 'Create a PostgreSQL Database, called YOUR DBNAME HERE, using following command:' ) w.writeline() w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`') w.writeline() w.writeline( 'Now that your database exists, you can migrate this project\'s data into it. Outside of the MySQL commandline, on the same level as your `manage.py` file, run:' ) w.writeline('`$ ./manage.py migrate`') w.writeline() elif args.django and "cx_Oracle" in reqs: # Additional Django setup requirements using Oracle w.writeline() w.writeline( 'Open Oracle using the `sqlplus` command from your Terminal.' ) w.writeline( 'Create an Oracle Database, called YOUR DBNAME HERE, using following command:' ) w.writeline() w.writeline('`USER=# CREATE DATABASE ~YOUR DB NAME HERE~;`') w.writeline() w.writeline( 'Now that your database exists, you can migrate this project\'s data into it. Outside of the Oracle commandline, on the same level as your `manage.py` file, run:' ) w.writeline('`$ ./manage.py migrate`') w.writeline() if args.django: # GETTING STARTED: Serving the App (Django) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['django']['instructions']) w.writeline(serving_options['django']['serve_command']) w.writeline(serving_options['django']['hosting']) elif args.pyramid: # GETTING STARTED: Serving the App (Pyramid) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['pyramid']['instructions']) w.writeline(serving_options['pyramid']['serve_command']) w.writeline(serving_options['pyramid']['hosting']) elif args.flask: # GETTING STARTED: Serving the App (Flask) w.write_heading(mg.emphasis('Serving Locally'), 5) w.writeline(serving_options['flask']['instructions']) w.writeline(serving_options['flask']['serve_command']) w.writeline(serving_options['flask']['hosting']) # TESTS: Running & Files w.write_heading('Test Suite', 3) w.write_hrule() if len(test_dict.keys()) > 0: w.write_heading(mg.emphasis('Running Tests'), 5) if args.django: w.writeline( 'This is a Django application, and therefore to run tests, run the following command at the same level as `./manage.py`.' ) w.writeline() w.writeline('`./manage.py test`') else: w.writeline( 'This application uses {} as a testing suite. To run tests, run:' .format(mg.link(test_options[testing_mod][0], testing_mod))) w.writeline() w.writeline('`{}`'.format(test_options[testing_mod][1])) w.writeline() w.writeline('To view test coverage, run:') w.writeline() w.writeline('`{}`'.format(test_options[testing_mod][2])) w.write_heading(mg.emphasis('Test Files'), 5) w.writeline('The testing files for this project are:') w.writeline() test_table = mg.Table() test_table.add_column('File Name', mg.Alignment.CENTER) test_table.add_column('Description', mg.Alignment.CENTER) for key, val in test_dict.items(): test_table.append('`{}`'.format(key), val) w.write(test_table) else: w.writeline('This repository contains no tests.') # URLS - table if args.django or args.pyramid or args.flask: w.write_heading('URLs', 3) w.write_hrule() w.writeline( 'The URLS for this project can be found in the following modules:' ) w.writeline() urls_table = mg.Table() urls_table.add_column('URL module', mg.Alignment.CENTER) urls_table.add_column('Description', mg.Alignment.CENTER) for key, val in url_dict.items(): urls_table.append(key, val) w.write(urls_table) # APPLICATIONS (Django) -v if args.django and args.verbose: w.write_heading('Django Apps', 3) w.write_hrule() models_list = mg.List() for model in settings_dict['INSTALLED_APPS']: if "django.contrib" not in model and "storages" not in model: models_list.append(model) w.write(models_list) # APPLICATIONS (Pyramid) if args.pyramid: w.write_heading('Pyramid Development Files', 3) w.write_hrule() w.writeline( 'Development files specific to the Pyramid web framework can be found in the following files:' ) pyr_table = mg.List() for key, val in pyramid_info.items(): pyr_table.append(key) w.write(pyr_table) # TOOLS w.write_heading('Development Tools', 3) w.write_hrule() tools_list = mg.List() tools_list.append('{} - programming language'.format( mg.emphasis('python'))) if os.path.isfile('requirements.txt'): with open('requirements.txt', 'r') as f: reqs = [] for line in f: line = line.strip() reqs.append(line) reqs = [i.split('==')[0] for i in reqs] for package in reqs: if package.lower() in frameworks: tools_list.append('{} - web framework'.format( mg.emphasis(package.lower()))) elif package.lower() in dbms: tools_list.append('{} - DB management system'.format( mg.emphasis(package.lower()))) w.write(tools_list) if args.verbose: # CONTRIBUTIONS w.write_heading('Contributions', 3) w.write_hrule() w.writeline( 'If you wish to contribute to this project, please contact {}.' .format(setup_dict['author_email'])) # LICENSE w.write_heading('License', 3) w.write_hrule() w.writeline(license) # ACKNOWLEDGEMENTS w.write_heading('Acknowledgements', 3) w.write_hrule() shoutouts = mg.List() shoutouts.append('Coffee') w.write(shoutouts) w.writeline( mg.emphasis('This README was generated using ' + mg.link( 'https://github.com/chelseadole/write-me', 'writeme.'))) print(""" README generated. User TODOs: * Add application highlights to bullet-point "Features" section * Add correct contributor Github URL links to "Authors" section * Populate "Acknowledgements" section Please review your new README, and complete any sections that require additional user input. """)
if __name__ == '__main__': with open('example.md', 'w') as f: writer = mg.Writer(f) writer.write('write()') writer.writeline() writer.writeline() writer.writeline('writeline()') writer.writelines(['writelines()1', 'writelines()2']) writer.write_hrule() writer.write_heading('heading1') for i in range(2, 7): writer.write_heading('heading{}'.format(i), i) writer.writeline(mg.emphasis('emphasis')) writer.writeline(mg.strong('strong')) writer.writeline(mg.strikethrough('strikethrough')) unordered = mg.List() unordered.append('unordered1') unordered.append(mg.emphasis('unordered2')) unordered.append('unordered3') writer.write(unordered) ordered = mg.List(ordered=True) unordered.append('ordered1') unordered.append(mg.emphasis('ordered2')) unordered.append('ordered3') writer.write(ordered)
def to_md(self, directory): md_path = os.path.join(directory, f"{self.type_name}.md") print(f"Writing {md_path}") with open(md_path, 'w') as f: writer = mg.Writer(f) full_name = symbol_from_member(self.type_member) writer.write_heading(inline_code(full_name), 4) writer.writeline(mg.emphasis(summary_from_member( self.type_member))) writer.write_hrule() # FIELDS writer.write_heading("Fields", 3) if len(self.fields) == 0: writer.writeline(mg.emphasis("None")) else: for field in self.fields: symbol = symbol_from_member(field) short_name = symbol.replace(full_name + ".", "") writer.writeline( inline_code(short_name) + ": " + \ summary_from_member(field)) # PROPERTIES writer.write_heading("Properties", 3) if len(self.properties) == 0: writer.writeline(mg.emphasis("None")) else: for prop in self.properties: symbol = symbol_from_member(prop) short_name = symbol.replace(full_name + ".", "") writer.writeline( inline_code(short_name) + ": " + summary_from_member(prop)) # METHODS writer.write_heading("Methods", 3) if len(self.methods) == 0: writer.writeline(mg.emphasis("None")) else: for method in self.methods: symbol = symbol_from_member(method) symbol = symbol.replace("#ctor", full_name) symbol = symbol.replace(",", ", ") symbol = symbol.replace("{", "<") symbol = symbol.replace("}", ">") symbol = symbol.replace("System.String", "string") symbol = symbol.replace("System.Int32", "int") symbol = symbol.replace("System.Single", "float") symbol = symbol.replace("System.Object", "object") if not symbol[-1] == ")": symbol += "()" writer.writeline(inline_code(symbol)) blockquote = mg.BlockQuote() blockquote.append(summary_from_member(method)) blockquote.append("") blockquote.append(mg.strong("Parameters")) blockquote.append("") params = [p for p in method if p.tag == "param"] pre = "* " if len(params) == 0: blockquote.append(mg.emphasis("None")) else: for param in params: param_name = param.attrib["name"] param_text = param.text if param.text is not None else "" blockquote.append(pre + inline_code(param_name) + ": " + param_text) blockquote.append("") writer.write(blockquote) writer.write_hrule() writer.writeline( mg.emphasis("Note: This file was automatically generated"))