From 585ebb88138ccf9d72decd897e0ad5fa00f36479 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Mon, 12 Dec 2022 19:00:42 -0600 Subject: remove force feature, unnecessary complexity --- src/pyssg/arg_parser.py | 4 ---- src/pyssg/builder.py | 26 +++----------------------- src/pyssg/database.py | 34 ++++++++++++---------------------- src/pyssg/database_entry.py | 7 +++---- src/pyssg/md_parser.py | 24 +++++------------------- src/pyssg/page.py | 2 +- src/pyssg/pyssg.py | 1 - 7 files changed, 24 insertions(+), 74 deletions(-) (limited to 'src') diff --git a/src/pyssg/arg_parser.py b/src/pyssg/arg_parser.py index b5d47b2..5b66697 100644 --- a/src/pyssg/arg_parser.py +++ b/src/pyssg/arg_parser.py @@ -30,10 +30,6 @@ def get_parser() -> ArgumentParser: help='''generates all HTML files by parsing MD files present in source directory and copies over manually written HTML files''') - parser.add_argument('-f', '--force', - action='store_true', - help='''force building all pages and not only the - updated ones''') parser.add_argument('--debug', action='store_true', help='''change logging level from info to debug''') diff --git a/src/pyssg/builder.py b/src/pyssg/builder.py index f7537d6..582eb74 100644 --- a/src/pyssg/builder.py +++ b/src/pyssg/builder.py @@ -58,9 +58,7 @@ class Builder: self.html_files: list[str] # files and pages are synoyms - # TODO: include updated_tags when when implemented self.all_files: list[Page] - self.updated_files: list[Page] self.all_tags: list[tuple[str, str]] self.common_vars: dict @@ -94,7 +92,6 @@ class Builder: # just so i don't have to pass these vars to all the functions self.all_files = parser.all_files - self.updated_files = parser.updated_files self.all_tags = parser.all_tags # TODO: check if need to pass dirs.dir_path.files @@ -147,31 +144,14 @@ class Builder: for file in self.html_files: src_file = os.path.join(self.dir_cfg['src'], file) dst_file = os.path.join(self.dir_cfg['dst'], file) - # always copy on force - if self.config['info']['force']: - log.debug('copying "%s"; forced', file) - copy_file(src_file, dst_file) - continue - # only copy files if they have been modified (or are new) - if self.db.update(src_file, remove=f'{self.dir_cfg["src"]}/'): - log.debug('copying "%s"; has been modified or is new', file) - copy_file(src_file, dst_file) - continue - log.debug('ignoring "%s"; hasn\'t been modified, not forced', file) + log.debug('copying "%s"', file) + copy_file(src_file, dst_file) def __render_pages(self, template_name: str) -> None: log.debug('rendering pages with template "%s"', template_name) page_vars: dict = deepcopy(self.common_vars) - temp_pages: list[Page] - # check if only updated should be created - if self.config['info']['force']: - log.debug('all html will be rendered, force is set to true') - temp_pages = self.all_files - else: - log.debug('only updated or new html will be rendered') - temp_pages = self.updated_files - for p in temp_pages: + for p in self.all_files: p_fname: str = p.name.replace('.md', '.html') log.debug('adding page "%s" to exposed vars for jinja', p_fname) page_vars['page'] = p diff --git a/src/pyssg/database.py b/src/pyssg/database.py index d9c6467..40065ef 100644 --- a/src/pyssg/database.py +++ b/src/pyssg/database.py @@ -19,31 +19,25 @@ class Database: self.db_path: str = db_path self.e: dict[str, DatabaseEntry] = dict() - # updates the tags for a specific entry (file) - # file_name only contains the entry name (not an absolute path) - # TODO: make the function return true/false if updated def update_tags(self, file_name: str, new_tags: list[str]) -> None: # technically, I should ensure this function can only run if self.e is populated if file_name in self.e: log.debug('updating tags for entry "%s"', file_name) - log.debug('entry "%s" old content: %s', + log.debug('entry "%s" old tags: %s', file_name, self.e[file_name]) self.e[file_name].update_tags(new_tags) - log.debug('entry "%s" new content: %s', + log.debug('entry "%s" new tags: %s', file_name, self.e[file_name]) else: log.error('can\'t update tags for entry "%s",' ' as it is not present in db', file_name) sys.exit(1) - # returns a bool that indicates if the entry - # was (includes new entries) or wasn't updated def update(self, file_name: str, - remove: str='') -> bool: + remove: str='') -> None: log.debug('updating entry for file "%s"', file_name) - # initial default values f: str = file_name tags: list[str] = [] if remove != '': @@ -52,20 +46,20 @@ class Database: # get current time, needs actual file name time: float = os.stat(file_name).st_mtime - log.debug('modified time for "%s": %s', file_name, time) + log.debug('time for "%s": %s', file_name, time) # calculate current checksum, also needs actual file name checksum: str = get_checksum(file_name) - log.debug('current checksum for "%s": "%s"', file_name, checksum) + log.debug('checksum for "%s": "%s"', file_name, checksum) - # two cases, 1) entry didn't exist, + # three cases, 1) entry didn't exist, # 2) entry has been mod and, # 3) entry hasn't been mod #1) if f not in self.e: log.debug('entry "%s" didn\'t exist, adding with defaults', f) self.e[f] = DatabaseEntry([f, time, 0.0, checksum, tags]) - return True + return # old_e is old entity old_e: DatabaseEntry = self.e[f] @@ -73,25 +67,21 @@ class Database: # 2) if checksum != old_e.checksum: - if old_e.mtimestamp == 0.0: - log.debug('entry "%s" has been modified for the first' - ' time, updating', f) - else: - log.debug('entry "%s" has been modified, updating', f) + log.debug('entry "%s" has been modified, updating', f) self.e[f] = DatabaseEntry([f, old_e.ctimestamp, time, checksum, tags]) log.debug('entry "%s" new content: (%s, %s, %s, (%s))', f, self.e[f]) - return True + return # 3) else: log.debug('entry "%s" hasn\'t been modified', f) - return False + return def write(self) -> None: log.debug('writing db') with open(self.db_path, 'w') as file: + csv_writer = csv.writer(file, delimiter=self.__COLUMN_DELIMITER) for _, v in self.e.items(): log.debug('writing row: %s', v) - csv_writer = csv.writer(file, delimiter=self.__COLUMN_DELIMITER) csv_writer.writerow(v.get_raw_entry()) def _db_path_exists(self) -> bool: @@ -101,7 +91,6 @@ class Database: ' created once process finishes,' ' ignore if it\'s the first run', self.db_path) return False - if not os.path.isfile(self.db_path): log.error('"%s" is not a file"', self.db_path) sys.exit(1) @@ -115,6 +104,7 @@ class Database: log.debug('db contains %d rows', len(rows)) return rows + # TODO: don't include files that are not in the db anymore def read(self) -> None: log.debug('reading db') if not self._db_path_exists(): diff --git a/src/pyssg/database_entry.py b/src/pyssg/database_entry.py index 90c3f5f..1674a7c 100644 --- a/src/pyssg/database_entry.py +++ b/src/pyssg/database_entry.py @@ -20,15 +20,15 @@ class DatabaseEntry: if entry[4] != '-': self.tags = entry[4].split(',') - log.debug('"%s" tag: [%s]', self.fname, ', '.join(self.tags)) + log.debug('"%s" tags: %s', self.fname, self.tags) def __str__(self) -> str: - _return_str: str = '[{}, {}, {}, {}, [{}]]'\ + _return_str: str = '[{}, {}, {}, {}, {}]'\ .format(self.fname, self.ctimestamp, self.mtimestamp, self.checksum, - ', '.join(self.tags)) + self.tags) return _return_str # used for csv writing @@ -39,6 +39,5 @@ class DatabaseEntry: self.checksum, ','.join(self.tags) if self.tags else '-'] - # TODO: make the function return true/false if updated def update_tags(self, new_tags: list[str]) -> None: self.tags = new_tags diff --git a/src/pyssg/md_parser.py b/src/pyssg/md_parser.py index 14544a3..8751035 100644 --- a/src/pyssg/md_parser.py +++ b/src/pyssg/md_parser.py @@ -53,21 +53,16 @@ class MDParser: self.db: Database = db self.md: Markdown = _get_md_obj() - # TODO: include updated_tags when when implemented self.all_files: list[Page] = [] - # updated and modified are synonyms here - self.updated_files: list[Page] = [] self.all_tags: list[tuple[str, str]] = [] def parse_files(self) -> None: log.debug('parsing all files') - for f in self.files: + for i, f in enumerate(self.files): log.debug('parsing file "%s"', f) src_file: str = os.path.join(self.dir_config['src'], f) log.debug('path "%s"', src_file) - # get flag if update is successful - # update is only used to get a separate list of only updated files - file_updated: bool = self.db.update(src_file, remove=f'{self.dir_config["src"]}/') + self.db.update(src_file, remove=f'{self.dir_config["src"]}/') log.debug('parsing md into html') content: str = self.md.reset().convert(open(src_file).read()) @@ -81,19 +76,11 @@ class MDParser: self.dir_config) page.parse_metadata() - # keep a separated list for all and updated pages - if file_updated: - log.debug('has been modified, adding to mod file list') - self.updated_files.append(page) log.debug('adding to file list') self.all_files.append(page) - # parse tags - # TODO: only parse tags if set in config - # TODO: separate all tags and only updated tags - if page.tags is not None: - log.debug('parsing tags') - # add its tag to corresponding db entry if existent + if self.dir_config['tags'] and page.tags is not None: + log.debug('parsing tags for "%s"', f) self.db.update_tags(f, list(map(itemgetter(0), page.tags))) log.debug('add all tags to tag list') @@ -107,9 +94,8 @@ class MDParser: log.debug('no tags to parse') log.debug('sorting all lists for consistency') - self.all_tags.sort(key=itemgetter(0)) - self.updated_files.sort(reverse=True) self.all_files.sort(reverse=True) + self.all_tags.sort(key=itemgetter(0)) pages_amount: int = len(self.all_files) # note that prev and next are switched because of the diff --git a/src/pyssg/page.py b/src/pyssg/page.py index 2a6fce7..7f8c542 100644 --- a/src/pyssg/page.py +++ b/src/pyssg/page.py @@ -143,7 +143,7 @@ class Page: ' "default_image" set in the config file') # if contains open graph elements - # TODO: better handle thsi part + # TODO: better handle this part try: # og_e = object graph entry og_elements: list[str] = self.meta['og'] diff --git a/src/pyssg/pyssg.py b/src/pyssg/pyssg.py index 94584aa..d158caa 100644 --- a/src/pyssg/pyssg.py +++ b/src/pyssg/pyssg.py @@ -80,7 +80,6 @@ def main() -> None: config['info'] = dict() config['info']['version'] = static_config['info']['version'] config['info']['debug'] = str(args['debug']) - config['info']['force'] = str(args['force']) if args['init']: log.info('initializing the directory structure and copying over templates') -- cgit v1.2.3-70-g09d2